Linux

¿Cómo utilizo sudo en Linux? Nuestra guía completa con ejemplos

I. Introducción

Para administrar una máquina Linux, es necesario utilizar la cuenta root, que se refiere al superusuario, o el comando sudo. ¿Cuál es la función de este comando en Linux? ¿Cuáles son sus ventajas, sobre todo en términos de seguridad? ¿Cómo se configura el archivo /etc/sudoers?

El objetivo de este artículo es responder a una serie de preguntas que pueden surgir desde el momento en que te interesas por el comando sudo. Para que esta documentación sea lo más completa posible, he incluido una serie de ejemplos que puedes aplicar a tu propio contexto y necesidades.

II. ¿Qué es el comando sudo?

En Linux, ciertas acciones de configuración, administración y seguridad se basan en el uso de la extensión root para beneficiarse de un nivel suficiente de privilegios. De hecho, estas acciones potencialmente sensibles no son accesibles a todos los usuarios, lo cual es una buena noticia.

Sin embargo, no se recomienda conectarse a una máquina como root al administrarla. Entonces, ¿cómo hacerlo? Aquí es donde el sudo ¡! Permite ejecutar comandos con privilegios elevados desde una cuenta de usuario estándar y, por tanto, sin utilizar directamente el comando root.

El programa sudo, que significa"SubstituteUser DO", permite a un usuario ejecutar un comando con los privilegios de otro usuario, normalmente root.

Cuando un usuario ejecuta un comando con sudo, debe introducir su propia contraseña. Además, todas las acciones realizadas a través de sudo se registran, lo que permite la supervisión y mejora la seguridad. Como veremos más adelante, un usuario debe estar autorizado para utilizar el comando sudo y realizar este cambio temporal de privilegios.

Nota : en Linux, no se pueden crear varias cuentas de root, mientras que en Windows, se pueden crear varias cuentas de administrador. Sudo responde a esta necesidad de administración segura de una máquina Linux por varias personas.

III. ¿Cuáles son las ventajas de sudo?

El uso de sudo presenta varias ventajas, sobre todo en términos de seguridad y gestión de derechos. En lugar de compartir la contraseña de root entre varios usuarios, cada usuario tiene su propia contraseña y puede ser autorizado a ejecutar comandos específicos. En otras palabras, esto evitará el uso indebido de la cuenta raíz, al tiempo que se mantiene un registro de quién ha hecho qué.

Además, sudo permite restringir el acceso a determinados comandos y desactiva el uso prolongado de privilegios elevados estableciendo un tiempo de caducidad (el usuario tendrá que volver a introducir su contraseña).

En resumen, sudo juega un papel clave en la seguridad de las máquinas Linux. Es esencial utilizarlo para delegar permisos. En comparación con Windows, esto equivale a elevar los privilegios a través de UAC, cuando se necesita realizar una acción que requiere derechos de administrador.

IV. Cómo instalar sudo en Linux

El programa sudo puede o no estar ya instalado en la máquina Linux. Esto depende no sólo de la distribución que esté utilizando, sino también del modo de instalación. He aquí algunos ejemplos:

  • Si instala Ubuntu con un entorno de escritorio, el usuario creado durante la instalación estará autorizado a utilizar sudo, y se instalará sudo.
  • Si instala Debian sin una GUI, habrá una cuenta de usuario estándar y no se instalará sudo.
  • Si instala Debian sin asignar una contraseña a la cuenta root, entonces el primer usuario estará autorizado a usar sudo, y se instalará sudo.

Esto demuestra que es muy posible encontrar una máquina donde sudo no esté instalado... Como resultado, puede que necesites instalarlo. He aquí cómo instalar sudo en Linux:

# Debian / Ubuntu
apt-get install sudo

# Fedora
dnf install sudo

Veamos ahora algunos ejemplos de cómose utilizasudo.

V. ¿Cómo se utiliza sudo?

Una vez que sudo ha sido instalado en tu máquina, estás listo para usarlo. Aunque tendrás que conceder permiso al usuario que desees que administre tu máquina.

A. Ejecutar un comando con sudo

Empecemos con un ejemplo muy sencillo. Si el usuario flo desea actualizar los paquetes de su sistema, puede utilizar el siguiente comando:

apt update && apt upgrade -y

El problema es que no tendrá los privilegios necesarios para realizar estas acciones... Aquí es donde entra en juego el comando sudo . Lo que da:

sudo apt update && sudo apt upgrade -y

Se le pedirá que introduzca su contraseña antes de ejecutar el comando. Las acciones solicitadas se llevarán a cabo sin utilizar directamente la cuenta root.

B. Ejecutar un comando como otro usuario

Por defecto, sudo ejecuta los comandos como root. Sin embargo, puedes utilizar la opción -u para ejecutar un comando como otro usuario. Si no lo sabías, ahora ya lo sabes: sudo no se limita a ejecutar comandos como root.

Por ejemplo, para ejecutar un comando como usuario it-connect :

sudo -u it-connect whoami

Cómo hacer un pedido whoami se utiliza para ver qué usuario está actualmente en uso en la Terminal. A continuación, podemos ver la diferencia entre ejecutar el comando solo o como otro usuario.

C. Inicie un intérprete de comandos raíz temporal

Si flo desea cambiar temporalmente al modo root dentro de un Terminal, puede ejecutar este comando con la opción -i :

sudo -i

Esto abrirá un intérprete de comandos root para él hasta que salga con exit. Entonces cambiará a un intérprete de comandos cuyo prompt será root@NomMachine:~#. Se trata de un uso menos frecuente, pero que conviene tener en cuenta.

VI. Configuración del archivo /etc/sudoers

Según los ejemplos anteriores, el usuario flo tiene los permisos necesarios para utilizar sudo. ¿Cómo se define esta autorización? ¿Cómo puedo autorizar a otro usuario a utilizar el comando sudo? ¿Es posible limitar los comandos autorizados? Eso es lo que veremos en esta parte del artículo.

La configuración de sudo se basa en el archivo /etc/sudoers, que define los derechos de los usuarios. Debe modificarse con el comando visudo para evitar errores de sintaxis.

A. Añadir un usuario al grupo sudo

Como vimos en otro artículo sobre cómo añadirun usuario sudo en Linux, los usuarios que pertenecen al grupo sudo puede ejecutar comandos con sudo. Para añadir el usuario adm_flo a este grupo:

usermod -aG sudo adm_flo

A continuación, puede listar sus permisos actuales:

sudo -l

Este es el resultado que obtenemos en el contexto del usuario flo :

Devuelve los permisos de la cuenta después de analizar las directivas definidas en la directiva /etc/sudoers. Aquí podemos ver que el usuario flo puede ejecutar cualquier comando en la máquina Linux (como root).

También puede comprobar que el usuario pertenece al grupo sudo con este comando:

id flo

En la lista devuelta, hay una referencia para verificarlo. Esto también funcionaría con el groups.

uid=1000(flo) gid=1000(flo) groupes=1000(flo),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),100(users),114(lpadmin),2000(administrateurs)

B. Editar la configuración de sudoers con visudo

Para modificar el fichero de configuración sudoers, existe una herramienta específica: visudo. Podríamos utilizar nano u otro editor de texto, pero la mejor práctica es utilizar visudo.

La ventaja de utilizar visudoes que la herramienta bloqueará el archivo de configuración /etc/sudoers para evitar que varias personas trabajen en él, pero también -y esto es importante- ¡comprobará la sintaxis de cualquier regla añadida o modificada!

Para modificar el archivo /etc/sudoers , utilizaremos este comando:

sudo visudo

o, si ha iniciado sesión como root :

visudo

El contenido del sudoers aparece en la pantalla.

En este archivo, si te desplazas hasta el final, verás varias líneas interesantes. Aquí, en una máquina Ubuntu.

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

Estas tres directrices significan lo siguiente:

  • La primera línea permite al usuario root ejecutar todos los comandos con todos los privilegios.
  • La segunda línea permite a todos los miembros del grupo admin ejecutar todos los comandos utilizando sudo
  • La tercera línea es idéntica a la regla para el grupo admin, pero esta vez para los usuarios pertenecientes al grupo sudo.

Obsérvese que la línea correspondiente al admin no está presente en todos los sistemas Linux. Es muy común tener sólo el sudo.

C. Sintaxis de una regla sudo

Para crear reglas, hay que respetar una sintaxis precisa. Tomemos el ejemplo de la regla sudo :

%sudo ALL=(ALL:ALL) ALL

He aquí cómo interpretarlo:

Explicaciones sudoers directiva sudo

