150

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

我想运行以下命令:

su user2 -C script.sh

但可以在没有密码的情况下运行。

我也希望这是非常严格的,因为在 user1 中只能在 user2 下运行 script.sh 而没有别的。

我已经尝试使用 sudoers 文件执行此操作,但经过数小时的尝试后,我一直感到困惑。

如果有人可以提供一个明确的示例来说明如何实现这一点(而不是像使用 sudoers 这样的通用示例),我们将不胜感激。

4

3 回答 3

195

尝试运行:

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

这将作为用户名运行命令,因为您有权作为该用户使用 sudo。

于 2012-09-20T16:51:56.907 回答
126

调用visudo并添加:

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

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

于 2011-08-01T23:47:55.783 回答
1
`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
于 2019-04-17T17:53:09.083 回答