sudoで別のユーザーに切り替えた後にコマンドを実行する

sudoで別のユーザーに切り替えた後にコマンドを実行する

このコマンドを実行しようとしています:

echo hello | sudo su - dp-postgres

しかし、私はこれを理解します:

-bash: line 1: hello: command not found

これも試してみました:

sudo su - dp-postgres -c 'echo hello'

しかし、現在のユーザーのパスワードを要求されます。

dp-postgresに切り替えてから、dp-postgresユーザーとして任意のコマンドを実行する必要があります。

答え1

sudoコマンドは、別のユーザーとしてコマンドを実行することを許可します。デフォルトでは、現在のユーザーのパスワードを要求しますが、これは通常の動作です (当然、ユーザーには使用権限も必要です)。パスワードを要求する動作を禁止したい場合は、ファイルを変更し、パスワードを要求されずに sudo を実行できるようにするオプションを使用するsudo必要があります。/etc/sudoersNOPASSWD

コマンドでは、次のようなことができます。

sudo su - dp-postgres <<-EOF
  echo hello
EOF

2 番目のコマンドも同様に機能するはずです:

sudo su - dp-postgres -c 'echo hello'

以下に例を示します。

$ sudo su - -c 'echo hello; id'
hello
uid=0(root) gid=0(root) groups=0(root)

sudo最初のユーザーはグループ内におり、次のようなものを持っているため、私の側ではパスワードは必要ありません。

%sudo   ALL=(ALL:ALL) NOPASSWD:ALL

ファイル内/etc/sudoers

答え2

他のところでも書かれているように、このsudoコマンドは、適切に権限を与えられたユーザーが他のユーザーとしてコマンドを実行することを可能にします。デフォルトでは、これは他の誰かは root ですが、(承認があれば) どのユーザーでもかまいません。また、デフォルトではsudo現在のユーザーのパスワードを要求します。

echo helloユーザーとしてコマンドを実行する場合はdp-postgres、次のようにします。

sudo -u dp-postgres echo hello

ログイン環境の設定が必要な場合は、以下を含めます-i:

sudo -iu dp-postgres echo hello

これら 2 つの例では、最初にユーザー に変更されroot、次に ユーザー に変更されるわけではないことに注意してください。そのため、このユーザーへのアクセスを許可し、 へのアクセスは許可しないdp-postgresカスタム エントリを設定することを選択できます。これは、 へのアクセスを制限および/または管理する必要があるマルチユーザー環境に適したソリューションです。(ただし、 へのアクセス権はすでにあるため、2 つ目のより制限の厳しいエントリによって得られるものは何もありません。)sudoersdp-postgresrootrootroot

関連情報