当我这样做时,我无需输入密码即可sudo su - john
成为用户。
但是当我这样做时:我被要求输入密码。也一样john
sudo su - john /usr/share/script_to_run.pl
sudo -u john /usr/share/script_to_run.pl
为什么?我在这里做错了什么?
现在,首先,-
意味着你想要一个登录shell。第一条语句意味着您希望以 root 身份(因此使用sudo
),使其在您以 登录时显示john
。在某处配置为您当前登录的用户有权在不使用密码的情况下执行 sudo。
在第一个实例中发生的情况是您执行一个命令su - john
(意思是“登录我john
作为sudo
成为任何用户的权利。
第二次尝试是错误的。您不能使用su
以这种方式执行命令,并且当您希望 su 执行单个命令时,我认为没有理由将其设为登录 shell。
在第三个选项中,您(作为当前登录的用户)想要“成为”john
一个命令。为此,您将需要john
s 密码。(但是,当您这样做root
时,您不需要密码。)
为了让它工作,你可能会尝试
sudo su --command="/usr/share/script_to_run.pl" john
或者甚至更具异国情调
sudo sudo -u john /usr/share/script_to_run.pl
“sudo”旨在提供“su”的所有功能,但不要求他们使用其他用户的密码。您需要的答案在 /etc/sudoers 文件中,可以使用“sudo visudo”命令进行编辑。在这里你会发现你可以让你的用户不需要密码:
cratylus ALL=(ALL) NOPASSWD: ALL
然后提交查询
sudo -u cratylus the statement
注意:不要引用该语句 - 您只对“su -c”命令执行此操作。