Uso de Sudo en Debian Testing Stretch

, per  laura

Después de usar durante unos años Ubuntu te acabas acostumbrando a ciertas manías que tiene esta distro y que no comparte con el resto de las distribuciones de Linux.

Una de estas manías es la de no crear un usuario root, o más bien no mostrar al usuario que este tipo de usuario puede existir.

Usuario root, por qué y para qué

Un usuario root, por definición, es aquel que puede administrar completamente el ordenador en linux. Esto hace que si se crean otros usuarios, no sean capaces de hacer lo mismo que root, es decir, root tiene poderes que no tienen el resto de usuarios.

La invención de este usuario es para poder asegurarse de que el sistema permanece seguro a pesar de que pueda ser usado por multitud de personas, incluso, al mismo tiempo, ya que si no se tienen permisos de lectura(r), ejecución(x) y de escritura(w) sobre los archivos de configuración, poco daño pueden hacer los usuarios bien o mal intencionados que tenga un sistema. Lo cual contribuye a la seguridad de Linux como sistema operativo. [1]

Sudo y Ubuntu

Para facilitar la vida, lo que hace Ubuntu es eliminar la figura de root, y convertir al usuario principal (el que haces durante la instalación de ubuntu) en el todopoderoso del sistema operativo. Si se crean otros usuarios más tarde, estos no tienen sus poderes, a no ser que se retoque su configuración.

El método que se emplea para que el usuario principal pueda administrar el sistema es utilizar el comando sudo situándolo siempre ante los comandos que se hayan de ejecutar. Un ejemplo es el siguiente:

usuario@ubuntu:~$sudo apt-get install blabla
[sudo] password for usuario:

Aquí tenemos a usuario tratando de instalar un programa llamado blabla mediante el uso de sudo en la shell. Como se observa tras escribir el comando :

sudo apt-get install blabla

el sistema le pide la contraseña para confirmar que es usuario con derechos de administrador del sistema.

[sudo] password for usuario:

Si la contraseña corresponde a la del usuario, el comando apt-get se ejecutará con todas sus consecuencias.

En el ejemplo anterior el sistema reconoce al usuario como un usuario sudo válido.

Puede que cuando se trata de usar sudo en un sistema sin que esté preparado para ello, o con un usuario que no tenga especificado en su configuración este poder, ocurra algo similar a esto:

laura@debian:~$ sudo su
laura is not in the sudoers file.  This incident will be reported.

Más o menos nos indica que no tenemos ningún derecho a usar sudo, y que se lo dirá al jefe, es decir, a root. Si este no fuera mi sistema o si fuera un ordenador público, puede que esta tontería tuviera consecuencias, depende del humor del administrador. ;)

Como en este caso se trata de mi ordenador, pues tengo posibilidad de ejecutar cualquier comando tras loguearme como root, pero esto a la larga y como dije antes, una vez acostumbrados al sudo, se hace pesado, así que había que encontrar una forma de solucionar este elemento de fustración continuada.

Archivo de configuración, /etc/sudoers

Sudo determina quien está autorizado consultando el archivo /etc/sudoers. El archivo /etc/sudoers, es el lugar donde se guarda la configuración respecto a sudo. Y resulta ser un tipo de archivo bien especial, pues no tiene derechos de escritura ni el mismísimo root:

laura@debianppc:~$ ls -ls /etc/sudoers
4 -r--r----- 1 root root 322 may 10 12:25 /etc/sudoers

Esto hace que no se pueda editar de cualquier forma. Hay al menos dos modos de actuar ante esta situación, una es correcta y otra es incorrecta, probablemente esta última es bastante más utilizada,

Forma Incorrecta, pero solucionable
Lo malo es que llegados a este punto, se suele hacer mal, porque pensamos:
"si este archivo no tiene derechos de escritura ni el propio root, habrá que cambiar los permisos para que se pueda escribir. Y una vez modificado el archivo, pues vuelvo a cambiar los permisos y ya està :D"

Después de pensar esto, debería sonar un campanazo de error, o un gran Meeeeck, porque este pensamiento llevado a efecto, crea un conflicto muy interesante, si no se tiene contraseña para loguearse directamente como root (como suele ocurrir en ubuntu), ya no se puede usar el sudo para nada, puesto que los permisos del archivo de configuración de sudo no son correctos, pero paradójicamente tampoco se pueden modificar para cambiarlos :DD porque no te puedes loguear como root haciendo sudo su(¿a que es divertido?).

