Sudo
Enlaces y referencias
Introducción
El programa sudo permite ejecutar programas con la identidad de otros usuarios. Su esquema de uso común (asumiendo que exista un archivo sudoers correcto) es el siguiente:
sudo [options] [-g group name|#gid] [-u user name|#uid] [VAR=value] [command]
Es decir, básicamente se le indica el grupo y/o el usuario con el que queremos ejecutar el programa indicado al final, y se permite la definición de variables de entorno concretas. Tras consultar la configuración el programa puede decidir solicitar una contraseña o no al usuario. Ésta se mantiene en recuerdo durante un periodo de tiempo concreto (que suele rondar los 15 minutos) y durante el cual las siguientes invocaciones del programa funcionan sin pedir nada.
Configuración
La configuración del programa sudo está definida en el archivo /etc/sudoers
. En él la configuración está expresada en notación EBNF y consta básicamente de dos tipos de elementos:
- Alias que son básicamente variables.
- Reglas de usuario que vienen a indicar quién puede ejecutar qué.
Cuando se encuentran múltiples coincidencias en entradas para un usuario éstas se aplican en orden, utilizando la última encontrada, que no es necesariamente la más específica.
Para modificar este archivo se recomienda emplear un editor como visudo, incluído en el mismo paquete sudo, puesto que verifica la síntaxis de la configuración y no da por válida la modificación hasta que está correcta -entre otras ventajas-.
Alias
Existen cuatro tipos de alias aunque cada definición tiene la misma composición:
Tipo_de_alias NOMBRE = elemento [, elemento ...]
Los tipos de alias pueden ser:
- User_Alias para crear listas de usuarios con acceso a los programas
- Runas_Alias para crear listas de usuarios con los que ejecutar programas
- Host_Alias para definir las máquinas en las que se aplican las reglas de acceso
- Cmnd_Alias para establecer grupos de programas
User_Alias
Los alias de usuarios son listas que seleccionan identidades, bien individuales, bien grupos, y que pueden incluirse unas dentro de otras. Se puede indicar un nombre, un ID numérico, un grupo u otras listas de usuarios.
.-----------. | User_list | '-----------' | | .------------. '-->| Usuario |----------------------------------------> '------------' ^ | | | | .------------. .---. | '-------| #UID |<----| , |<' '------------' '---' ^ | | .------------. | '-------| %grupo |<------' '------------' | ^ | | .------------. | '-------| User_list |<------' '------------' | ^ | | .------------. | '-------| Usuario |<------' '------------'
Runas_Alias
Este tipo de alias son muy similares a los alias de usuarios y se diferencian en:
- Los nombres de usuarios y de grupos se comprueban como textos (matched as strings), por lo que si tienen el mismo id de grupo o de usuario se consideran distintos.
- En lugar de incluir otros grupos de usuarios (user_alias) sólo pueden incluir otros alias de ejecutar como.
Host_Alias
Está compuesta de los siguientes elementos:
.-----------. | Lista de | | máquinas | '-----------' ------------------------------------------------------------------> | ^ ^ | | | | .------------------. v | .------------. | | | Nombre | .---. | | Nombre | | <----| de máquina |<-----------| , | '-->| de máquina |--' | '------------------' '---' '------------' | | | .-------------------. | <----| Dirección IP |<------------| | '-------------------' | | | | .-------------------. | | | Dirección de red/ | | <----| Máscara de red |<------------| | '-------------------' | | | | .-------------------. | <----| +grupo_de_red |<------------| | '-------------------' | | | | .-------------------. | | | Lista de | | '----| máquinas |<------------' '-------------------'
Reglas de usuario
Estas reglas son las que determinan qué programas puede ejecutar un usuario y bajo qué condiciones, incluyendo el usuario con el que funcionará (siendo root el predeterminado) y si se solicita o no contraseña de acceso, entre otras cosas.
La regla está compuesta de
QUIEN DONDE = (COMO) OPCIONES: QUE
que viene a ser
- QUIEN (User_Alias)
- Usuarios a los que se aplica la regla y que son los que pueden ejecutar los programas.
- DONDE (Host_Alias)
- Máquinas desde donde se va a ejecutar el programa y para las que se aplica la regla.
- COMO (RunAs_Alias)
- Usuario y/o grupo con el que ejecutar el programa.
- OPCIONES (Tag_Spec)
- Etiquetas que condicionan desde ese punto la ejecucicón de programas. Entre ellas están:
- NOPASSWD para no pedir acreditación alguna
- NOEXEC para impedir la ejecución de fugas empleando un shell (no funciona en todos los sistemas).
- QUE (Cmdn_Alias)
- Lista de programas que pueden ejecutarse bajo las condiciones anteriores.
Caracteres especiales y directivas
- El carácter almohadilla (#) se emplea para iniciar comentarios hasta el final de la línea. Como excepciones están la directiva
#include
y el identificador de usuario cuando se expresa como número (#1001
). - La palabra reservada ALL es un alias interno que coincide siempre con cualquier cosa, y que puede emplearse en cualquier sitio que precise un nombre de alias. Es un comodín universal y por lo tanto puede ser muy peligroso si se emplea en una lista de programas, ya que indica que vale por cualquiera que se indique.
- El carácter de cierre de exclamación (!) sirve para negar el valor que aparece a continuación por lo que puede emplearse para excluir ciertos valores de una lista.
- El carácter barra invertida (\) sirve para indicar que la siguiente línea de texto es una continuación lógica de la línea en la que aparece.
- Los espacios en blanco entre elementos de una lista son opcionales.
- Los siguientes caracteres deben ser escapados con una barra invertida (\) cuando forman parte de una palabra, como un nombre de usuario o máquina):
@ ! = : , ( ) \
.
sudoers
Archivo de configuración ejemplo en el que se incluye la configuración básica para que el programa wajig pueda ser empleado por una cuenta de usuario de confianza:
# Valores predeterminados Defaults env_reset # Alias de máquinas # Alias de usuarios User_Alias ADMIN = victor User_Alias AEAT = victor, contabilidad, gerencia # Alias de programas Cmnd_Alias APT = /usr/bin/apt-get, /usr/bin/apt-cache, /usr/bin/dpkg, \ /usr/sbin/dpkg-reconfigure, /usr/bin/dpkg-repack, \ /etc/init.d/*, /usr/sbin/update-alternatives, \ /usr/lib/apt-move/fetch, /usr/bin/dselect, \ /usr/bin/alien, /usr/sbin/apt-setup Cmnd_Alias PKG = /usr/bin/debi Cmnd_Alias MEDIOS = /bin/mount, /bin/umount Cmnd_Alias INSTALL = /usr/bin/install # Reglas de ejecución de programas (user specification) root ALL=(ALL) ALL ADMIN ALL=(ALL) APT, (root) /usr/bin/vim, (root) PKG, (root) MEDIOS, (root) INSTALL AEAT ALL=(ALL) /usr/local/bin/firefox3
PATH de root
El comportamiento predeterminado de sudo es lanzar los programas con un entorno mínimo lo que provoca en ocasiones que la variable PATH contenga valores de usuario y no de administrador.
Para forzar el cambio se puede emplear la directiva 'Defaults' de la siguiente forma:
Default secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin