一个用户有多种 sudo 类型

Ram*_*amo 3 linux sudo

我遇到一种情况,我希望主管理员用户(所有人都使用 sudo)将无密码 sudo 作为一个命令的另一用户。据我所知, /etc/sudoers 中应该给出以下内容:

ramo   ALL=(otherUser) NOPASSWD: /usr/bin/command
ramo   ALL=(ALL) ALL
Run Code Online (Sandbox Code Playgroud)

但这两行似乎冲突,或者第二行覆盖了第一行。关于如何实现这一目标有什么想法吗?

干杯

拉莫

编辑:事实证明我在指定用户时稍微误解了 sudo 的工作原理。我的印象是,如果您有 ALL=(otherUser) 那么您不需要“sudo -u otherUser”,而只需 sudo 即可。事实并非如此。

小智 7

顺序很重要,其行为在 sudoers(5) 手册页中进行了描述:

当多个条目与一个用户匹配时,它们将按顺序应用。如果有多个匹配项,则使用最后一个匹配项(不一定是最具体的匹配项)。

根据您的原始规则,“(ALL) ALL”是最后一个匹配项,因此 sudo 会提示输入密码。

以下 /etc/sudoers 有效:

ramo   ALL=(ALL) ALL
ramo   ALL=(otherUser) NOPASSWD: /bin/whoami
Run Code Online (Sandbox Code Playgroud)

例如:

$ 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:
Run Code Online (Sandbox Code Playgroud)

在 Fedora 19 上使用 sudo-1.8.6p7-1 进行测试