
以下の違いを教えてください。sudo su "ユーザー名"対su "ユーザー名"
どちらが権限が高いのでしょうか?sudo su "ユーザー名"、私は1つのコマンドのみルート権限を持っていますか?スクリプトの冒頭部分は正常に動作するが、残りは動作しない可能性がありますか?この場合su "ユーザー名"より高い権限があるため、こちらが推奨されますか? 2 つのコマンドの違いを教えてください。よろしくお願いします。
答え1
違いは次のとおりです。
su <someuser>
ユーザー のシェルを起動しますsomeuser
。root でない場合は、 のパスワードが求められますsomeuser
。su
(ユーザー名なし) ユーザーのシェルを起動しますroot
(ルート パスワードを尋ねた後)。sudo
パスワードを要求し、(sudo 権限を持っていると仮定して) root 権限でコマンドを実行します (sudo reboot
パスワードを要求し、コンピューターを再起動します)。sudo su <somesuer>
はルート権限で実行されますsu
。したがって、someuser
パスワードは要求されません。ただし、あなたのパスワードを入力してsudo権限を確認します。その後シェルが起動しますユーザー someuser。
特権に関してsudo su <someuser>
によって開かれる殻とによって開かれる殻には違いはありませんsu <someuser>
。ないシェル プロセスは親プロセスの権限に昇格できないため、セキュリティ上の問題が発生します。
あなたできるプロセスツリーを見ると違いがわかります。次のようにsudo su <someuser>
表示されます (bash を想定)。
+───bash───su───bash
ショー中su <someuser>
:
+───bash───sudo───su───bash
次の質問は、おそらく、ユーザー入力を必要としない無人スクリプトでパスワードを渡す方法でしょう。次の 2 つのオプションがあると思います。
- cron(またはその派生)からスクリプトを実行し、rootとして実行する
- 自分のアカウントからスクリプトを実行し、次のように sudo の -S オプションを使用します。
echo <yourpassword> | sudo -S su -l <someuser>
または、次のようにするとさらに良いでしょう。echo <yourpassword> | sudo -S su -l <someuser> -c '<somecommand>'
スクリプトにはパスワードが含まれているため、スクリプトは自分だけが読み取り可能であることを確認してください。より間接的に、パスワードをファイルに保存し、それを sudo に cat することもできます。すると、スクリプトは読み取り可能になりますが、パスワード ファイルは読み取り不可になります。