Introducción
¿Alguna vez te has preguntado por qué debes escribir “sudo” al intentar ejecutar ciertos comandos en un entorno de sistema operativo Linux o Unix? Sudo es en realidad una abreviatura que significa “super-user do”. Cuando usas el comando sudo, puedes ejecutar programas y comandos con los privilegios de seguridad de otro usuario.
Por defecto, el comando sudo permite a los usuarios del sistema ejecutar comandos con los privilegios del superusuario. Una nueva instalación de un sistema operativo Linux/Unix crea una cuenta root que tiene privilegios de superusuario. Al realizar la configuración inicial del servidor de un sistema Linux/Unix, los administradores del sistema inician sesión con la cuenta root y asignan derechos del sistema a otros usuarios del sistema. Estos ajustes se almacenan en un archivo llamado sudoers. Una cuenta con privilegios de root puede editar el archivo sudoers y alterar los privilegios de otros usuarios.
En este tutorial, analizaremos cómo puedes obtener privilegios de root y realizar modificaciones en el archivo sudoers.
Requisitos previos
Este es un tutorial práctico y necesitarás probar los comandos para comprenderlo por completo. Usaremos el servidor Ubuntu 20.04 en este tutorial, sin embargo, puedes seguir los pasos si tienes alguna de las distribuciones de Linux modernas como Debian y CentOS. Puedes seguir este enlace para configurar tu propio servidor en la nube Ubuntu en CloudSigma.
Obtención de privilegios de root
Puedes obtener privilegios de root de tres formas que analizaremos a continuación:
Iniciar sesión como root
El método más sencillo que utiliza la mayoría de las personas para obtener privilegios de root es iniciar sesión en un sistema utilizando las credenciales del usuario root. Si estás accediendo a tu máquina local, simplemente puedes proporcionar un nombre de usuario y se te solicitará una contraseña.
Otro método que puedes usar para iniciar sesión como root es usar SSH, una herramienta de línea de comandos para iniciar sesión y realizar tareas en un servidor. Requiere un nombre de usuario y la dirección IP de tu servidor. La sintaxis para iniciar sesión como root es la siguiente, reemplaza la dirección IP de tu servidor:
|
1 |
ssh root@your_server_ip_or_domain_name |
Cuando ingreses el comando anterior en tu terminal, se te pedirá que proporciones tu contraseña si no has configurado las claves SSH, o se te pedirá que ingreses la frase de contraseña para tu clave SSH si las habías configurado. Una vez que proporciones las credenciales correctas, habrás iniciado sesión. Sigue esta guía para obtener instrucciones paso a paso sobre cómo usar SSH para conectarse a un servidor remoto en Ubuntu.
Uso de su para convertirse en root
Puedes iniciar sesión en un sistema Linux utilizando cualquier otra cuenta que no sea root, lo cual suele ser la forma recomendada al realizar tareas no administrativas. Siempre que desees obtener privilegios de root, simplemente puedes escribir su en tu terminal:
|
1 |
su |
El sistema te solicitará la contraseña de root, después de lo cual obtendrás acceso a una sesión de shell de root. Mientras estés en esta sesión de shell, puedes realizar todas las tareas administrativas y, cuando desees volver a la shell normal, simplemente presiona Ctrl + D. Opcionalmente, puedes escribir exit en la terminal y presionar enter.
Uso de sudo para ejecutar comandos con privilegios de root
El comando sudo, que se presentó brevemente al principio de este tutorial, te permite ejecutar comandos de una sola línea sin la necesidad de una shell con privilegios de root. Simplemente escribes sudo seguido del comando a ejecutar:
|
1 |
sudo execute_this_command |
Por ejemplo, para actualizar tu sistema, puedes ingresar lo siguiente:
|
1 |
sudo apt-get update |
Te solicitará una contraseña. La diferencia entre el comando su y el comando sudo es que su solicita la contraseña de root mientras que sudo solicita la contraseña del usuario actual. El acceso a sudo no se concede a los usuarios por defecto porque conlleva grandes implicaciones de seguridad para el sistema. Analizaremos más sobre esto en las siguientes secciones.
Uso de Visudo para editar el archivo sudoers
Los privilegios de sudo se configuran en el archivo sudoers ubicado en /etc/sudoers. Estos privilegios son necesarios para que cualquier usuario obtenga acceso al sistema Linux. Cualquier error de sintaxis impedirá que los usuarios inicien sesión en el sistema, dejando así el sistema inoperable.
Visudo abre el archivo con un editor especial que comprueba la sintaxis del archivo al guardar. Por lo tanto, es importante que solo use el comando visudo para abrir el archivo y evitar que su sistema de servidor quede inutilizable. Por defecto, visudo estaba configurado para abrir el editor de texto con (vi) vim. Sin embargo, Ubuntu ha configurado visudo para usar el editor de texto nano. En Debian o Ubuntu, puede cambiar a un editor diferente ingresando el siguiente comando:
|
1 |
sudo update-alternatives --config editor |
Muestra una lista de editores de la cual puede elegir un editor predeterminado, como se muestra en la captura de pantalla. Seleccione el número correspondiente al editor que prefiera:

