
このコマンドを実行しようとしています:
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/sudoers
NOPASSWD
コマンドでは、次のようなことができます。
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 つ目のより制限の厳しいエントリによって得られるものは何もありません。)sudoers
dp-postgres
root
root
root