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


Tal vez pueda interesarte


Compartí este artículo