我遇到过一种情况,我希望主管理员用户(所有用户都具有 sudo 权限)以无密码 sudo 权限作为另一个用户执行一个命令。据我所知,这应该在 /etc/sudoers 中提供以下内容:
ramo ALL=(otherUser) NOPASSWD: /usr/bin/command
ramo ALL=(ALL) ALL
但这两行代码似乎有冲突,或者第二行代码覆盖了第一行代码。有什么方法可以实现这一点吗?
干杯
拉莫
编辑:事实证明,我稍微误解了 sudo 在指定用户时的工作方式。我的印象是,如果您有 ALL=(otherUser),那么您不需要“sudo -u otherUser”,而只需 sudo 即可。事实并非如此。
答案1
顺序很重要,其行为在 sudoers(5) 手册页中有描述:
当多个条目与用户匹配时,将按顺序应用它们。如果有多个匹配项,则使用最后一个匹配项(不一定是最具体的匹配项)。
根据您原来的规则,“(ALL) ALL”是最后一个匹配,因此 sudo 会提示输入密码。
以下 /etc/sudoers 有效:
ramo ALL=(ALL) ALL
ramo ALL=(otherUser) NOPASSWD: /bin/whoami
例如:
$ sudo -k /bin/whoami
[sudo] password for ramo:
root
$ sudo -k -u otherUser /bin/whoami
otherUser
$ sudo -k -u otherUser /bin/true
[sudo] password for ramo:
$ sudo -k /bin/true
[sudo] password for ramo:
在 Fedora 19 上使用 sudo-1.8.6p7-1 进行测试
答案2
我认为你可以用“!”来否定。试试第二行
ramo ALL=(ALL) !/usr/bin/command