sudo 以其他用户身份执行并带参数

sudo 以其他用户身份执行并带参数

我创建了一个(系统)用户,例如:mysysuser和一些 sudo 规则,以便它可以在其他用户文件夹中进行一些维护。

该脚本需要以其他用户身份运行,但也需要一些参数。

因此,我在中创建了以下内容/etc/sudoers.d/mysysuser

例子:

Cmnd_Alias FIRST = /usr/bin/su -l user1 -c '/home/*/www/*/deploy.sh "$0" "$1" "$2"' * * *
Cmnd_Alias SECOND = /usr/bin/su -l user2 -c '/home/*/www/*/deploy.sh "$0" "$1" "$2"' * * *
mysysuser ALL=(ALL) NOPASSWD: FIRST,SECOND

然后我运行:

sudo /usr/bin/su -l user1 -c '/home/user1/www/site1/deploy.sh' "param 1" "param 2" "param 3"

这不起作用并要求输入密码。

这个不带参数的版本运行良好并且无需询问密码即可执行:

Cmnd_Alias FIRST = /usr/bin/su -l user1 -c /home/*/www/*/deploy.sh * * *

但是......脚本没有收到参数。

我知道 sudoers 文件需要它非常字面化,但通配符除外:*

我想知道为什么它不起作用,是:

“$0” “$1” “$2”

部分?

逃避美元符号会让人visudo呕吐。

更新:

根据评论,建议直接使用 sudo,而不使用 su 命令。

我尝试过这个,但现在我无法让它工作, sudo 要求输入密码,尽管它不应该。

/etc/sudoers.d/mysysuser:

Cmnd_Alias FIRST = /home/*/www/*/deploy.sh "$0" "$1" "$2" * * *
mysysuser ALL=(ALL) NOPASSWD: FIRST

我以 mysysuser 身份执行的命令:

sudo -u user1 /home/user1/www/site1/deploy.sh "param 1" "param 2" "param 3"

结果:

我们相信您已经收到了本地系统管理员的常规讲座。通常可以归结为以下三件事:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

[sudo] mysysuser 的密码:

答案1

要运行sudo你必须运行sudo

因此你的命令必须以 开头sudo

而且你永远不需要su与 结合使用sudosudo可以处理用户和组。您可以配置谁可以运行什么。

答案2

没关系,在 sudoers 文件中没有单引号它也可以正常工作:

Cmnd_Alias FIRST = /usr/bin/su -l user1 -c /home/*/www/*/deploy.sh "$0" "$1" "$2" * * *

用这个命令:

/usr/bin/su -l user1 -c '/home/user1/www/site1/deploy.sh' "param 1" "param 2" "param 3"

相关内容