Tengo una entrada en /etc/sudo para un usuario que puede ejecutar sudo para todos los comandos.
Fred TODOS=(TODOS:TODOS) TODOS
Según la documentación, el ALL final es responsable de permitir el acceso a todos los comandos.
Me gustaría que Fred pudiera ejecutar un reinicio de nginx en Ubuntu 14.04 sin proporcionar una contraseña de sudo, y al mismo tiempo conservar la capacidad de invocar sudo para otros comandos. ElsudoersLa documentación no está clara, pero creo.
fred TODOS=(TODOS) NOPASSWD: /usr/sbin/servicio
Fred solo permite ejecutar un comando. Quiero darle a Fred la capacidad de ejecutar todos los comandos como root a través de sudo, y todos excepto /usr/sbin/service requieren una contraseña.
Mirando el BNF de la documentación
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 puedo usar múltiples Cmnd_Spec_Lists por lo tanto
fred TODOS=(TODOS: TODOS) TODOS, NOPASSWD: /usr/sbin/service
Pero la documentación no dice que este último NOPASSWD: Cmnd_Spec anulará el acceso raíz de TODOS los comandos solo para ese comando.
Es el tipo de cosas que me gusta hacer bien la primera vez. ¿Alguien puede confirmar que la última línea funcionará (o, alternativamente, decir que no funcionará) para el propósito específico en cuestión, por favor?
Además, si funciona para permitir que Fred ejecute el servicio sin una contraseña sudo, ¿hay alguna manera de restringir los argumentos al servicio, de modo que Fred solo pueda trabajar sin contraseña en el servicio nginx, o incluso mejor, de modo que Fred solo pueda reiniciar ese servidor? sin contraseña?
Gracias.
Respuesta1
Los comandos en la parte inferior de la configuración anulan los de arriba. Se menciona en la documentación enhttps://www.sudo.ws/man/1.8.15/sudoers.man.html#SUDOERS_FILE_FORMATque no es de mayor a menor específico, a menos que los ordenes de esa manera.
Hago esto usando varias líneas. Varias líneas y reglas serán más fáciles de leer y comprender en el futuro, cuando las cosas se vuelvan más complicadas. Varias líneas pueden ayudarle a establecer el orden.
# 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
Las siguientes líneas provienen de mi archivo sudoers. Permitir que los miembros del grupo wheel
ejecuten todos los comandos y luego ejecuten específicamente comandos en el REBOOT
alias sin contraseña.
Cmnd_Alias REBOOT = /sbin/halt, /sbin/reboot, \
/sbin/poweroff, /sbin/shutdown
%wheel ALL=(ALL) ALL
%wheel ALL=(ALL) NOPASSWD: REBOOT
Desafortunadamente, no tengo mucha documentación pública para indicarle. La página de manual de sudoers es ridícula. Leí un libro excelente (fácil de leer) sobre esto hace un tiempo (Dominio de los sudospor Michael W. Lucas) y este ejemplo me funciona en múltiples máquinas Linux y BSD.
Respuesta2
Hola, esto podría funcionar. Intente iniciar sesión como root y siga los siguientes comandos $ agregue las líneas siguientes en el archivo sudoers
fred TODOS=(TODOS)NOCONTRASEÑA:TODOS