¿Cómo ejecutar el comando sudo sin contraseña?

199

¿Cómo el usuario ubuntu en las imágenes de AWS para Ubuntu Server 12.04 tiene sudo sin contraseña para todos los comandos cuando no hay configuración para él en /etc/sudoers ?

Estoy usando el servidor Ubuntu 12.04 en Amazon. Quiero agregar un nuevo usuario que tenga el mismo comportamiento que el usuario predeterminado de Ubuntu. Específicamente, quiero un sudo sin contraseña para este nuevo usuario.

Así que agregué un nuevo usuario y fui a editar /etc/sudoers (usando visudo por supuesto). Después de leer ese archivo, parecía que el usuario predeterminado ubuntu obtenía su contraseña sudo de ser miembro del grupo admin . Entonces agregué mi nuevo usuario a eso. Lo cual no funcionó. Luego traté de agregar la directiva NOPASSWD a sudoers . Lo cual tampoco funcionó.

De todos modos, ahora solo tengo curiosidad. ¿Cómo el ubuntu usuario obtiene privilegios sin contraseña si no están definidos en /etc/sudoers . ¿Cuál es el mecanismo que permite esto?

    
pregunta aychedee 23.09.2012 - 11:30

3 respuestas

292

De acuerdo, descubrí la respuesta, así que también puedo ponerla aquí para que esté completa. Al final de /etc/sudoers hay lo que pensé que era solo un comentario:

#includedir /etc/sudoers.d

Sin embargo, esto realmente incluye los contenidos de ese directorio. Dentro de cuál es el archivo %código%. Que tiene los contenidos esperados

# ubuntu user is default user in cloud-images.
# It needs passwordless sudo functionality.
ubuntu ALL=(ALL) NOPASSWD:ALL

Así que ahí es donde vive la configuración de sudo para el usuario predeterminado de ubuntu.

Deberías editar este archivo usando visudo. El siguiente comando le permitirá editar el archivo correcto con visudo.

sudo visudo -f /etc/sudoers.d/90-cloudimg-ubuntu

Y agrega una línea como:

aychedee ALL=(ALL) NOPASSWD:ALL

Al final.

    
respondido por el aychedee 23.09.2012 - 12:27
75

Descubrí que lo más sencillo para replicar fácilmente este comportamiento en varios servidores era el siguiente:

sudo visudo

Cambiar esta línea:

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

a esta línea:

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

Y moverlo debajo de esta línea:

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

ahora deberías tener esto:

# 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

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

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

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

#includedir /etc/sudoers.d

luego, para cada usuario que necesite sudo, acceda CON una contraseña :

sudo adduser <user> sudo

y para cada usuario que necesita sudo acceso SIN contraseña :

sudo adduser <user> admin

y finalmente, ejecuta esto:

sudo service sudo restart

¡Y eso es todo!

Editar: es posible que deba agregar el grupo de administración ya que no creo que exista por defecto.

sudo groupadd admin

También puede agregar el usuario AWS ubuntu predeterminado al grupo admin a través de este comando:

sudo usermod ubuntu -g admin
    
respondido por el jiminikiz 03.04.2014 - 23:45
-1

Respuesta corta sin usar ningún editor (probado en bash, muy arriesgado de ejecutar en hosts remotos).

Configure sudo para que funcione sin una contraseña para el usuario actual:

echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers

Compruebe la edición con:

sudo visudo -c

Verifica si puedes usar sudo sin una contraseña:

sudo cat /etc/sudoers | grep "$USER"

... o simplemente pruébalo con:

sudo <anything>
    
respondido por el user315445 14.08.2014 - 00:25

Lea otras preguntas en las etiquetas