2017-09-09 15 views
0

私はWindowsシェルを開き、rootユーザーであるSUを書くとき、私は再びSU、そして再び、そして再び書くことができることに注意してください...私は終了を記述する場合、これは私を導きます前の "suインスタンス"(?)と書かなければなりません。と書かなければなりません。suと書いてあります。この複数の「インスタンス」の意味は何ですか?また、この動作の利点はありますか?シェルでネストされた "su"コマンド呼び出しの意味は何ですか?

答えて

0

suコマンドを実行するたびに、新しいシェルが現在のシェル内で開きます。

シェルを終了するには、exitを実行します。

0

suを実行すると、親シェルのサブプロセス(子プロセス)を作成します。シェルでbash(またはzsh)を実行すると、その意味は同じです。

現在のサブシェルのレベルを知りたい場合は、echo $SHLVLを実行してください。

suを複数回実行すると、プロセスファミリが作成されます。

2

UNIXプログラミングモデルでは、ユーザープロセスがルートまたは他のユーザーの権限を取得する方法はありません。

これは、単純にrootのシェルにあなたの現在のシェルをオンsuのバージョンを記述することはできませんことを意味します。代わりに、suid実行可能ファイルを実行することによってrootアクセス権を取得する必要があり、それは必然的に新しいインスタンスを作成します。

具体的な利点はそれだけで伝統的なUnixでsuを実装するための唯一の方法であることを起こる、ありません。

suの代わりにexec suを使用して、現在のシェルを新しいインスタンスに置き換えることができます。これは、ルートシェルのexitが単にあなたをログアウトすることを意味します。

しかし、私はちょうどそれと一緒に行くことをお勧めします。 vimまたはnanoを終了すると、元のシェルに戻ることになります。 sshを終了すると、元のシェルに戻ることになります。 suを例外にしないでください。

+0

は_exec su_ではなく、子1 paralellシェルを開くことを言っていませんか?これは何のために役立つでしょうか? – Leopoldo

+1

'execのsu'はちょうど* *新しいプロセスと現在のシェルを置き換えます。 – chepner

関連する問題