如何以没有密码的其他用户身份运行脚本?


145

我有必须作为user2运行的script.sh。但是,此脚本只能在我的应用程序的user1下运行。

我想运行以下命令:

su user2 -C script.sh

但无需密码即可运行。

我也希望这是非常严格的限制,因为在user1中只能在user2下运行script.sh,而不能在其他任何情况下运行。

我已经尝试过使用sudoers文件执行此操作,但经过数小时的尝试,它才变得无穷无尽。

如果有人可以提供一个明确的示例说明如何完成此操作(而不是像use sudoers这样的通用名称),将不胜感激。


15
我不是特别喜欢结局。这是一个关于如何以特定方式对系统编程的问题。因此,它是关于shell编程的,并且在SO的范围之内,这是关于编程的问题。显然,许多人并不认为这是题外话,应予以否决;该问题和答案都有相当数量的上投票。
Jonathan Leffler 2014年

Answers:


121

调用visudo并添加以下内容:

user1 ALL=(user2) NOPASSWD: /home/user2/bin/test.sh

命令路径必须是绝对的!然后sudo -u user2 /home/user2/bin/test.shuser1外壳调用。做完了


3
Ubuntu帮助上有关于sudoers格式的很好的描述。sudoers的手册页很丑陋:(
Mifeet

那么,如何将所有用户(而不只是user1)作为user2运行呢?
jiggunjer

193

尝试运行:

su -c "Your command right here" -s /bin/sh username

如果您具有以该用户身份执行sudo的权限,这将以用户名身份运行命令。


17
它像普通用户一样具有完整的sudo权限:sudo su -c "Your command right here" -s /bin/sh otheruser
rubo77

5
对于所有mac用户来说,这只是一个注释,显然语法有些不同:su username -c "command"
NHDaly 2013年

1
如果您尝试以screen其他用户身份开始,那么这可能会有所帮助-linuxquestions.org/questions/linux-software-2/…–
Mint

2
如果username(或在问题中user2)本身具有密码,则不允许跳过提示。另一个答案是:不需要密码,用户1和用户2。
phil294

1
`su -c "Your command right here" -s /bin/sh username`

上面的命令是正确的,但是在红帽上如果selinux强制执行,它将不允许cron以另一个用户身份执行脚本。例; execl: couldn't exec /bin/sh execl: Permission denied

我必须安装setroubleshoot和setools并运行以下命令来允许它:

yum install setroubleshoot setools
sealert -a /var/log/audit/audit.log
grep crond /var/log/audit/audit.log | audit2allow -M mypol
semodule -i mypol.p
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.