Cómo usar sudo sin contraseña en Linux
sudo apt update
sudo systemctl restart nginx
sudo reboot
Al usar Linux, es muy común recurrir a sudo constantemente. Sin embargo, tener que introducir la contraseña una y otra vez puede volverse tedioso.
Cuando ese fastidio alcanza su punto máximo, uno se decide a configurar sudo para que no pida la contraseña. Es muy probable que quienes hayan llegado a este artículo compartan un sentimiento similar al mío.
En este artículo, explicaremos cómo eliminar la necesidad de introducir la contraseña de sudo.

¿Dónde se encuentra la configuración de sudo y cómo modificarla?
El archivo principal de configuración de sudo se encuentra aquí:
/etc/sudoers
La configuración de sudo puede ser bastante delicada si la sintaxis es incorrecta. Si se introduce una configuración errónea y sudo deja de funcionar, la recuperación puede ser complicada. Por ello, se utiliza el comando especializado visudo.
sudo visudo
visudo realiza una verificación de sintaxis al guardar y te notifica inmediatamente si hay algún error tipográfico. De hecho, el manual oficial recomienda encarecidamente usar visudo.
No modifiques /etc/sudoers directamente
Si introduces sudo visudo, el archivo /etc/sudoers se abrirá y podrás modificarlo directamente. Sin embargo, editar este archivo directamente no es una buena práctica.
Personalmente, prefiero no tocar el archivo de configuración principal y, en su lugar, crear nuevos archivos en el directorio /etc/sudoers.d/. Esto facilita la identificación de los cambios realizados y su reversión en el futuro.
sudo está diseñado para incluir configuraciones de archivos almacenados en el directorio mencionado. De hecho, al final del archivo /etc/sudoers, verás la línea include /etc/sudoers.d/.
sudo visudo -f /etc/sudoers.d/no-password-common-commands
Puedes nombrar el archivo como quieras, de forma que sea fácil de identificar más tarde. Sin embargo, no lo nombres de forma descuidada; te arrepentirás cuando lo busques en el futuro.
¡Ah! Como dato, los nombres de archivo que contienen ~ y . son ignorados por sudoers. Esta información se encuentra en un comentario dentro del archivo README del directorio.
Conozcamos el formato de configuración.
La configuración de sudoers sigue este formato general:
Es una sintaxis realmente... imposible de memorizar. Simplemente anótala en algún lugar o guarda esta página del blog en tus favoritos. No la usarás a menudo, pero cuando la necesites, te costará recordarla.
NOMBRE_DE_USUARIO HOST=(USUARIO_A_EJECUTAR) OPCIONES: COMANDO
Por ejemplo, si tu nombre de usuario es potter y quieres ejecutar apt update sin contraseña, podrías escribirlo así:
potter ALL=(ALL) NOPASSWD: /usr/bin/apt
Desglosando cada parte, tenemos:
potter: El nombre de usuario al que se aplicará la configuración.ALL: Indica que se aplicará en todos los hosts.(ALL): Especifica bajo qué privilegios de usuario se puede ejecutar el comando. A veces, he visto a gente usar(root). Yo prefieroALL.NOPASSWD: No solicitará la contraseña./usr/bin/apt: La "ruta absoluta" del comando permitido.
Si no estás seguro de la ruta de un comando, puedes verificarla con which.
~$which apt
/usr/bin/apt
~$which apt-get
/usr/bin/apt-get
~$which reboot
/usr/sbin/reboot
~$which systemctl
/usr/bin/systemctl
La tentación de abrirlo todo con ALL
Aquí surge una tentación muy fuerte:
potter ALL=(ALL) NOPASSWD: ALL
Es muy limpio. Permite ejecutar todos los comandos sudo sin contraseña. Es cómodo, ¡demasiado cómodo!
Es una elección personal, pero creo que es mejor resistir esta tentación. No quiero ni imaginar una situación en la que un comando mal escrito se ejecute inmediatamente con privilegios de root.
Si un script se ejecuta de forma inesperada, no hay un último freno en forma de solicitud de contraseña. Si alguien manipula el terminal mientras lo tienes abierto, todo puede irse al traste. Hay mucha gente extraña en el mundo...
La decisión final es tuya.
Permitir solo los comandos de uso frecuente sin contraseña
Yo opto por el compromiso de 'desbloquear solo lo que uso con frecuencia'. Este enfoque es bastante bueno.
Por ejemplo, digamos que solo quiero usar apt, apt-get, reboot y systemctl sin contraseña.
Primero, abre el archivo de configuración:
sudo visudo -f /etc/sudoers.d/no-password-common-commands
Y escribe lo siguiente:
potter ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get, /usr/sbin/reboot, /usr/bin/systemctl
Ahora, el usuario potter podrá ejecutar los siguientes comandos sin contraseña:
sudo apt update
sudo apt -y upgrade
sudo apt-get update
sudo reboot
sudo systemctl reload nginx
Si te resulta demasiado abrir systemctl por completo, también puedes permitir solo comandos específicos.
potter ALL=(ALL) NOPASSWD: /usr/bin/systemctl reload nginx, /usr/bin/systemctl status nginx
Dividir en varias líneas para una mejor legibilidad
Cuando hay muchos comandos, una sola línea puede volverse desordenada. En estos casos, puedes dividir la línea usando \.
Aunque es una forma familiar y obvia de dividir líneas para los usuarios de Linux, curiosamente, en la práctica, no se usa tanto el \. Sin embargo, su uso mejora la legibilidad.
potter ALL=(ALL) NOPASSWD: \
/usr/bin/apt, \
/usr/bin/apt-get, \
/usr/sbin/reboot, \
/usr/bin/systemctl
Se ve mejor y más limpio.
Aplicar a un grupo específico
Esta configuración también es bastante útil. En servidores gestionados por varias personas, la gestión por grupos puede ser más cómoda.
Si deseas aplicarlo solo a un grupo específico, puedes usar el formato %NOMBRE_DEL_GRUPO.
Por ejemplo, para el grupo admin, sería así:
%admin ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/apt, /usr/bin/apt-get
Aumentar el tiempo de persistencia de la contraseña
Si no te sientes cómodo eliminando la contraseña por completo, hay otra opción: ajustar el tiempo de espera antes de que se solicite de nuevo.
Por defecto, una vez que introduces la contraseña, no se te vuelve a pedir durante unos 10 o 15 minutos, pero este tiempo se puede modificar.
Esto se hace utilizando la configuración timestamp_timeout.
Por ejemplo, al hacer esto, sudo no te pedirá la contraseña durante 60 minutos:
Defaults timestamp_timeout=60
La unidad es "minutos", pero si pones '0', será una pesadilla, ya que siempre te pedirá la contraseña.
Si lo configuras a '-1', sudo no te volverá a pedir la contraseña hasta que cierres el terminal. Esto ofrece una comodidad casi tan grande como ALL, pero puede generar cierta incomodidad en términos de seguridad.
Por supuesto, estas configuraciones pueden coexistir: permitir comandos sin contraseña y aumentar el tiempo de persistencia.
Por ejemplo, puedes combinarlas así:
Defaults timestamp_timeout=30
potter ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get, /usr/sbin/reboot
Los comandos frecuentes sin contraseña, y para el resto de comandos sudo, una vez autenticado, la sesión dura 30 minutos. ¿No crees que este es un buen equilibrio entre comodidad y seguridad?
Es bueno reducir las molestias, pero no a costa de aumentar la inseguridad.
Conclusión
Eliminar la necesidad de introducir la contraseña de sudo no es complicado. Aunque la explicación anterior fue extensa, en resumen:
- Crea un archivo de configuración separado en
/etc/sudoers.d/usandovisudo.
sudo visudo -f /etc/sudoers.d/no-password-common-commands
- Simplemente añade la regla
NOPASSWD.
Defaults timestamp_timeout=30
potter ALL=(ALL) NOPASSWD: \
/usr/bin/apt, \
/usr/bin/apt-get, \
/usr/sbin/reboot
La medida en que decidas relajar la seguridad de la contraseña es tu decisión, pero me gustaría que recordaras esto:
La verdadera comodidad se logra cuando la facilidad de tus dedos y la tranquilidad de tu mente se satisfacen al mismo tiempo.
No hay comentarios.