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

186

En una máquina en particular a menudo necesito ejecutar comandos de sudo de vez en cuando. Estoy de acuerdo con ingresar la contraseña en sudo en la mayoría de los casos.

Sin embargo, hay tres comandos sudo Quiero ejecutar sin ingresar 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 a sudo ?

    
pregunta Z9iT 03.07.2012 - 10:31

1 respuesta

251

Usa la directiva NOPASSWD

Puede usar la directiva NOPASSWD en su /etc/sudoers file .

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

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

Esto permitirá que el usuario user ejecute los comandos deseados en host sin ingresar una contraseña. Todos los demás sudo comandos de edición seguirán necesitando una contraseña.

Los comandos especificados en el archivo sudoers deben estar completamente calificados (es decir, usar la ruta absoluta al comando para ejecutar) como se describe en % man_de% man page . Proporcionar una ruta relativa se considera un error de sintaxis.

Si el comando finaliza con un carácter final de sudoers 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 / puede ejecutar cualquier comando en el directorio user :

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

Nota: utilice siempre el comando /home/someuser/bin/ para editar el archivo visudo para asegurarse de que no se bloquea en el sistema, solo en caso de que accidentalmente escriba algo incorrecto en el archivo sudoers . sudoers guardará su archivo modificado en una ubicación temporal y solo sobrescribirá el archivo visudo real si el archivo modificado se puede analizar sin errores.

Usar sudoers en lugar de modificar /etc/sudoers.d

Como alternativa a la edición del archivo /etc/sudoers , puede agregar las dos líneas a un nuevo archivo en /etc/sudoers e.g. %código%. Esta es una manera elegante de separar los diferentes cambios de los derechos de /etc/sudoers.d y también deja intacto el archivo /etc/sudoers.d/shutdown original para actualizaciones más fáciles.

Nota: una vez más, debe usar el comando sudo para editar el archivo y asegurarse de que no se bloquea en el sistema:

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

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

Si sudoers está en mal estado

Si no usaste visudo para editar tus archivos y luego accidentalmente echaste a perder sudoers o arruinaste un archivo en visudo , entonces quedarás bloqueado de /etc/sudoers .

La solución podría ser corregir los archivos usando /etc/sudoers.d que es una alternativa al sudo .

Para corregir pkexec :

pkexec visudo

Para corregir sudo :

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

Si la propiedad y / o los permisos son incorrectos para cualquier archivo /etc/sudoers , /etc/sudoers.d/shutdown ignorará el archivo, por lo que podría encontrarse bloqueado en esta situación. Nuevamente, puedes usar sudoers para 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

Use sudo como este para reparar la propiedad y permisos :

pkexec chown root:root /etc/sudoers.d/shutdown
pkexec chmod 0440 /etc/sudoers.d/shutdown
    
respondido por el mgd 03.07.2012 - 10:43

Lea otras preguntas en las etiquetas