Eu tenho uma entrada em /etc/sudo para um usuário que pode executar o sudo para todos os comandos.
fred TODOS=(TODOS:TODOS) TODOS
Conforme documentação o ALL final é responsável por permitir o acesso a todos os comandos.
Eu gostaria que Fred pudesse executar uma reinicialização do nginx no Ubuntu 14.04 sem fornecer uma senha do sudo, mantendo a capacidade de invocar o sudo para outros comandos. Osudoersa documentação não está clara, mas acredito
fred ALL=(ALL) NOPASSWD: /usr/sbin/service
permite apenas que Fred execute um comando. Quero dar ao Fred a capacidade de executar todos os comandos como root via sudo, com todos, exceto /usr/sbin/service, exigindo uma senha.
Olhando 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 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 substituirá o acesso root do comando ALL apenas para esse comando.
É o tipo de coisa que gosto de acertar na primeira vez. Alguém pode confirmar se a última linha funcionará (ou, alternativamente, dizer que não funcionará) para o propósito específico em questão, por favor?
Além disso, se funcionar para permitir que fred execute o serviço sem uma senha sudo, existe uma maneira de restringir os argumentos ao serviço, para que fred só possa trabalhar sem uma senha no serviço nginx, ou melhor ainda, para que fred só possa reiniciar esse servidor sem senha?
Obrigado.
Responder1
Os comandos na parte inferior da configuração substituem os acima. É mencionado na documentação emhttps://www.sudo.ws/man/1.8.15/sudoers.man.html#SUDOERS_FILE_FORMATque não é mais ou menos específico, a menos que você os coloque em ordem dessa maneira.
Eu faço isso usando várias linhas. Várias linhas e regras serão mais fáceis de ler e entender no futuro, quando as coisas ficarem mais complicadas. Várias linhas podem ajudá-lo 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 linhas a seguir vêm do meu arquivo sudoers. Permitir que os membros do grupo wheel
executem todos os comandos e, em seguida, executem comandos especificamente 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 indicar. A página de manual do sudoers é ridícula. Eu li um livro ótimo (fácil de ler) sobre isso há algum tempo (Domínio do Sudopor Michael W. Lucas) e este exemplo funciona para mim em várias máquinas Linux e BSD.
Responder2
Olá, isso pode funcionar. Tente este login como root e siga os comandos abaixo $ acrescente as linhas abaixo no arquivo sudoers
fred TODOS=(TODOS)NOPASSWD:TODOS