回答:
違いは次のとおりです。
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>。それはすべてのそのユーザーの通常の環境をロードするでしょう。それを望まない場合もあるかもしれませんが、ユーザーが抱えている問題をトラブルシューティングしようとしている場合、通常の環境と同じように自分の環境を用意するのが便利です。