使用 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使用权限)。如果您想阻止询问密码的行为,您需要更改/etc/sudoers文件并使用NOPASSWD选项,这将允许您在不要求输入密码的情况下运行 sudo。

对于你的命令,你可以执行以下操作:

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

你的第二个命令也应该有效:

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

请注意,这两个示例不会先更改为用户root,然后再更改为用户dp-postgres,因此您可以选择设置自定义sudoers条目以允许此dp-postgres用户访问但不允许访问root。 对于应该限制和/或管理访问的多用户环境,这是一个很好的解决方案root。 (但是,我注意到您已经可以访问root,因此您不会通过第二个更严格的条目获得任何东西。)

相关内容