Esto también facilita la comprensión del comentario asociado a este comando en el archivo sudoers. Cada uno de estos valores puede modificarse para afinar la regla.

He aquí algunos detalles más sobre la sintaxis:

  • Usuario / grupo: para especificar un usuario, basta con indicar su identificador, mientras que para un grupo, añada el prefijo %. Sólo se especifica un usuario o grupo por línea.
  • Host: si se especifica ALL significa que esta regla se aplica a todas las máquinas
  • Todos los usuarios: le permite especificar el usuario cuyos derechos desea asumir. ALLtenemos en cuenta todos los usuarios, incluido el usuario root (lo que nos interesa)
  • Todos los grupos: igual que para los usuarios
  • Todos los comandos: se utiliza para especificar el comando o comandos que el usuario (o grupo) especificado al principio de la línea puede ejecutar en la máquina. Si hay varios comandos, utilice una coma como separador.

Nota: en términos de administración, puede dar derechos directamente a los grupos y luego añadir el usuario (s) a ese grupo.

D. Crear una nueva regla en sudoers

Tomemos ahora el ejemplo de un usuario estándar, no miembro del grupo sudo y llamado itconnect. Vamos a darle los derechos para editar el archivo /etc/hosts vía nano. Este archivo de sistema está protegido contra escritura y no puede ser modificado por ningún usuario.

Actualmente, el comando sudo no me permite abrir este archivo para escribir, ya que falta la directiva en el archivo sudoers. El resultado es el siguiente error " itconnect no aparece en el archivo sudoers. Este evento será reportado ".

Con la ayuda del usuario root (o flo), vamos a modificar el sudoers con visudo y añadir la siguiente línea:

itconnect ALL=(ALL) /usr/bin/nano /etc/hosts

Es importante especificar que se debe dar la ruta completa al binario, en este caso nano. Para encontrar fácilmente la ruta al binario, utilice el comando whichpor ejemplo:

que nano

Con esta directiva, el usuario itconnect puede modificar la directiva /etc/hosts ¡! Deberá ejecutar :

sudo nano /etc/hosts

A continuación, el usuario debe introducir su contraseña. Tenga en cuenta que sudoers admite la opción NOPASSWD: esto indica que el usuario puede ejecutar este comando sin tener que introducir su contraseña. Esto no es recomendable, pero es una posibilidad.

Si volvemos al ejemplo anterior, el resultado es esta modificación:

itconnect ALL=(ALL) NOPASSWD:/usr/bin/nano /etc/hosts

Ahora, para ir un paso más allá, veamos cómo utilizar la noción de alias con sudoers.

Nota : el orden de las normas es importante y no debe pasarse por alto. Si se aplican varias reglas al mismo caso, se tendrá en cuenta la última en aplicarse. En otras palabras, se evalúan todas las reglas.

E. Sudoers y alias

Al principio del sudoerspodemos ver varias secciones declaradas en la primera parte :

# Especificación de alias de host
# Especificación de alias de usuario
# Especificación de Cmnd_alias

Estas tres secciones le permiten declarar alias para hosts, usuarios y comandos. Por ejemplo, podemos crear un alias de usuario ADMINS y asociarle varios usuarios. Luego, en las reglas, podemos utilizar este alias en lugar de llamar a los usuarios uno por uno o crear un grupo específico si queremos crear una regla común a varios usuarios.

Pongamos un ejemplo... Vamos a crear un alias de usuario llamado ADMINS y se referirá a dos cuentas: itconnect y flo. Separe cada nombre con una coma. Lo que da:

Usuario_Alias ADMINS = itconnect, flo

A continuación, declararemos un alias de comando llamado SYSTEM. Se referirá al systemctlpero puede contener varios comandos. Lo que da:

Cmnd_Alias SISTEMA = /usr/bin/systemctl

Por último, para crear una regla que permita a ADMINS utilizar comandos SYSTEM , se obtendrá la siguiente regla:

ADMINS ALL=(TODOS) SISTEMA

Usuarios y itconnect y flo ya pueden ejecutar todos los comandos asociados al alias SYSTEM.

F. ¡Sudoers y el carácter de exclusión "!

Dentro de una regla, especificar el carácter ! delante del comando permitirá prohibirlo. Por ejemplo, podemos autorizar al usuario itconnect cambiar las contraseñas de los usuarios, excepto las del usuario root. Por lo tanto, debemos añadir la siguiente regla :

