sudo

Versión
1.7.4p4
Página principal
http://www.sudo.ws/
Observaciones
El nombre sudo proviene de la expresión inglesa SUperuser DO

Contenido

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:

  1. 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.
  2. 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

Recetario

Qué podemos hacer con sudo

Para averiguar de forma resumida los programas que podemos ejecutar usando sudo empleamos como parámetro principal

-l

de esta forma:

$ sudo -l -l
[sudo] password for victor:
Matching Defaults entries for victor on this host:
env_reset

User victor may run the following commands on this host:

Sudoers entry:
RunAsUsers: ALL
Commands:
/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
RunAsUsers: root
Commands:
/usr/bin/vim
RunAsUsers: root
Commands:
/usr/bin/debi
RunAsUsers: root
Commands:
/bin/mount, /bin/umount

Ejecutar el último comando con sudo

Es posible utilizar el histórico de órdenes del shell con sudo, por lo que para ejecutar la última orden se puede hacer:

$ sudo !!

o emplear otras órdenes del histórico del shell.

Actualizar el temporizador

Para que el temporizador de la contraseña se reinicie se debe emplear:

sudo -v

Apagado rápido de un sistema

sudo shutdown -r +15 "quick reboot"