En una distribución de Linux CentOS, edite /etc/sudoers y agregue las siguientes líneas:
|
1 2 |
Defaults editor = /usr/bin/vim:/usr/bin/vi:/usr/bin/nano Defaults env_keep += "EDITOR" |
Ingrese el siguiente comando. Recuerde reemplazar el nombre de su_editor_de_preferencia:
|
1 |
export EDITOR=`which su_editor_de_preferencia` |
El comando agrega la línea al archivo ~/.bashrc. Ingrese lo siguiente en su terminal para aplicar los cambios:
|
1 |
. ~/.bashrc |
Con su visudo ahora configurado, puede abrir el archivo en /etc/sudoers ingresando el comando:
|
1 |
sudo visudo |
Editar el archivo Sudoers
Cuando ejecuta el comando anterior, el archivo se abre en su editor principal tal como lo había configurado. A continuación se muestra el contenido del archivo:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# # Este archivo DEBE editarse con el comando 'visudo' como root. # # Considere agregar contenido local en /etc/sudoers.d/ en lugar de # modificar directamente este archivo. # # Consulte la página de manual para obtener detalles sobre cómo escribir un archivo sudoers. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" # Especificación de alias de host # Especificación de alias de usuario # Especificación de alias de comando # Especificación de privilegios de usuario root ALL=(ALL:ALL) ALL # Los miembros del grupo admin pueden obtener privilegios de root %admin ALL=(ALL) NOPASSWD:ALL # Permitir a los miembros del grupo sudo ejecutar cualquier comando %sudo ALL=(ALL) NOPASSWD:ALL # Consulte sudoers(5) para obtener más información sobre las directivas "#include": #includedir /etc/sudoers.d |
Los comentarios son bastante descriptivos, pero a continuación analizaremos lo que indican las líneas.
Líneas predeterminadas
- Defaults env_reset – Restablece las variables de entorno de la terminal para eliminar cualquier variable de usuario. Por lo tanto, limpia variables potencialmente dañinas de una sesión de sudo.
- Defaults mail_badpass – Indica al sistema que envíe notificaciones por correo de los intentos fallidos de contraseña de sudo al usuario mailto configurado, que generalmente es la cuenta root.
- Defaults secure_path – Contiene las diversas rutas en el sistema de archivos en las que una operación sudo buscará aplicaciones para usar al ejecutarse, con el fin de evitar el uso de otras rutas definidas por el usuario que puedan ser peligrosas para el sistema.
Líneas de especificación de privilegios de usuario
|
1 |
root ALL=(ALL:ALL) ALL |
- root ALL=(ALL:ALL) ALL – El primer campo especifica el nombre de usuario al que se aplicará la regla. En este caso es el root usuario.
- root ALL=(ALL:ALL) ALL – El primer ALL especifica que la regla se aplicará a todos los hosts.
- root ALL=(ALL:ALL) ALL – El segundo ALL especifica que el usuario al que se aplica esta regla (es decir, root) puede ejecutar comandos como todos los usuarios.
- root ALL=(ALL:ALL) ALL – El tercero ALL especifica que el usuario al que se aplica esta regla (es decir, root) puede ejecutar comandos como todos los grupos.
- root ALL=(ALL:ALL) ALL – El último ALL especifica que estas reglas se aplican a todos los comandos.
Por lo que indica esta regla, un usuario root puede ejecutar cualquier comando usando sudo una vez que proporcione la contraseña correcta.
Líneas de especificación de privilegios de grupo
Estas líneas especifican las reglas de privilegios de sudo que se aplican a los grupos. Los campos indican las mismas acciones que las líneas de privilegios de usuario, con una pequeña diferencia. Comienzan con un % para indicar nombres de grupo.
Como puede ver, el grupo admin puede ejecutar cualquier comando como cualquier usuario en cualquier host. El grupo sudo tiene el mismo privilegio con el privilegio adicional de ejecutar comandos como cualquier grupo.
Línea Include /etc/sudoers.d
La línea #includedir /etc/sudoers.d puede parecer un comentario debido al # al principio de la línea. Sin embargo, esta es una directiva de inclusión para indicar que los archivos dentro del directorio /etc/sudoers.d deben ser importados y utilizados como parte del archivo sudoers. Los archivos dentro de este directorio siguen las mismas reglas que el archivo sudoers.
Cualquier archivo dentro del directorio que no tenga un punto (.) y no termine en ~ se lee y se añade a la configuración del archivo sudoers. El directorio permite que las aplicaciones alteren los privilegios de sudo al instalarse colocando todas sus reglas asociadas dentro de un único archivo dedicado en el /etc/sudoers.d directorio sin alterar el archivo sudoers predeterminado. Además, cuando desee inspeccionar o revertir los privilegios de una aplicación, puede verificar o modificar fácilmente los archivos dentro del /etc/sudoers.d directorio sin modificar el /etc/sudoers archivo directamente.
Como regla general, todos los archivos dentro del directorio /etc/sudoers.d siempre deben editarse utilizando el comando visudo. A continuación se muestra la sintaxis, recuerde reemplazar el nombre del archivo que desea editar en el comando:
|
1 |
sudo visudo -f /etc/sudoers.d/file_name_to_edit |
Asignación de privilegios de Sudo a un usuario
Cuando otorga a un nuevo usuario acceso general a sudo, significa que le ha dado a la cuenta de usuario acceso administrativo completo al sistema. Esta es una tarea común que realizan los administradores de sistemas al crear otros usuarios no root con privilegios de sudo.
En sistemas como Ubuntu 20.04 que ya tienen el grupo de administración de propósito general, podemos asignar fácilmente privilegios de sudo a un usuario agregándolo a ese grupo. El grupo sudo, como se ve en el archivo /etc/sudoers, tiene privilegios administrativos completos, y podemos agregar un nombre de usuario al grupo ingresando el siguiente comando:
|
1 |
sudo usermod -aG sudo username |
Opcionalmente, puede usar el comando gpasswd para lograr lo mismo:
|
1 |
sudo gpasswd -a username sudo |
En CentOS, el grupo predeterminado con privilegios de sudo se llama wheel, por lo que puede asignar los privilegios usando el comando:
|
1 |
sudo usermod -aG wheel username |
Opcionalmente, usando el comando gpasswd, puede lograr lo mismo usando el comando:
|
1 |
sudo gpasswd -a username wheel |
En algunos casos, el wheel el grupo en CentOS puede estar comentado en el archivo /etc/sudoers. Para habilitarlo, abra el archivo con visudo y descomente la línea con el nombre del grupo. Puede hacerlo eliminando el # al principio de la línea: %wheel ALL=(ALL) ALL.
Creación de reglas personalizadas
Con el conocimiento de la sintaxis general de sudoers que tiene hasta este punto, es hora de que configure algunas reglas.
Crear alias
Los alias le permiten organizar su archivo sudoers agrupando elementos bajo varios “alias”. Tenemos tres directivas que discutiremos en esta sección: User_Alias para crear alias de usuario/grupo, Cmnd_Alias para crear alias de comandos, y Runas_Alias para permitir que otro usuario se ejecute como otro usuario.
Por ejemplo, usando el User_Alias, dentro de su /etc/sudoers archivo, puede agregar el siguiente fragmento para crear tres grupos diferentes de usuarios. Algunos usuarios pueden pertenecer a más de un grupo:
|
1 2 3 |
User_Alias GROUPONE = adelle, nikita, ellie User_Alias GROUPTWO = nikita, brenden, natalia User_Alias GROUPTHREE = brenden, walter, james |
Tenga en cuenta que todos los nombres de grupo comienzan con una letra mayúscula. Con los alias de grupo anteriores agregados en el archivo /etc/sudoers, puede asignar un privilegio para actualizar la base de datos apt a GROUPTWO agregando la siguiente regla en el archivo /etc/sudoers :
|
1 |
GROUPTWO ALL = /usr/bin/apt-get update |
Tenga en cuenta que sin especificar el usuario/grupo como el que se ejecutará, el comando sudo siempre tendrá como valor predeterminado al usuario root.
Aquí hay un ejemplo de Cmnd_Alias donde creamos un alias de comando para apagar y reiniciar el sistema. Luego, la regla se asigna a GROUPTHREE. Agregar las siguientes líneas dentro del archivo /etc/sudoers logra esto:
|
1 2 |
Cmnd_Alias POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart GROUPTHREE ALL = POWER |
En el fragmento anterior, la primera línea crea un alias de comando llamado POWER que incluye comandos para apagar y reiniciar. La segunda línea permite a los miembros de GROUPTHREE ejecutar este comando.
Aquí hay un ejemplo de Runas_Alias, donde creamos un alias que permitirá a un grupo de usuarios ejecutarse como otro usuario:
|
1 2 |
Runas_Alias WEB = www-data, apache GROUPONE ALL = (WEB) ALL |
En el fragmento anterior, la primera línea crea un alias llamado WEB, especificando que el alias se ejecutará como el usuario apache o el usuario www-data. La segunda línea asigna el alias a GROUPONE. Ahora, los miembros del grupo uno pueden ejecutar comandos como el usuario apache o www-data .
Reglas de restricción
En esta sección, aprenderá las diversas formas en que puede controlar cómo sudo reacciona a una llamada. Algunos comandos son relativamente inofensivos en sistemas monousuario. En tales casos, puede permitir que los usuarios los ejecuten con privilegios de root sin tener que escribir la contraseña de root. Por ejemplo, puede crear una regla para permitir que los usuarios de GROUPONE ejecuten el comando updatedb sin ingresar una contraseña agregando lo siguiente al archivo /etc/sudoers :
|
1 |
GROUPONE ALL = NOPASSWD: /usr/bin/updatedb |
La etiqueta NOPASSWD implica que no se solicitará contraseña. La etiqueta complementaria de la etiqueta NOPASSWD es PASSWD, que es el comportamiento predeterminado. Esto implica que se debe proporcionar una contraseña en el indicador.
Una etiqueta se aplica a una regla a menos que sea anulada por su etiqueta complementaria, por ejemplo:
|
1 |
GROUPTWO ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill |
En esta regla, los usuarios de GROUPTWO pueden ejecutar el updatedb comando sin introducir una contraseña. Sin embargo, deben proporcionar una contraseña antes de ejecutar el comando kill.
En algunos casos, es posible que desee restringir a los usuarios la ejecución de ciertos comandos para evitar ejecuciones peligrosas. Aquí es donde la NOEXEC etiqueta entra en juego. Algunos programas pueden ejecutar otros comandos desde su interfaz. Un ejemplo de este tipo de programa es less. Si escribe un comando con la siguiente sintaxis dentro de la interfaz less, se ejecutará, lo que provocará un comportamiento inesperado.
|
1 |
!name_of_command_to_run |
Para evitar este comportamiento, puede agregar la siguiente regla al archivo /etc/sudoers para restringir a un usuario determinado identificado con username:
|
1 |
username ALL = NOEXEC: /usr/bin/less |
Información adicional
En esta sección, incluimos información adicional, directivas y comandos que puede considerar necesarios al trabajar con sudo.
Si utilizó Runas_Alias en la configuración, especificando que un usuario o grupo puede ejecutarse como otro usuario, puede ejecutar comandos como esos usuarios utilizando la bandera -u en el usuario y la bandera -g en los grupos. Aquí está la sintaxis:
|
1 2 |
sudo -u run_as_user command sudo -g run_as_group command |
Cada uno de los comandos le pedirá que introduzca la contraseña asociada. Por razones de comodidad, sudo guarda la contraseña durante algún tiempo, de modo que no tenga que introducirla cada vez que ejecute un comando con sudo. Es posible que desee borrar el tiempo una vez que termine con los comandos privilegiados de sudo introduciendo el siguiente comando:
|
1 |
sudo -k |
En caso de que tenga más tareas que realizar con privilegios de sudo y desee ampliar el tiempo antes de la solicitud de contraseña, o desee evitar que el comando sudo le pida una contraseña más tarde, puede renovar el tiempo escribiendo el siguiente comando:
|
1 |
sudo -v |
El comando le pide una contraseña y la almacena en caché para usos posteriores de sudo.
Para listar los privilegios de sudo definidos para su nombre, puede introducir el siguiente comando:
|
1 |
sudo -l |
El comando enumera todas las reglas configuradas en el archivo /etc/sudoers que se aplican a su nombre de usuario. A partir de las reglas, puede tener una idea de qué tareas puede realizar su nombre de usuario en el sistema. Aquí hay una captura de pantalla de ejemplo:

