/ etc / sudoers definem o usuário para ter uso geral de sudo, sem solicitação de senha para apenas um comando

1

Eu tenho uma entrada em / etc / sudo para um usuário que pode executar o sudo para todos os comandos.

fred ALL=(ALL:ALL) ALL

De acordo com a documentação, o ALL final é responsável por permitir o acesso a todos os comandos.

Eu gostaria que o fred pudesse executar uma reinicialização do nginx no Ubuntu 14.04 sem fornecer uma senha sudo, mantendo a capacidade de invocar o sudo para outros comandos. A documentação sudoers não está clara, mas acredito que

fred ALL=(ALL) NOPASSWD: /usr/sbin/service

só permite que o fred execute um comando. Eu quero dar a fred a habilidade de executar todos os comandos como root via sudo, com todos exceto / usr / sbin / service requerendo uma senha.

Olhando para o BNF da documentação

User_Spec ::= User_List Host_List '=' Cmnd_Spec_List  (':' Host_List '=' Cmnd_Spec_List)*   

Cmnd_Spec_List ::= Cmnd_Spec | Cmnd_Spec ',' Cmnd_Spec_List

Cmnd_Spec ::= Runas_Spec? SELinux_Spec? Solaris_Priv_Spec? Tag_Spec* Cmnd 

Runas_Spec ::= '(' Runas_List? (':' Runas_List)? ')' 

SELinux_Spec ::= ('ROLE=role' | 'TYPE=type') 

Solaris_Priv_Spec ::= ('PRIVS=privset' | 'LIMITPRIVS=privset')   

Tag_Spec ::= ('EXEC:' |
              'NOEXEC:' | 'FOLLOW:' | 'NOFOLLOW' |
              'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' |
              'NOLOG_OUTPUT:' | 'MAIL:' | 'NOMAIL:' | 'PASSWD:' |
              'NOPASSWD:' | 'SETENV:' | 'NOSETENV:')

parece que eu posso usar vários Cmnd_Spec_Lists assim

fred ALL=(ALL : ALL) ALL, NOPASSWD: /usr/sbin/service

Mas a documentação não diz que o último NOPASSWD: Cmnd_Spec irá sobrescrever o acesso root do comando ALL apenas para esse comando.

É o tipo de coisa que eu gosto de acertar na primeira vez, alguém pode confirmar por favor que a última linha funcionará (ou, alternadamente, diga que não vai funcionar) para o propósito específico na mão, por favor?

Além disso, se funcionar para permitir que o fred execute o serviço sem uma senha sudo, existe uma maneira de restringir os argumentos ao serviço, de modo que o fred só funcione sem uma senha no serviço nginx, ou melhor ainda, tão somente reiniciar esse servidor sem uma senha?

Obrigado.

    
por reboot 21.06.2016 / 19:28

2 respostas

0

Oi Isso pode funcionar Tente isso faça o login como root e siga os comandos abaixo $ anexe as linhas abaixo no arquivo sudoers

fred ALL = (TODOS) NOPASSWD: TODOS

    
por 21.06.2016 / 20:36
0

Os comandos na parte inferior da configuração substituem os acima. É mencionado na documentação no link que não é menos específico , a menos que você os coloque em ordem.

Eu faço isso usando várias linhas. Várias linhas e regras são mais fáceis de ler e entender no futuro, quando as coisas ficam mais complicadas. Várias linhas podem ajudar você a definir o pedido.

# I don't know what order this is interpreted in:
fred ALL=(ALL : ALL) ALL, NOPASSWD: /usr/sbin/service

# I do know what order this is interpreted in:
fred ALL=(ALL) ALL
fred ALL=(ALL) NOPASSWD: /usr/sbin/service

As seguintes linhas vêm do meu arquivo sudoers. Permitindo que os membros do grupo wheel executem todos os comandos, execute especificamente os comandos no REBOOT alias sem uma senha.

Cmnd_Alias      REBOOT = /sbin/halt, /sbin/reboot, \
                         /sbin/poweroff, /sbin/shutdown
%wheel ALL=(ALL) ALL
%wheel ALL=(ALL) NOPASSWD: REBOOT

Infelizmente, não tenho muita documentação pública para apontar. A página de manual do sudoers é ridícula. Eu li um grande (fácil de ler) livro sobre ele há algum tempo atrás ( Sudo Mastery por Michael W. Lucas) e este exemplo funciona para mim em vários Linux & Máquinas BSD.

    
por 30.01.2018 / 20:17