Sudoers:无法运行两个命令列表,其中第二个命令列表具有 glob * 并拒绝第一个命令列表

Sudoers:无法运行两个命令列表,其中第二个命令列表具有 glob * 并拒绝第一个命令列表

我想要的是:

  • 能够以/sbin/print/managequeue.sh -p app1 --view其他用户身份运行而无需询问密码。
  • 能够以另一个用户身份运行/sbin/print/managequeue.sh -p app1 --cancel (或--delete、或 --pause等),但要求输入密码。

最好,我不想创建一个Cmnd_Alias包含所有可能参数的对象。因此,我尝试了以下三个别名和用户规范:

Host_Alias      PRINTSRVS = printsrv, printsrvbkp
Cmnd_Alias      APP1PMV = /sbin/print/managequeue.sh -p app1 --view
Cmnd_Alias      APP1PMD = /sbin/print/managequeue.sh -p app1 *, !APP1PMV

%app1adms, %helpdesk PRINTSRVS = (printop2:printop2) NOPASSWD: APP1PMV, \
                                 (printop2:printop2) PASSWD: APP1PMD

当我运行时sudo -u printop2 /sbin/print/managequeue.sh -p app1 --cancel它有效:

[sudo] password for app1adm1:
Managing queue...

但是当我运行时sudo -u printop2 /sbin/print/managequeue.sh -p app1 --view它没有:

Sorry, user app1adm1 is not allowed to execute '/sbin/print/managequeue.sh -p app1 --view' as printop2 on printsrv.

显然我的第二个命令(printop2:printop2) PASSWD: APP1PMD覆盖了我的第一个命令(printop2:printop2) NOPASSWD: APP1PMV--view完全否认了这个论点。

您能解释一下这个问题吗?

答案1

基于sudoers (v1.8.25) 说明:

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

...您需要交换顺序,以便--view命令的版本列在最后。

相关内容