En algunos casos, puede ejecutar comandos y estos fallan porque olvidó precederlos con sudo. En tales escenarios, es posible que deba volver a escribir el comando comenzando con sudo. Para evitar tener que volver a escribir el comando, puede utilizar la funcionalidad de bash para “repetir el último comando”. La sintaxis consiste en dos signos de exclamación. Puede ejecutar el último comando que ejecutó en su terminal introduciendo lo siguiente:
|
1 |
sudo !! |
Finalmente, es importante saber que sudo simplemente eleva el comando para que se ejecute con privilegios de sudo. Para obtener información adicional, puede seguir las instrucciones en este enlace para divertirse un poco con sus usuarios.
Conclusión
Cuando se trabaja con múltiples usuarios, es crucial saber manejarse con el comando sudo y el archivo sudoers. En este tutorial, presentamos los conceptos básicos para leer y modificar el archivo sudoers, así como los diversos métodos que puede utilizar para obtener privilegios de root.
Tenga siempre en cuenta que la separación de privilegios es lo que hace que los sistemas Linux sean seguros. Por lo tanto, no se deben otorgar privilegios de superusuario a usuarios normales. Asigne solo los privilegios que sean absolutamente necesarios para que un usuario en particular realice sus tareas específicas en el sistema y no todos los privilegios.
¡Feliz informática!
Comentarios
Aún no hay comentarios. Sea el primero.