Archivo Sudoers, habilitar NOPASSWD para el usuario, todos los comandos

Prefacio

Esta es una pregunta bastante compleja relacionada con el archivo Sudoers y el comando sudo en general.

NOTA: He hecho estos cambios en una máquina dedicada que ejecuta Ubuntu Desktop 13.04, que uso puramente para fines de aprendizaje. Entiendo que es un gran riesgo para la seguridad habilitar NOPASSWD sudo.

Pregunta

Inicialmente, mi único cambio en el archivo sudoers (/etc/sudoers) fue una línea, una especificación de usuario que debería haber permitido a 'nicholsonjf' ejecutar todos los comandos con sudo sin tener que introducir una contraseña (ver la línea que comienza con 'nicholsonjf'):

# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL
nicholsonjf    ALL=NOPASSWD: ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

Sin embargo, esto no funcionó, y me seguía pidiendo la contraseña cada vez que ejecutaba un comando como 'nicholsonjf'. Sólo pude empezar a ejecutar comandos sudo como 'nicholsonjf' una vez que eliminé 'nicholsonjf' de los grupos sudo y admin.

¿Puede alguien explicar por qué esto funcionó?

¿Se debe a que el usuario 'nicholsonjf' estaba heredando los derechos de sudo de las dos especificaciones de grupo de 'admin' y 'sudo' (que se ven abajo en el archivo sudoers), que estaban anulando la especificación del usuario 'nicholsonjf' porque estaban más abajo en el archivo de configuración?

Solución

La línea que has añadido ha sido anulada. De man sudoers:

Cuando varias entradas coinciden para un usuario, se aplican en orden. Cuando hay múltiples coincidencias, se utiliza la última coincidencia (que no es necesariamente la más específica).

En tu caso nicholsonjf era miembro del grupo sudo por lo que esta línea se aplica a él:

%sudo   ALL=(ALL:ALL) ALL

Si quieres anular las entradas en /etc/sudoers simplemente pon las nuevas entradas después de ellas.

La nueva entrada debe tener el siguiente aspecto

myuser ALL=(ALL) NOPASSWD: ALL para un solo usuario, o

%sudo ALL=(ALL) NOPASSWD: ALL para un grupo.

Comentarios (5)

Para un solo usuario, añada esta línea al final de su archivo sudoers utilizando sudo visudo.

superuser ALL=(ALL) NOPASSWD: ALL

Para un grupo

%supergroup  ALL=(ALL) NOPASSWD: ALL
Comentarios (3)

Como Vince ha mencionado en un comentario, puedes utilizar esta línea:

%sudo ALL=NOPASSWD: ALL

(Esto es diferente de las líneas mostradas en aquellos respuestas, y me solucionó el problema).

Comentarios (5)