回答:
違いは次のとおりです。
su <someuser>
ユーザー用のシェルを起動します someuser
。あなたがrootでない限り、あなたはパスワードを聞かれるでしょう。 someuser
。 su
(ユーザ名なしで)ユーザ用のシェルを起動する root
(rootパスワードを聞いた後)。 sudo
パスワードを要求し、(sudo権限があると仮定して)root権限でコマンドを実行します( sudo reboot
パスワードを要求してコンピュータを再起動します。 sudo su <somesuer>
実行する su
root権限でだからそれは求めていません someuser
のパスワードしかしそれは求めます きみの sudoの権利を確認するためのパスワード。その後シェルを起動します ユーザーsomeuser 。 特権に関して によって開かれるシェルに違いはありません。 sudo su <someuser>
またはによって su <someuser>
。この ではない シェルプロセスが親プロセスの特権に昇格できないため、セキュリティ上の問題があります。
君は できる プロセスツリーを見ると違いがわかります。 sudo su <someuser>
ショー(bashを仮定):
+───bash───su───bash
しながら su <someuser>
示しています:
+───bash───sudo───su───bash
次の質問は、おそらく無人スクリプトでパスワードを渡す方法です。ユーザー入力は不要です。私は2つの選択肢があると思います。
echo <yourpassword> | sudo -S su -l <someuser>
あるいはもっと良い: echo <yourpassword> | sudo -S su -l <someuser> -c '<somecommand>'
。自分のパスワードが入っているので、スクリプトが自分だけが読めるようにしてください。もっと間接的に言えば、パスワードをファイルに保存し、それをsudoに渡すことができます。そうすれば、あなたのスクリプトは読めますが、あなたのパスワードファイルは読めません。 sudo su
あなたにあげる。使用する su
なしで sudo
あなたはユーザーのパスワードを知る必要があります。一度ログオンした環境は同じです。走れない場合 sudo
しかし、rootのパスワードを知っている、あなたが使用することができます su
それから su <someuser>
これで、再度&lt; someuser&gt;としてログオンできるようになります。彼/彼女のパスワードを知らずに。
su - <someuser>
。それはすべてのそのユーザーの通常の環境をロードするでしょう。それを望まない場合もあるかもしれませんが、ユーザーが抱えている問題をトラブルシューティングしようとしている場合、通常の環境と同じように自分の環境を用意するのが便利です。