Bien, la solución cuando no hay password para root, y no hay forma de entrar como root, es reiniciar el sistema, y entrar a ubuntu en el modo recorvery mode (modo de rescate) y elegir la opción root.
Esto te permite llegar a una consola (sin gráficos) donde ya eres root (uff :)) donde se pueden modificar los permisos con un simple:

chmod 0440 /etc/sudoers

Al reiniciar en el modo normal todo estará arreglado y el susto habrá pasado. :)

Forma Correcta, sin caos
La correcta, se basa en el uso de un editor especial, que únicamente sirve para editar este archivo. Es el editor visudo. Visudo sólo tiene 4 opciones, pero para el caso que nos ocupa, basta con usar una.

visudo -f /etc/sudoers

Con este comando (o agregándole el sudo delante) se puede editar y modificar el archivo de la configuración de los usuarios sudo. Este podría ser un archivo típico /etc/sudoers, en debian:

Bien, una vez abierto se localiza la línea donde está root, y se agrega justo debajo una muy similar pero sustituyendo root por el nombre de nuestro usuario, es decir, siguiendo con el ejemplo, algo así:

laura ALL=(ALL:ALL) ALL

Donde :
laura: nombre de la usuaria a la que se le permite el uso de sudo
ALL: se permite que se ejecute sudo desde cualquier terminal
(ALL:ALL): (usario:grupo) el usuario podrá ejecutar todos los comandos de cualquier otro usuario. Además, con el segundo ALL de este paréntesis, permitimos que el usuario ejecute todos los comandos de todos los grupos existentes en el sistema.
ALL: permite que todos los comandos pueden ser ejecutados

NOTA IMPORTANTE: [2]

Tras lo cual hemos de guardar y cerrar para que tomen efecto los cambios. Como visudo, contra toda la lógica de su propio nombre, no usa vi, sino GNU Nano, los atajos de teclado son diferentes, básicamente es bueno recordar estos dos:

Ctrl+o  Intro para guardar
Ctrl+x  para salir  

Existe la posibilidad de cambiar el editor de este archivo por otro, por ejemplo usando vim con el siguiente comando:

root@debian:/~#  EDITOR=vim visudo

Hecho todo esto, podremos disfrutar instalando o tocando la configuración de nuestro sistema, sea o no ubuntu, usando el sudo ....

laura@debian:~$ sudo apt-get install blabla
[sudo] password for laura:

Una vez que el usuario ha sido autenticado, durante un periodo de 15 minutos(opción por defecto) sudo puede ser usado sin necesidad de escribir la contraseña nuevamente.

Conocer que derechos hay concedidos en nuestro sistema

Para saber que derechos hay definidos en el /etc/sudoers, ejecutar sea cual sea el usuario con el que estemos logueados:

laura@debian:~$  sudo -l
[sudo] password for laura:
User laura may run the following commands on this host:
   (ALL) ALL

Configuración avanzada de sudoers

Esto que he descrito hasta aquí es todo lo que se puede hacer sin profundizar mucho en el tema, pero tocando el archivo sudoers se puede llegar a personalizar el comportamiento de sudo para que cumpla nuestros requerimientos.

Por ejemplo, sabemos que tras ejecutar el comando sudo con nuestro usuario y aportar la contraseña, tenemos un periodo de tiempo, por defecto 15 minutos, en que podremos seguir ejecutando órdenes con sudo sin que el sistema nos pida la contraseña de nuevo. Bien, esto puede llegar a ser un problema si dejamos el equipo en manos de extraños. Para evitarse problemas puede configurarse el comportamiento de sudo para que limite ese tiempo

{{timestamp_timeout=0 }} (cero) con esta configuración se consigue que cada vez que se ejecute sudo el sistema pida la contraseña, ya que expira cada 0 segundos.

{{timestamp_timeout= X }} Donde X será el tiempo en segundos durante los que se podrá ejecutar sudo sin necesidad de introducir la contraseña de nuevo.

{{timestamp_timeout=-1 }} (menos uno) con esta configuración el sistema no vuelve a pedir la contraseña. Opción poco recomendable en la mayoría de casos.

Para adentrarse en este tema se puede leer la páginaman de sudoers, la de man sudo, o echar un vistazo a los manuales que hay por internet dedicados a extender este punto.