Sudoers: não pode executar duas listas de comandos em que o segundo tem um glob * e nega o primeiro

1

O que eu quero é:

  • para poder executar /sbin/print/managequeue.sh -p app1 --view como outro usuário sem pedir uma senha.
  • para poder executar /sbin/print/managequeue.sh -p app1 --cancel (ou --delete , ou --pause , etc) como outro usuário, mas pedindo senha.

De preferência, não quero criar um Cmnd_Alias com todos os argumentos possíveis. Então, tentei os três aliases e a especificação do usuário abaixo:

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

Quando executo o sudo -u printop2 /sbin/print/managequeue.sh -p app1 --cancel , funciona:

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

Mas quando executo sudo -u printop2 /sbin/print/managequeue.sh -p app1 --view , não funciona:

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

Aparentemente, meu segundo comando (printop2:printop2) PASSWD: APP1PMD anulou meu primeiro comando (printop2:printop2) NOPASSWD: APP1PMV e negou o argumento --view por completo.

Você poderia por favor explicar esta questão?

    
por Adriano_epifas 14.09.2018 / 16:14

1 resposta

0

Com base na sudoers (v1.8.25) descrição :

When multiple entries match for a user, they are applied in order. Where there are multiple matches, the last match is used (which is not necessarily the most specific match).

... você precisará trocar a ordem para que a versão --view do comando seja listada por último.

    
por 14.09.2018 / 20:14

Tags