Para dar sudo sin contraseña a un solo comando, crea un fichero en /etc/sudoers.d con visudo -f y escribe una regla como usuario ALL=(root) NOPASSWD: /ruta/absoluta argumentos. La ruta absoluta y los argumentos fijos limitan el permiso a esa orden exacta. NOPASSWD: ALL, en cambio, equivale a regalar root sin contraseña.

Regla NOPASSWD en sudoers para un solo comando: ejemplo completo con visudo

La regla se crea con visudo -f sobre un fichero nuevo dentro de /etc/sudoers.d, nunca abriendo el fichero con un editor cualquiera. El ejemplo usa un usuario deploy que solo debe recargar nginx tras un despliegue:

sudo visudo -f /etc/sudoers.d/deploy-nginx

Contenido del fichero:

# deploy puede recargar nginx sin contraseña, y nada más
deploy ALL=(root) NOPASSWD: /usr/bin/systemctl reload nginx

Antes de escribir la ruta, compruébala con command -v systemctl. Según la distribución puede estar en /usr/bin o en /bin, y la regla solo casa con la ruta exacta. Después valida y prueba:

sudo visudo -c
sudo -l -U deploy
sudo -n /usr/bin/systemctl reload nginx

visudo -c revisa la sintaxis de todos los ficheros de sudoers. sudo -l -U deploy lista lo que ese usuario puede ejecutar. sudo -n, lanzado como deploy, falla en lugar de pedir contraseña, así que confirma si NOPASSWD se está aplicando.

Por qué usar visudo y /etc/sudoers.d en vez de editar /etc/sudoers a mano

visudo bloquea el fichero mientras lo editas y comprueba la sintaxis antes de guardar. Si encuentra un error, avisa y te deja corregirlo. Un /etc/sudoers roto puede dejar sudo inutilizable, y en un servidor sin contraseña de root eso significa recurrir a la consola de recuperación.

  • Un fichero por permiso. Borrar el fichero revoca la regla sin tocar nada más.
  • Separado del fichero principal. Los cambios que traiga un paquete en /etc/sudoers no se mezclan con los tuyos.
  • Nombres sin punto. sudo ignora en /etc/sudoers.d los ficheros cuyo nombre contiene un punto o termina en ~: deploy-nginx se lee, deploy.conf no.
  • Propietario root y modo 0440. Compruébalo con ls -l /etc/sudoers.d; si copiaste el fichero desde otro sitio, corrige con chown root:root y chmod 0440.

Ruta absoluta en NOPASSWD: por qué sudoers la exige y cómo fijar los argumentos

sudoers exige la ruta completa del ejecutable: un nombre suelto como systemctl provoca un error de sintaxis en visudo. La ruta absoluta impide que alguien deje otro binario con el mismo nombre en un directorio de su PATH y lo ejecute como root.

Los argumentos son la otra mitad del control:

  1. Sin argumentos en la regla (/usr/bin/systemctl): admite cualquier argumento, incluido parar o editar cualquier servicio.
  2. Con argumentos exactos (/usr/bin/systemctl reload nginx): solo esa línea de comando.
  3. Con "" (/usr/local/bin/backup ""): el comando solo se acepta sin argumentos.
  4. Con comodines (/usr/bin/systemctl restart *): el asterisco también casa con espacios y admite más argumentos de los previstos. Evítalos.

Por qué no usar NOPASSWD: ALL en sudoers: comparación de riesgos

Con NOPASSWD: ALL, cualquier proceso que corra con tu usuario —un script comprometido, una dependencia maliciosa, una clave SSH robada— obtiene root con sudo -n sin ninguna interacción. La regla acotada reduce ese premio a un único comando.

