2.7.3.1. sudo

En muchas distribuciones Linux se opta por dejar al usuario root sin contraseña lo que impide el acceso directo como administrador. Por lo general, aunque sudo es muy configurable, las distribuciones conceden su uso ilimitado al usuario sin privilegios que se crea durante la instalación con la sola condición de que se introduzca la propia contraseña del usuario. En estas condiciones:

  • sudo está pensada para ejecutar una orden puntual:

    $ sudo apt update
    

    pero recuerda durante un tiempo la contraseña introducida, por lo que en ulteriores usos no vuelve a pedirse. Esto propicia que pueda usarse para ejecutar repetidamenete órdenes del administrador sin caer en el tedio de tener que introducir constantemente la contraseña.

  • Usado del modo anterior, no llega a abrise nunca una sesión interactica. Esto puede verse como una ventaja, pues evita que el usuario accidentalmente deje abierta la sesión de administrador, después de haber hecho todo lo que requería privilegios.

  • En contraprestación, esta configuración predefinida que hemos explicado, tiene el inconveniente de que, si se obtiene la contraseña del usuario, se habrá obtenido acceso total al sistema.

El resto del epigrafe se dedicará a describir cómo configurar y usar sudo, porque aunque no viene instalado por defecto en Debian se puede instalar:

# apt-get install sudo

La forma habitual de ejecutar sudo es:

$ sudo <comando>

Pero esto exige haber configurado primero el programa. Si ha sido así, se comprobará que se permitió al usuario ejecutar tal programa como administrador[1] y se pedirá la contraseña propia. Tras validarse, se ejecutará como administrador la orden que se haya decidido y durante los siguiente cinco minutos, sudo almacenará en su caché que ya nos validamos, con lo que podremos seguir ejecutando dentro de los siguientes cinco minutos comandos a través de él, sin volver a introducir la contraseña. Si se quiere ampliar quince minutos más este periodo, se puede hacer:

$ sudo -v

En cuanto a la configuración se encuentra bien en el fichero /etc/sudores bien en cualquier fichero dentro del directorio /etc/sudoers.d. Puede usarse un editor directamente para esta tarea, pero es más conveniente a través de:

visudo

Permite editar la configuración de sudo. Sin argumentos:

# visudo

edita el fichero general /etc/sudoers, de modo que si se quiere crear un fichero específico dentro de /etc/sudoers.d, debe expecificarse con la opción -f:

# visudo -f /etc/sudoers.d/pruebas

Configurar sudo implica básicamente conocer cuál es la sintaxis de sudoers. Esta se basa en definir alias, opciones y reglas de acceso. Trataremos lo primero y lo último:

Alias

Sirven para indentificar bajo un mismo nombre a grupos de usuarios, de máquinas o de órdenes. Para la definición, pueden usarse otros alias definidos anteriormente.

Cmnd_Alias

Permite definir conjuntos de comandos:

Cmnd_Alias NETEXEC = /sbin/if*, /sbin/route, /sbin/ip

Para separar unos de otros se usa la coma. Pueden usarse comodines y también expresar argumentos que será obligatorio que escriba el usuario si quiere poder ejecutar el comando a través de sudo. Por ejemplo:

Cmnd_Alias NETEXEC = /sbin/if* eth*, /sbin/route

Esto permitiría usar /sbin/ifup o /sbin/ifdown pero sólo si justamente después hay un argumento que empieza por eth. Si es otro, se denegará la ejecución.

Como ya se ha dicho, unos alias pueden usarse en la definición de otros, así que esto mismo lo podíamos haber escrito del siguiente modo:

Cmnd_Alias IFUPDOWN = /sbin/if* eth*
Cmnd_Alias NETEXEC = IFUPDOWN, /sbin/route

Es tambíen posible indicar explícitamente comandos que no queremos que se puedan ejecutar anteponiendo una exclamación:

Cmnd_Alias IFUPDOWN = /sbin/if*, !/sbin/ifconfig

Existe el alias predefinido ALL que permite ejecutar cualquier cosa.

User_Alias

Permite definir grupos de usuarios y grupos. Para incluir estos últimos en la sentencia se les debe anteponer un %:

User_Alias COLEGUILLAS = pepe, paco, %amigospepe, %amigospaco

También existe ALL para referirse, en este caso, a cualquier usuario; y la posibilidad de anteponer una exclamación para excluir a un usuario:

User_Alias CASTA = ALL, !apestado, !%parias
RunAs_Alias

Como el anterior, pero permite incluir también identificadores de usuario en vez de nombres. Basta con anteponerles el carácter almohadilla:

RunAs_Alias COLEGUILLAS = pepe, #1001
Host_Alias

Define conjuntos de máquinas desde las que se podrá ejecutar el comando a través de sudo:

Host_Alias LAN = 172.22.0.0/16, 192.168.0.0/255.255.255.0, 192.168.1.1

Pueden usarse nombres también y el alias predefinido ALL

Reglas de acceso

Definen los permisos que se concede a los distintos usuarios. Tienen este aspecto:

<usuario> <maquina> = [(<poderdante>)] <comando1>[, <comando2>, ...]
  • El usuario es un usuario, grupo o alias que hayamos definido. Es al que se conceden el privilegio de usar los comandos mediante su.

  • La maquina es la máquina (o alias) desde la que se podrá ejecutar sudo.

  • El poderdante es el usuario en nombre del cual se ejecutará el comando. Si no se especifica se sobrentenderá que es root.

  • Por último se incluye la lista de comandos o alias.

Por ejemplo:

COLEGUILLAS ALL = (root) NETEXEC

Es posible incluir algunas opciones en las reglas. Una es NOPASSWD que evita la petición de la contraseña:

COLEGUILLAS ALL = (root) NOPASSWD: NETEXEC

Hay dos opciones interesantes cuando se ejecuta sudo. Una es -l que le muestra al usuario qué comandos puede ejecutar a través de sudo:

$ sudo -l

El otro es -e que permite editar ficheros, siempre que se haya incluido alguna regla de acceso que permita al usuario ejecutar sudoedit:

usuario ALL = sudoedit

Esta línea permitiría a usuario editar cualquier fichero.

Por último, es posible también abrir sesiones interactivas con sudo, del mismo modo que se abrian con su. Para ello podríamos hacer:

# sudo su -

o bien:

# sudo -i

La primera orden exige que hayamos proprocionados permisos para ejecutar su con sudo; y la segunda, permisos sobre la shell interactiva que use el usuario root (típicamente bash).

Notas al pie