Este artículo explica cómo instalar y configurar sudo
en Debian/Devuan y derivados para permitir que un usuario pueda ejecutar comandos como superusuario (root).
Muchos utilitarios y acciones a realizar sobre sistemas GNU/Linux requieren hacerse como usuario superusuario, más conocido como "root". Por ejemplo actualizar el sistema:
emi@devuan:~$ apt-get upgrade E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied) E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
En Debian/Devuan y derivados, generalmente se abre una sesión como superusuario ejecutando su
e ingresando luego la contraseña de "root". Sin embargo es posible correr comandos como "root" sin necesidad de abrir una sesión o conocer su contraseña. Por supuesto esto es una configuración de inseguridad, por comodidad, que suele utilizarse en sistemas de escritorio (no así en servidores).
El utilitario sudo
permite ejecutar comandos como otro usuario. Generalmente viene instalado en distribuciones basadas en Ubuntu, sin embargo en Debian, Devuan y derivados es necesario instalarlo y configurarlo manualmente.
Para instalar sudo
simplemente ejecutar (como root):
root@devuan:/home/emi# apt-get install sudo
La política de seguridad de sudo
se configura en el archivo /etc/sudoers
. Es en este archivo donde se define qué usuarios o grupos pueden ejecutar qué comandos a nombre de quién (user ID efectivo):
root@devuan:/home/emi# nano /etc/sudoers
Esto no está bien, está mal. Este archivo "debe" ser editado con la herramienta visudo
, ya que en caso de un error de configuración o sintaxis podemos dejar al resto de los usuarios sin acceso a sudo
. O peor aún podemos dejar la sistema en una situación vulnerable.
Más allá de su nombre, la herramienta visudo
no utiliza sí o sí el editor vi
, sino que usa el editor por defecto del sistema. En el caso de Devuan, el editor por defecto es nano
(mucho más amigable que el funesto vi
):
root@devuan:/home/emi# ls -l /usr/bin/editor lrwxrwxrwx 1 root root 24 sep 4 11:59 /usr/bin/editor -> /etc/alternatives/editor root@devuan:/home/emi# ls -l /etc/alternatives/editor lrwxrwxrwx 1 root root 9 sep 4 11:59 /etc/alternatives/editor -> /bin/nano
La política de seguridad por defecto que incluye el paquete sudo
permite que todos los usuarios en el grupo "sudoers" puedan ejecutar cualquier comando a nombre de cualquier usuario:
%sudo ALL=(ALL:ALL) ALL
Por ende para comenzar a trabajar con sudo
, una buena opción es no tocar la política de seguridad por defecto y simplemente agregar a nuestro usuario no privilegiado al grupo "sudo" (creado automáticamente por el gestor de paquetes durante la configuración del paquete sudo
):
root@devuan:/home/emi# usermod -a -G sudo emi root@devuan:/home/emi# groups emi emi : emi cdrom floppy sudo audio dip video plugdev netdev lpadmin scanner
Ahora sólo resta reiniciar la sesión del usuario para que tome el nuevo grupo.
Al iniciar sesión nuevamente, es posible ejecutar comandos como "root" simplemente anteponiendo "sudo":
emi@devuan:~$ sudo apt-get upgrade We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for emi: Reading package lists... Done Building dependency tree Reading state information... Done Calculating upgrade... Done 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
El sermón al comienzo sólo ocurre la primera vez que se ejecuta sudo
: "With great power comes great responsibility".
Las ventajas de utilizar sudo
son varias: permite ejecutar comandos como superusuario sin ingresar su contraseña; evita abrir una sesión como root, lo que posibilita mantenernos sesión actual; y además sudo
recuerda nuestras credenciales por 15 minutos (por defecto). Gracias a esto último, dentro de los siguientes 15 minutos no es necesario siquiera ingresar nuestra contraseña para ejecutar comandos como otro usuario:
emi@devuan:~$ sudo apt-get upgrade Reading package lists... Done Building dependency tree Reading state information... Done Calculating upgrade... Done 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Esto por supuesto es muy cómodo y práctico para sistemas de escritorio, pero no es recomendable para servidores. Sin embargo, para el caso de servidores, puede ser de gran ayuda si se configura a sudo
de forma restrictiva. Por ejemplo podemos recurrir a sudo
para que un Web developer tenga permitido sólo recargar la configuración de Apache como usuario root.
Referencias
man su
man sudo
man sudoers
man visudo