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

142

Prefacio

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

NOTA: He realizado estos cambios en una máquina dedicada que ejecuta Ubuntu Desktop 13.04, que uso exclusivamente con fines de aprendizaje. Entiendo que es un gran riesgo de seguridad habilitar el sudo NOPASSWD.

Pregunta

Inicialmente, mi único cambio en el archivo sudoers (/ etc / sudoers) fue una línea, una especificación de usuario que debería haber habilitado 'nicholsonjf' para ejecutar todos los comandos con sudo sin tener que ingresar una contraseña (consulte 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 todavía se me solicitó mi contraseña cada vez que ejecuté un comando como 'nicholsonjf'. Solo pude comenzar a ejecutar comandos sudo como 'nicholsonjf' una vez que eliminé 'nicholsonjf' de los grupos sudo y admin.

¿Alguien puede explicar por qué funcionó?

¿Es porque el usuario 'nicholsonjf' estaba heredando los derechos de sudo de las dos especificaciones de grupo de 'admin' y 'sudo' (vistos a continuación en el archivo sudoers), que anulaban la especificación de usuario 'nicholsonjf' porque estaban más abajo en el ¿archivo de configuración?

James Nicholson
fuente
77
nota: ALL = NOPASSWD: ALL tiene que ser ALL = (ALL) NOPASSWD: ALL o de lo contrario no funciona ...
André Verwijs

Respuestas:

164

La línea que agregó se anuló. De man sudoers:

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

En su caso nicholsonjfera miembro del grupo, sudopor lo que para él se aplicaba esta línea:

%sudo   ALL=(ALL:ALL) ALL

Si desea anular las entradas, /etc/sudoerssimplemente coloque las nuevas entradas después de ellas.

La nueva entrada debería verse como

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

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

pabouk
fuente
66
Para una solución completa, me gustaría ver algo sobre NOPASSWDesta respuesta ...
Daniel Alder
22
Creo que la solución debería ser:%sudo ALL=(ALL) NOPASSWD:ALL
Daniel Alder
3
@DanielAlder: La línea de especificación de la pregunta nicholsonjf ALL=NOPASSWD: ALLes correcta. Simplemente estaba en un lugar equivocado como expliqué en la respuesta. ------ La Runasespecificación, en su caso (ALL), es opcional. Si se omite la especificación puede ejecutar los comandos como rooty no se puede utilizar -uy -gopciones de sudo.
pabouk
Este es un riesgo de seguridad peor ya que brinda a múltiples usuarios acceso sin contraseña. Si es su PC personal, entonces eso no es significativo, tal vez. Simplemente movería la línea personal, para durar.
Mark Williams
44
Una adición, en lugar de corrección, si usa algo basado en Debian / ubuntu (puede aplicarse generalmente, no se ve en ningún otro lado). Su mejor apuesta absoluta es agregar comandos personalizados a un archivo en /etc/sudoers.d/ y dejar sudoers en sí mismo para ser administrado por el administrador de paquetes.
Aquarion
120

Para un solo usuario, agregue esta línea al final de su sudoersarchivo usandosudo visudo

superuser ALL=(ALL) NOPASSWD: ALL

Para un grupo

%supergroup  ALL=(ALL) NOPASSWD: ALL
Fedir RYKHTIK
fuente
8
Antes de leer esta respuesta lo hice %sudo ALL=NOPASSWD: ALLy funciona. ¿Soy el único que encuentra la Forma Backus-Naur Extendida realmente difícil de entender?
Vince
44
@Vince Cuando utilicé su comando, no puedo sudosin contraseña como usuario sin privilegios de sudo. Por ejemplo sudo -u root -i, funciona, pero sudo -u git -ino.
NeverEndingQueue
Esta es una respuesta considerablemente más útil que la aceptada, que si bien responde la pregunta del OP, probablemente no sea lo que la mayoría de las personas llegan a esta página a través de Google buscando.
Mahmoud Al-Qudsi
3

Para nunca solicitar al usuario actual una contraseña cuando ese usuario usa sudodo

echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/dont-prompt-$USER-for-password

esto creará un archivo llamado /etc/sudoers.d/dont-prompt-<YOUR USERNAME>-for-sudo-passwordy significará que al usuario que ejecutó ese comando no se le pedirá su contraseña cuando ejecute el sudocomando. Aún se le pedirá la contraseña en otros contextos, como la instalación de cosas desde la aplicación gráfica de Ubuntu Software .

Las ventajas de hacerlo de esta manera sobre agregar la línea en el echocomando para /etc/sudoersusar sudo visudo(como lo sugieren las otras respuestas) son

  1. /etc/sudoersa veces se modifica por actualizaciones del sistema, mientras que los archivos /etc/sudoers.dno
  2. el sudo visudométodo es propenso a errores (como lo demuestra esta misma pregunta), mientras que copiar / pegar un comando es mucho más difícil de estropear

De acuerdo con sudo cat /etc/sudoers.d/READMEesta característica (de poner archivos sudoer adicionales /etc/sudoers.d) se ha habilitado de forma predeterminada desde Debian 1.7.2p1-1, que salió a fines de la década de 1990 (Ubuntu se basa en Debian ).

Boris
fuente
(siéntase libre de editar mi respuesta si puede encontrar un mejor nombre de archivo)
Boris
0

Como Vince ha mencionado en un comentario , puede usar esta línea:

%sudo ALL=NOPASSWD: ALL

(Esto es diferente de las líneas que se muestran en esas respuestas , y resolvió el problema para mí).

E. Fortes
fuente
@Eliah, esto no es tan diferente de las otras respuestas. Todo lo que hace es reemplazar el marcador supergroupde posición en la respuesta de Fedir con sudo. ¿Qué sigue, otro usuario para el grupo wheel? ¿O algún otro grupo que el usuario esté usando?
muru
1
@muru "Todo lo que hace es reemplazar el marcador supergroupde posición en la respuesta de Fedir con sudo". ¿Qué? Reemplazar supergroupcon sudoen la línea %supergroup ALL=(ALL) NOPASSWD:ALLrinde %sudo ALL=(ALL) NOPASSWD:ALL, no %sudo ALL=NOPASSWD: ALL.
Eliah Kagan
Lo cual es posiblemente peor, ya que ahora NOPASSWD es solo para root como el usuario objetivo. Entonces, ¡ni siquiera responde la pregunta correctamente!
muru
@muru Lo que no se puede decir , sin embargo, es una sustitución de supergroupcon sudo. Esta es su propia respuesta, no una publicación de agradecimiento o una copia de otra respuesta. Pero sí, estoy de acuerdo: a menos que tengan la intención de hacerlo, esto no será tan bueno para la mayoría de los usuarios como los métodos en las otras respuestas. (Pero, especialmente teniendo en cuenta que la pregunta dice "todos los comandos", no "todos los usuarios objetivo", no creo que esto esté en efecto ni siquiera tratando de responder la pregunta que se hizo).
Eliah Kagan
Esto funcionó para mí y quería compartirlo con otros usuarios :) (elimine mi comentario si lo desea).
E. Fortes