困惑于sudo vs su和运行脚本

时间:2013-08-09 07:13:07

标签: linux shell sudo su

当我sudo su - john时,我成为了用户john ,没有要求输入密码。
但当我这样做时:sudo su - john /usr/share/script_to_run.pl我被要求输入密码。 同样适用于sudo -u john /usr/share/script_to_run.pl

为什么呢?我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

现在,首先,-表示您需要登录shell。第一个语句意味着您希望以root身份(因此sudo)希望在您以john身份登录时显示它。某处配置为您当前登录的用户有权在不使用密码的情况下执行sudo。

第一个实例中发生的是您执行一个命令su - john(意思是“以john身份登录”),然后以root身份执行此操作(因为您首先放置sudo )。您当前的用户拥有sudo-without-password-rights,root有权成为任何用户。

第二次尝试是错误的。您不能使用su以这种方式执行命令,并且当您希望su执行单个命令时,我认为没有理由将其设置为登录shell。

在第三个选项中,您(作为当前登录的用户)想要为一个命令“变成”john。为此,您需要john的密码。 (但是,当您以root执行此操作时,您不需要密码。)

为了使它工作,你可以尝试

sudo su --command="/usr/share/script_to_run.pl" john

或者甚至可能更具异国情调的

sudo sudo -u john /usr/share/script_to_run.pl

答案 1 :(得分:0)

"须藤"旨在提供" su"的所有功能,但不要求他们使用其他用户的密码。您需要的答案在/ etc / sudoers文件中,可以使用" sudo visudo"进行编辑。命令。在这里你会发现你可以让你的用户不需要密码:

cratylus ALL=(ALL)       NOPASSWD: ALL

然后用

提交查询
sudo -u cratylus the statement 

注意:不要引用该声明 - 您只能为" su -c"命令。