Agregar NOPASSWD en / etc / sudoers no funciona

47

El 14.04 aquí. SSHed en mi máquina, agregué la siguiente línea a /etc/sudoers:

myuser   ALL=NOPASSWD: ALL

Y luego trató de correr:

sudo mkdir /etc/blah

... y me piden mi contraseña. ¿¡¿Por qué?!?

Yo no quiero que se le solicite la contraseña cuando se hace esta operación. Tenga en cuenta que cuando corro ls -ltr /me sale:

drwxr-xr-x 94 root root  4096 Jul 30 13:28 etc

Pero no creo que esto importe porque me he erigido en un "sudoer", ¿verdad?

Más importante aún, ¿qué debo hacer para poder ejecutar sudo mkdir /etc/blahcomo mi usuario actual ( myuser) sin que se me solicite la contraseña?

Aquí está mi /etc/sudoersarchivo completo :

#
# 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
fizzbuzz  ALL=NOPASSWD: ALL
chadmin   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
Zac
fuente
¿Podría publicar su archivo de sudoers? La directiva es correcta, pero no pudo funcionar debido al contexto.
Lety
Gracias @Letizia - por favor mira mi actualización, ¿algo te llama la atención?
Zac
Supongo que también debería tener en cuenta que no utilicé, visudosin embargo, las ediciones manuales de este archivo no fueron trabajos de copiar y pegar, escribí todo tal como está. ¿Pero visudoedita otros archivos además de este? Eso podría ser ...
Zac
Además, verifique los archivos en /etc/sudoers.d/, pueden ser de primer orden de las cosas/etc/sudoers
tokland

Respuestas:

69

Es la secuencia / orden de las reglas que causó esto. La última regla tiene preferencia.

Para solucionar su problema, simplemente mueva sus líneas,

fizzbuzz  ALL=NOPASSWD: ALL
chadmin   ALL=NOPASSWD: ALL

del sudoersarchivo a

sudo visudo -f /etc/sudoers.d/myOverrides 

Este es un mejor enfoque que editar el sudoersarchivo con un editor de texto sin formato. Si inserta accidentalmente errores en el archivo, es posible que ya no pueda ejecutarlo sudo. ¡Utilice siempre visudo, para que la sintaxis esté marcada y reciba advertencias sobre errores!

Su directiva no funciona porque es anulada por:

%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

Si ejecuta el groupscomando, debería ver que su usuario pertenece a estos grupos.

Lety
fuente
El nombre del archivo debe seguir una convención de nn-somename, por ejemplo/etc/sudoers.d/20-myoverrides
shimatai
Sí, por supuesto, si tiene más de un archivo, estos se analizan en orden léxico ordenado, por lo que es una buena práctica usar un número y será fácil saber ese orden.
Lety
22

Si myuser está en el grupo sudo , entonces este orden de las líneas no proporcionará acceso sin contraseña (como señaló Florian Diesch), porque la tercera línea anula la primera.

myuser    ALL=(www-data:www-data) NOPASSWD: ALL
# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

Así que solo pon las líneas en este orden:

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
myuser    ALL=(www-data:www-data) NOPASSWD: ALL

En la cuenta myuser , use sudo -lpara verificar qué permisos tiene myuser .

Kostyantyn
fuente
11

Si varias entradas coinciden para un usuario, se usa la última . Entonces, si fizzbuzzy chadminson miembros de los grupos admino sudoaún se les pedirá una contraseña.

Coloque las dos líneas al final del sudoersarchivo después de la #includedirlínea.

Florian Diesch
fuente
De hecho, una combinación de @ Letizia y sus respuestas es la mejor, ya que #includedires la última entrada sudoerspor defecto.
muru
0

Idealmente, si está personalizando qué comandos se pueden ejecutar sudo, debe realizar estos cambios en un archivo separado en /etc/sudoers.d/lugar de editar el sudoersarchivo directamente. También debe usar siempre visudopara editar los archivos. NUNCA debe otorgar NOPASSWDlos ALLcomandos.

Ejemplo: sudo visudo -f /etc/sudoers.d/mynotriskycommand

Inserte su línea otorgando permiso: myuser ALL= NOPASSWD: /bin/mkdir

Luego guarde y salga y visudole avisará si tiene algún error de sintaxis.

Puede ejecutar sudo -lpara ver los permisos que se le han otorgado a su usuario, si alguno de los NOPASSWDcomandos específicos del usuario aparece ANTES de cualquier %groupyouarein ALL=(ALL) ALLcomando en la salida, se le solicitará su contraseña.

Si se encuentra creando muchos de estos archivos sudoers.d, entonces tal vez desee crearlos nombrados por usuario para que sean más fáciles de visualizar. Tenga en cuenta que el orden de los NOMBRES DE ARCHIVO y de las REGLAS dentro del archivo es muy importante, el ÚLTIMO cargado gana, ya sea MÁS o MENOS permisivo que las entradas anteriores.

Puede controlar el orden de los nombres de archivo utilizando un prefijo de 00-99 o aa / bb / cc, aunque también tenga en cuenta que si tiene CUALQUIER archivo que no tenga un prefijo numérico, se cargará después de los archivos numerados, anulando la configuración. Esto se debe a que, según la configuración de su idioma, la "clasificación léxica" que utiliza el shell clasifica primero los números y luego puede intercalar mayúsculas y minúsculas al ordenar en orden "ascendente".

Intente ejecutar printf '%s\n' {{0..99},{A-Z},{a-z}} | sorty printf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sortpara ver si su idioma actual se imprime, AaBbCcetc. o ABCluego abcpara determinar cuál sería el mejor "último" prefijo de letra para usar.

dragon788
fuente