itconnect ALL=(ALL) /usr/bin/passwd, !/usr/bin/passwd root

Tras la aplicación de esta directiva, he aquí el resultado:

G. Modificar el tiempo de expiración del comando sudo

Cuando el sudo debemos introducir la contraseña de la cuenta de usuario que inició la acción para validar la operación. Luego, si ejecutamos un nuevo comando sudo, la contraseña no es necesaria, ya que el acceso permanece desbloqueado durante X minutos. Por defecto, este valor parece variar en función de la distribución utilizada, a veces 5 minutos, a veces 15 minutos.

Esta medida de seguridad es importante, pero puede ajustarse. De hecho, es posible modificar este valor para indicar el tiempo de caducidad ( timeout) que desee para sudoers.

Dentro del archivo sudoersdespués de las otras líneas Defaultsdeclare la siguiente línea:

Por defecto timestamp_timeout=5

Las líneas Defaults se utilizan para establecer los parámetros globales y por defecto de sudo.

He aquí algunos ejemplos más:

# Apply a Defaults rule to a specific user
Defaults:flo    timestamp_timeout=10

# Ask for the password for every command
Defaults        timestamp_timeout=0

# Always display the sudo warning on every use
Defaults        lecture=always

# Show asterisks * when entering the password (hidden by default)
Defaults        pwfeedback

VII. El archivo /etc/sudoers.d

A partir de ahora, dejaremos el sudoers para hablar de /etc/sudoers.d. Esta carpeta se utiliza para almacenar archivos declarativos para sudoers que se leerá además del sudoers en sí mismo. Tenga en cuenta que todos los archivos que contengan "~" o "." en el nombre no se leerán. Esto resulta especialmente útil para organizar las reglas por archivos, en lugar de centralizarlo todo en el mismo archivo: el archivo sudoers siempre se leerá, pase lo que pase.

Para crear un nuevo archivo llamado ADMINSutilizaremos siempre el comando visudode esta forma:

visudo /etc/sudoers.d/ADMINS

Podríamos entonces incluir nuestros alias y reglas creados previamente dentro de este archivo.

VIII. Trazabilidad de las acciones sudo

Una de las ventajas de sudo es la capacidad de rastrear todas las acciones realizadas por los usuarios. Los comandos ejecutados a través de sudo se guardan en el archivo de registro /var/log/auth.log (en Debian/Ubuntu) o /var/log/secure (en Red Hat/Fedora).

Imaginemos que, en una máquina Linux, un usuario intenta utilizar el comando sudo cuando no está autorizado a hacerlo. Esto generará inmediatamente una nueva línea de registro.

He aquí un ejemplo:

sudo: itconnect : user NOT in sudoers ; TTY=pts/0 ; PWD=/home/flo ; USER=root ; COMMAND=/usr/bin/apt-get update

Entendemos que el usuario itconnect intentó ejecutar el comando apt-get update. El intento fue rechazado.

Si la acción está autorizada, también se añade al archivo de registro. A continuación, podemos ver que el usuario flo utilizó el sudo para ejecutar el passwd it-connect.

sudo:      flo : TTY=pts/0 ; PWD=/home/flo ; USER=root ; COMMAND=/usr/bin/passwd it-connect

IX. Conclusión

Este tutorial sobre el usodel comando sudo y la configuración de sudoers en Linux está llegando a su fin. Gracias a esta guía de uso y configuración de sudo, dispondrás de toda la información necesaria para manejarlo y hacer un buen uso de él.

Comprendiendo cómo utilizarlo y cómo configurar /etc/sudoers, con reglas a medida, es posible limitar los riesgos de comprometer una máquina Linux. Y todo ello mientras se permite a los usuarios realizar las tareas que necesitan.

Por último, si todavía no estás convencido del valor de sudo -lo que me sorprendería, de todos modos- deberías saber que ANSSI recomienda su uso. Esta recomendación se considera una buena práctica y se describe en la guía"Recommandations de sécurité relatives à un système GNU/Linux" (Recomendaciones de seguridad para un sistema GNU/Linux).

author avatar
Florian Burnel Co-founder of IT-Connect
Systems and network engineer, co-founder of IT-Connect and Microsoft MVP "Cloud and Datacenter Management". I'd like to share my experience and discoveries through my articles. I'm a generalist with a particular interest in Microsoft solutions and scripting. Enjoy your reading.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.