/etc/sudoers configura al usuario para que tenga uso general de sudo, sin solicitar contraseña para un solo comando

/etc/sudoers configura al usuario para que tenga uso general de sudo, sin solicitar contraseña para un solo comando

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 wheelejecuten todos los comandos y luego ejecuten específicamente comandos en el REBOOTalias 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

información relacionada