Qué se mideRegla acotada con ruta absolutaNOPASSWD: ALLsudo con contraseña
Alcance sin contraseñaUna línea de comando exactaCualquier comando como rootNinguno
Uso en automatizaciónSí, para esa tareaSí, sin ningún límiteNo, sudo -n falla
Si roban la sesión del usuarioSolo puede ejecutar esa ordenEl atacante es rootNecesita además la contraseña
Auditoría con sudo -lMuestra la orden permitidaMuestra ALL, sin detalleDepende del resto de reglas

Una regla acotada sigue siendo peligrosa si el comando permitido abre una shell o lanza otros programas: editores como vi, paginadores como less, find con -exec o un script que el propio usuario puede modificar. Si autorizas un script, que pertenezca a root y nadie más pueda escribirlo. Para editar ficheros protegidos usa sudoedit, que trabaja sobre una copia con los permisos del usuario. La etiqueta NOEXEC puede impedir que el comando ejecute otros, pero no funciona con todos los binarios.

Orden de reglas en sudoers: la última coincidencia gana

Cuando varias reglas casan con el mismo usuario y comando, sudo aplica la última. Si /etc/sudoers.d se incluye al final de /etc/sudoers, tu regla NOPASSWD queda detrás de la regla general del grupo de administradores y prevalece. Si una línea posterior exige contraseña para ese usuario, anula tu regla y sudo -n seguirá fallando. sudo -l muestra las entradas en orden y ayuda a detectarlo.

Editar sudoers desde el móvil con termi1 sin quedarte fuera del servidor

visudo abre el editor configurado en el sistema, a menudo vi o nano, y ambos necesitan Esc, Ctrl y flechas. El teclado propio de termi1 incluye esas teclas que el teclado del sistema esconde, más un plano fn con F1–F12, PgUp/PgDn, Inicio y Fin.

  • Ten una shell root de reserva. Abre sudo -i en otra ventana de tmux antes de tocar sudoers; si algo falla, sigues teniendo root para arreglarlo.
  • Mantén la sesión viva. Con Mosh, termi1 conserva la sesión al pasar de wifi a datos, y tmux guarda lo que dejaste abierto al volver.
  • Revisa antes de ejecutar. La IA de termi1 convierte una frase como «deja que deploy recargue nginx sin contraseña» en un comando que se escribe en el prompt sin pulsar Intro. En conexiones etiquetadas como producción, Production Guard retiene lo que borra, detiene o cambia algo antes de llegar al prompt.

Tus claves SSH pueden generarse en el móvil y la privada no sale del dispositivo. Más detalles en la terminal SSH para el móvil; puedes descargar termi1 para iPhone o consultar el centro de soporte técnico.

Preguntas frecuentes

¿Dónde se pone NOPASSWD en una regla de sudoers?

NOPASSWD se pone en una regla de sudoers justo antes del comando, tras los dos puntos: deploy ALL=(root) NOPASSWD: /usr/bin/systemctl reload nginx. La etiqueta se hereda por los comandos siguientes de la misma línea, así que conviene que esa línea contenga solo la orden que quieres liberar.

¿Por qué no funciona mi fichero en /etc/sudoers.d?

Un fichero en /etc/sudoers.d suele fallar por tres motivos: su nombre contiene un punto o termina en ~, una regla posterior exige contraseña y la anula, o la ruta del comando no coincide exactamente. Compruébalo con sudo visudo -c y con sudo -l como ese usuario.

¿Qué pasa si guardo sudoers con un error de sintaxis?

Guardar sudoers con un error de sintaxis puede dejar sudo sin funcionar para todos los usuarios. visudo lo evita porque comprueba la sintaxis antes de guardar y avisa del error. Si editas con otro editor y lo rompes, necesitarás una shell root ya abierta o la consola de recuperación.

¿Es seguro dar NOPASSWD a un script propio?

Dar NOPASSWD a un script propio solo es seguro si el script pertenece a root y ningún otro usuario puede modificarlo. Si quien tiene el permiso sudo puede editar el script, puede añadir cualquier orden y ejecutarla como root sin contraseña. Usa siempre ruta absoluta y argumentos fijos.