web-dev-qa-db-ja.com

sudo su "username"とsu "username"

Sudo su "username"su "username"の違いは何ですか?

どちらがより高い特権を持っていますか? Sudo su "username"を使用してrootにログインすると、1つのコマンドに対してのみrootになりますか?つまり、スクリプトの最初の部分は問題なく動作する可能性がありますが、残りの部分は動作しません。したがって、この場合はsu "username"が推奨されます。これは、より高い特権を持っているためですか? 2つのコマンドの違いを教えてください、ありがとうございます。

5
Peter

違いは次のとおりです。

  • su <someuser>は、ユーザーsomeuserのシェルを起動します。 rootでない限り、someuserのパスワードを尋ねられます。
  • su(ユーザー名なし)は、ユーザーrootのシェルを起動します(ルートパスワードを要求した後)。
  • Sudoはパスワードを要求し、(Sudo権限がある場合)root権限でコマンドを実行します(Sudo rebootはパスワードを要求し、コンピューターを再起動します)。
  • Sudo su <somesuer>はroot権限でsuを実行します。そのため、someuserのパスワードは要求されません。ただし、Sudo権限を確認するためにyourパスワードを要求します。その後、シェルを起動しますfor somesomeuser

権限に関してSudo su <someuser>またはsu <someuser>によって開かれるシェルに違いはありません。これはis n'tシェルプロセスが親プロセスの権限に昇格できないため、セキュリティの問題です。

あなたcanプロセスツリーを見ると違いがわかります。 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に送信することができます。その後、スクリプトは読み取り可能になりますが、パスワードファイルは読み取れません。
10
agtoever