¿Cómo ejecuto comandos sudo específicos sin contraseña?

211

En una máquina en particular, a menudo necesito ejecutar sudocomandos de vez en cuando. Estoy bien con ingresar la contraseña sudoen la mayoría de los casos.

Sin embargo, hay tres sudocomandos que quiero ejecutar sin ingresar la contraseña :

  • sudo reboot
  • sudo shutdown -r now
  • sudo shutdown -P now

¿Cómo puedo excluir estos comandos de la protección con contraseña sudo?

Bhavesh Diwan
fuente

Respuestas:

283

Usa la NOPASSWDdirectiva

Puede usar la NOPASSWDdirectiva en su /etc/sudoersarchivo .

Si se llama a su usuario y se llama a usersu host host, puede agregar estas líneas a /etc/sudoers:

user host = (root) NOPASSWD: /sbin/shutdown
user host = (root) NOPASSWD: /sbin/reboot

Esto permitirá al usuario userejecutar los comandos deseados hostsin ingresar una contraseña. Todos los demás sudocomandos ed aún requerirán una contraseña.

Los comandos especificados en el sudoersarchivo deben estar completamente calificados (es decir, usar la ruta absoluta al comando para ejecutar) como se describe en la sudoerspágina del manual . Proporcionar una ruta relativa se considera un error de sintaxis.

Si el comando termina con un /carácter final y apunta a un directorio, el usuario podrá ejecutar cualquier comando en ese directorio (pero no en ningún subdirectorio). En el siguiente ejemplo, el usuario userpuede ejecutar cualquier comando en el directorio /home/someuser/bin/:

user host = (root) NOPASSWD: /home/someuser/bin/

Nota: Utilice siempre el comando visudopara editar el sudoersarchivo para asegurarse de no bloquearse del sistema, en caso de que accidentalmente escriba algo incorrecto en el sudoersarchivo. visudoguardará el archivo modificado en una ubicación temporal y solo sobrescribirá el sudoersarchivo real si el archivo modificado se puede analizar sin errores.

Usar en /etc/sudoers.dlugar de modificar/etc/sudoers

Como alternativa a la edición del /etc/sudoersarchivo, puede agregar las dos líneas a un nuevo archivo, por /etc/sudoers.dejemplo /etc/sudoers.d/shutdown. Esta es una manera elegante de separar diferentes cambios a los sudoderechos y también deja el sudoersarchivo original intacto para facilitar las actualizaciones.

Nota: Nuevamente, debe usar el comando visudopara editar el archivo para asegurarse de no bloquearse del sistema:

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

Esto también garantiza automáticamente que el propietario y los permisos del nuevo archivo estén configurados correctamente.

Si sudoersestá en mal estado

Si no usó visudopara editar sus archivos y luego accidentalmente desordenó /etc/sudoerso desordenó un archivo, /etc/sudoers.dentonces se lo bloqueará sudo.

La solución podría ser arreglar los archivos usando pkexecuna alternativa a sudo.

Para arreglar /etc/sudoers:

pkexec visudo

Para arreglar /etc/sudoers.d/shutdown:

pkexec visudo -f /etc/sudoers.d/shutdown

Si la propiedad y / o los permisos son incorrectos para cualquier sudoersarchivo, el archivo será ignorado por sudolo que también podría quedar bloqueado en esta situación. De nuevo, puedes usar pkexecpara arreglar esto.

Los permisos correctos deberían ser así:

$ ls -l /etc/sudoers.d/shutdown 
-r--r----- 1 root root 86 Jul 16 15:37 /etc/sudoers.d/shutdown

Úselo pkexecasí para corregir la propiedad y los permisos :

pkexec chown root:root /etc/sudoers.d/shutdown
pkexec chmod 0440 /etc/sudoers.d/shutdown
mgd
fuente
2
Las dos líneas se refieren específicamente a estos dos comandos. Si userno se le otorgan sudoderechos de otras maneras, este usuario no puede suplantar otros comandos. Echa un vistazo a man sudoy man sudoers.
mgd
44
@StanKurdziel he intentado con esta línea en Mac OS X Yosemite y funcionó bien: mgd ALL=(root) NOPASSWD: /var/root/test. Soy usuario mgdy ALLsignifica "de todos los hosts" . /var/root/testes un simple script de shell "Hello World" con permisos: -rwx------ 1 root wheel 27 12 Jun 09:54 /var/root/test. Hice no hay otros cambios en el sistema.
mgd
2
¿Qué hay hosten el archivo sudoers?
user106563
1
No es una respuesta, es una guía casi completa sobre la directiva NOPASSWD. Gracias.
Eray
1
@ Michael por favor lea la página del manual. Todo está escrito allí. Para citarlo: Sin embargo, también puede especificar argumentos de línea de comando (incluidos comodines). Alternativamente, puede especificar "" para indicar que el comando solo se puede ejecutar sin argumentos de línea de comando.
mgd
3

Lo siento, pero hay tanta confusión sobre esto y algunas respuestas realmente complicadas, que siento que debo influir aquí antes de que alguien malinterprete y haga algo loco.

Usando visudo !!

Agregue las siguientes líneas a la configuración:

ALL ALL=NOPASSWD: /sbin/reboot,/sbin/shutdown

Esto permite que los comandos, reinicio y apagado con cualquier parámetro se ejecuten desde cualquier usuario.

Apila Exchange, solo da respuestas simples y concisas.

Búho
fuente