我有必须以user2身份运行的script.sh。但是,此脚本只能在我的应用程序中的user1下运行。
我想运行以下命令:
su user2 -C script.sh
但能够在没有密码的情况下运行。
我也希望这是非常严格的,因为在user1中只能在user2下运行script.sh而不是其他。
我尝试用sudoers文件做这个,并且在经过几个小时的尝试后无休止地感到困惑。
如果有人可以提供一个明确的例子来说明如何实现这一点(而不是像使用sudoers这样的通用),我们将非常感激。
答案 0 :(得分:190)
尝试跑步:
su -c "Your command right here" -s /bin/sh username
如果你有权使用sudo作为该用户,这将以命令用户名运行该命令。
答案 1 :(得分:111)
致电visudo
并添加:
user1 ALL=(user2) NOPASSWD: /home/user2/bin/test.sh
命令路径必须是绝对的!然后从sudo -u user2 /home/user2/bin/test.sh
shell中调用user1
。完成。
答案 2 :(得分:0)
`su -c "Your command right here" -s /bin/sh username`
以上命令是正确的,但是在Red Hat上,如果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