- Usar sudo sin control ni configuración adecuada convierte cualquier cuenta de usuario en una puerta casi directa a root.
- Es clave limitar sudo a comandos concretos, evitar herramientas que permitan sub‑shell y editar siempre sudoers con visudo.
- No tiene sentido abusar de sudo en el directorio personal ni cambiar propietarios de /home o /root para esquivar contraseñas.
- Equilibrar seguridad y comodidad pasa por ajustar el tiempo de gracia, usar NOPASSWD solo donde haga falta y reservar root para tareas críticas.

Cuando aterrizas en GNU/Linux desde Windows o macOS, lo normal es que el comando sudo te persiga en cada tutorial. Lo ves delante de casi todo: instalar programas, editar configuraciones, arrancar servicios… y al final te preguntas: “¿No sería más cómodo quitar la dichosa contraseña o convertir mi usuario en una especie de dios del sistema y ya está?”. Esa duda es muy común, pero también es el camino más rápido a meter la pata o abrir un agujero de seguridad enorme.
Antes de volverte loco tocando /etc/sudoers, contraseñas y permisos, merece la pena entender qué es exactamente sudo, qué diferencia hay con su y con el usuario root, y sobre todo en qué momentos es mejor no usar sudo aunque parezca más cómodo. Si te preocupa el principio de mínimo privilegio, la seguridad de tu máquina o simplemente no quieres cargarte tu Arch, Debian o Ubuntu recién instalado, este tema te interesa más de lo que parece.
Root, sudo y su: quién manda realmente en tu Linux
En cualquier sistema tipo Unix hay una cuenta todopoderosa llamada root, que es la que manda sobre todo el sistema. Ese usuario puede borrar cualquier archivo, cambiar permisos, crear usuarios, instalar software, montar y desmontar discos, modificar el arranque… vamos, que si haces algo mal como root, nadie te va a preguntar si estás seguro.
En los Unix clásicos de toda la vida, los administradores entraban directamente como root en una consola o terminal y hacían ahí todo el trabajo de administración. Para las tareas normales (correo, documentos, etc.) usaban una cuenta de usuario corriente, pero la gestión se hacía dentro de una sesión root completa, sin medias tintas.
Con GNU/Linux y sus distribuciones modernas se empezó a popularizar un enfoque distinto: en lugar de ir cambiando de usuario a root constantemente, se delegan tareas concretas con su y sudo. Esto permite que trabajes normalmente con tu usuario, y solo te conviertas en root de forma temporal o parcial cuando de verdad hace falta.
El comando su (switch user) sirve para cambiar de identidad dentro de una sesión. Lo más habitual es usarlo para pasar a root, pero también puedes cambiarte a otro usuario normal. Si ejecutas su –, obtienes una sesión de root con su entorno completo, como si hubieras iniciado sesión directamente como root en la pantalla de login.
Por otro lado está sudo (superuser do), que nació con otra idea: permitir a usuarios concretos ejecutar uno o varios comandos privilegiados sin darles una sesión root entera. Con sudo, tu usuario no se transforma en root; simplemente se le permite lanzar cierto comando como root (u otro usuario) tras autenticarse.
Cómo funciona sudo realmente y por qué no es «magia»
El núcleo de sudo es el archivo de configuración /etc/sudoers, donde se decide quién puede hacer qué. Ahí se define qué usuarios o grupos pueden ejecutar determinados comandos, como qué usuario objetivo (root por defecto) y en qué máquinas. Todo esto se gestiona además a través de la pila PAM (Pluggable Authentication Modules) del sistema.
Cuando lanzas un comando con sudo, el sistema te pide la contraseña de tu propio usuario, no la de root (al menos en la mayoría de distribuciones de escritorio como Ubuntu). Si la contraseña es correcta y la regla de sudoers lo permite, se ejecuta el comando con privilegios elevados. Ese uso queda registrado en los logs, indicando qué usuario invocó qué comando, algo muy útil para auditoría y para saber quién ha hecho qué.
Para evitar que tengas que meter la contraseña en cada comando seguido, sudo mantiene una caché temporal de credenciales. Por defecto, cuando te autenticas bien una vez, tienes unos minutos (normalmente 5 ó 15, según la distro) en los que puedes volver a usar sudo sin que te la pida otra vez. Ese tiempo se gestiona con la directiva timestamp_timeout de sudoers y se puede acortar, alargar o incluso poner a -1 para que no caduque nunca tras la primera autenticación.
Otra pieza clave es la directiva NOPASSWD. Si en sudoers se indica que un usuario puede ejecutar un comando con NOPASSWD, no se le pedirá contraseña en ningún momento para ese comando, ni la primera vez ni las siguientes. Es decir, hay una diferencia muy importante entre ampliar el tiempo de gracia (sigues introduciendo la contraseña al principio) y eliminarlo con NOPASSWD (no hay contraseña jamás).
Además, sudo ofrece extras interesantes: registro detallado de comandos, control fino por comando, host o grupo de usuarios, bloqueo de variables de entorno peligrosas, e incluso la posibilidad de prohibir sub-sesiones de shell mediante la opción NOEXEC para reducir aún más el riesgo.
Configurar sudo bien: buenas prácticas básicas
Mucha gente instala una distribución de GNU/Linux, ve que sudo “funciona” y nunca toca su configuración. Y eso puede ser un fallo gordo de seguridad, porque muchas distros traen sudo muy abierto por defecto: el primer usuario creado tiene acceso total como root vía sudo, a veces incluso con un periodo de gracia en el que ni siquiera tiene que volver a meter la contraseña.
Lo primero que hay que tener claro es que editar /etc/sudoers a pelo con cualquier editor es mala idea. Si te equivocas en la sintaxis puedes dejar inutilizado sudo en todo el sistema. Para evitarlo existe visudo, una herramienta que abre sudoers con un editor (vi, nano, etc.), pero al guardar comprueba la sintaxis y solo aplica los cambios si todo es correcto. Además evita ediciones simultáneas del mismo fichero.
En sistemas modernos, /etc/sudoers suele incluir también el directorio /etc/sudoers.d/. Lo recomendable es no llenar el archivo principal de reglas personalizadas, sino crear ficheros aparte por usuario o rol dentro de ese directorio, con permisos 0440. Eso facilita mucho las auditorías, el mantenimiento y la gestión con herramientas como Ansible o Puppet.
Otra práctica muy útil es usar alias dentro de sudoers: User_Alias, Host_Alias, Runas_Alias y Cmnd_Alias. Con ellos defines listas de usuarios, hosts o comandos y luego solo tienes que referenciar el alias en las reglas. Esto hace la configuración más legible, evita duplicar líneas y permite cambiar varias reglas modificando un solo alias.
Siempre que puedas, define listas blancas de comandos (whitelisting): es decir, especifica exactamente qué órdenes concretas se pueden ejecutar con sudo, con su ruta absoluta. Las listas negras (bloquear unos pocos comandos y permitir el resto) son extremadamente peligrosas porque siempre se escapa algo que permite saltarse las restricciones.
Errores críticos: cuándo usar sudo es directamente peligroso
El gran problema de sudo no es la herramienta en sí, sino una configuración demasiado permisiva o ingenua. Hay varios patrones de error muy habituales que convierten sudo en un coladero de seguridad o en un arma de destrucción masiva contra tu propio sistema.
El ejemplo típico es conceder NOPASSWD: ALL a un usuario normal “porque es mi ordenador y no quiero meter la contraseña todo el rato”. En la práctica estás diciendo: “si alguien roba mi usuario, ya tiene root inmediato y sin fricción”. En un entorno doméstico ya es arriesgado, en un servidor conectado a Internet o en la nube es casi un suicidio.
Otro fallo común es permitir con sudo comandos que pueden lanzar subshells o ejecutar órdenes arbitrarias. Herramientas como vim, less, awk, find, tar, tcpdump, openssl, la mayoría de intérpretes (python, perl, ruby, bash, sh, zsh, etc.) o utilidades que permiten modificar ficheros libremente (cat, tee, dd) son un campo de minas. Si un usuario puede invocar, por ejemplo, “sudo vim”, prácticamente puede obtener una shell root desde dentro del editor.
Incluso comandos que parecen inocuos se vuelven peligrosos si no restringes los argumentos. Permitir, por ejemplo, sudo /usr/sbin/nginx sin limitar opciones abre la puerta a que cualquiera con ese permiso cargue módulos .so arbitrarios, modifique ficheros como /etc/sudoers o /root/.ssh/authorized_keys, o cree ejecutables con permisos de root. El problema es que sudo no filtra los parámetros salvo que tú lo hayas definido muy bien en sudoers.
Hay una opción útil para mitigar parte de estos riesgos: NOEXEC. Si defines un comando en sudoers con NOEXEC, sudo carga una librería que bloquea las llamadas a exec() desde ese proceso. Esto impide que, por ejemplo, un programa lanzado con sudo pueda invocar otro comando o abrir una shell. Aún así, la medida principal sigue siendo no autorizar con sudo herramientas que ya de por sí son un “lanzador de comandos”.
Cuándo deberías evitar usar sudo por completo
Hay situaciones en las que lo más sensato es no usar sudo en absoluto y trabajar con tu usuario normal. De hecho, en muchas distros (y especialmente si vienes de macOS o Windows) tendemos a usar sudo por costumbre, incluso cuando no es necesario.
Para empezar, nunca deberías usar sudo en tu directorio personal salvo casos muy concretos. Si estás desarrollando scripts, manejando proyectos de programación, editando documentos o configuraciones que pertenecen a tu usuario, hazlo sin sudo. Si empiezas a crear archivos en tu /home como root, luego tendrás problemas de permisos, errores raros y la tentación de hacer un chown masivo, que también es peligroso.
En la misma línea, no es buena idea hacer un chown de /home o, peor aún, de /root para “ahorrarte poner sudo”. Cambiar los propietarios de directorios del sistema para no tener que escribir sudo es cargarte la separación entre usuario normal y root. Es cierto que escribir sudo cansa, pero la alternativa es convertir todo el sistema en un queso gruyer en el que cualquier proceso con tu usuario puede tocar lo que le dé la gana.
También conviene evitar sudo cuando ejecutas software de terceros en el que no confías plenamente: scripts descargados de Internet, herramientas copiadas de un foro, etc. Si necesitas probar algo de dudosa procedencia, hazlo en un entorno sin privilegios (e incluso mejor, en un contenedor o máquina virtual) y solo dale acceso root si has revisado código y sabes exactamente lo que hace.
Por último, si vas a estar mucho rato modificando configuraciones sensibles o trabajando en modo avanzado, puede ser más razonable abrir una sesión root con su – en vez de abusar de sudo. Estar ejecutando sueltos comandos con sudo su, sudo -s y similares puede dar una falsa sensación de control cuando en realidad estás encadenando elevaciones de privilegio sin saber muy bien desde qué entorno estás actuando en cada momento.
¿Sudo o root directo? Ventajas, riesgos y equilibrio
Existe cierto debate en la comunidad sobre si es más seguro usar siempre sudo o trabajar directamente con el usuario root para las tareas administrativas. Algunos administradores veteranos prefieren “el root de toda la vida”, con una contraseña propia y sin sudo por defecto. Otros consideran que iniciar sesión como root es un riesgo innecesario y que sudo es la forma moderna y correcta.
Quienes desconfían de sudo suelen argumentar que muchas distros lo traen sobremimado: instalado de serie, activado y con el primer usuario pudiendo hacer de todo, a veces con un periodo de gracia en el que ni siquiera se pide la contraseña. En ese contexto, un fallo de seguridad en sudo o una mala configuración puede dar acceso total al sistema a cualquiera que comprometa la cuenta de usuario habitual.
Por otro lado, usar root directamente también tiene lo suyo: una vez que entras como root, todo lo que hagas es irreversible si te equivocas, y además no hay trazabilidad clara de qué usuario “real” hizo qué, salvo que tengas muy afinado tu sistema de logs. Además, si compartes la contraseña de root con más personas (caso típico en servidores multiusuario), revocar accesos luego pasa por cambiar dicha contraseña y redistribuirla, algo poco práctico y peligroso.
La realidad es que tanto sudo como root pueden ser seguros o inseguros según cómo los uses. Un sudo bien configurado, con reglas finas, sin comandos peligrosos y con buen registro, es un gran aliado para aplicar el principio de mínimo privilegio. Un sudo abierto en canal o sin revisar en años, no. Y lo mismo con root: una cuenta root con buena contraseña y acceso muy limitado puede ser aceptable; root habilitado, sin control de acceso y entrando desde cualquier lado, no.
Una opción intermedia bastante sensata en algunas distribuciones es habilitar la contraseña de root y, acto seguido, quitar a tu usuario normal del grupo que le da permisos sudo completos. De este modo, sudo sigue instalado por si lo necesitas para casos muy concretos, pero tu usuario diario deja de ser casi-root “disfrazado”. Cuando de verdad quieras tocar cosas críticas, inicias sesión como root o usas su -, haces el trabajo y luego vuelves a tu usuario sin privilegios.
¿Y si estoy harto de meter la contraseña? Opciones menos peligrosas
Es comprensible que, si eres el único que usa tu PC, te dé pereza escribir la contraseña cada vez que ejecutas algo como actualizar paquetes o reiniciar servicios de desarrollo. Pero entre vivir pegado a sudo y dejar el sistema vendido hay unos cuantos puntos intermedios que puedes aprovechar.
Una posibilidad es aumentar el valor de timestamp_timeout en sudoers. En lugar de los típicos 5 minutos, puedes subirlo a 30, 60 o lo que te parezca razonable. Así escribes la contraseña al comienzo de tu sesión de trabajo y luego tienes una ventana amplia para usar sudo sin que te la pida cada dos por tres. Sigues manteniendo una autenticación inicial y, al menos, hay una primera barrera.
Otra opción más precisa es usar NOPASSWD solo para comandos concretos que necesitas automatizar o lanzar muy a menudo, en lugar de para todo. Por ejemplo, tu usuario “deploy” puede tener NOPASSWD para “/usr/bin/systemctl restart nginx” y “/usr/bin/systemctl restart php-fpm”, pero nada más. Así tu pipeline de despliegue o tus scripts no se quedan colgados pidiendo contraseña, pero no estás regalando root para cualquier cosa.
En entornos de automatización (CI/CD, scripts programados, cuentas de servicio, etc.) es mejor crear usuarios específicos con permisos recortados en lugar de tocar la cuenta principal con la que trabajas a diario. Esa cuenta “deploy”, “backup” o “monitor” puede tener reglas de sudo muy estrechas en /etc/sudoers.d/, con NOPASSWD para solo tres o cuatro comandos, y sin acceso interactivo normal al sistema.
Si lo que quieres es ejecutar una serie larga de tareas de administración sin tener que anteponer sudo a todo, puedes abrir una shell de root de forma controlada (por ejemplo, usando “sudo -s” o “sudo su -” si tu configuración lo permite) y, cuando termines, salir. No es ideal si abusas de ello, pero es preferible a desactivar por completo las contraseñas de sudo para cualquier cosa.
En cualquier caso, lo fundamental es que entiendas que la comodidad siempre compite con la seguridad. Quitar contraseñas, dar permisos amplios o permitir comandos peligrosos con sudo se hace a costa de debilitar el sistema. Si aceptas esa rebaja por motivos de productividad, al menos hazlo sabiendo qué implica.
Al final, manejar bien sudo y saber cuándo evitarlo es parte de aprender a moverte con soltura en Linux: equilibrar la seguridad, la trazabilidad y la comodidad para que tu sistema no sea un infierno de contraseñas ni un coladero donde cualquier tropiezo, script malicioso o exploit acabe en root sin resistencia.
