sudo

( sistemas / linux )

El comando SUDO nos permite ejecutar scripts, aplicaciones como root u otro usuario sin saber la contraseña de estos usando la de nuestro usuario pudiendo configurar infinidad de opciones para tener un mayor control de la seguridad de nuestro sistema. La configuración está en el fichero /etc/sudoers (Linux) o /private/etc/sudoers (OSX) y debe ser editado (realmente se puede usar cualquier editor pero es recomendable hacerlo) con el comando visudo, que a parte de ejecutar nuestro editor favorito (usando la variable de entorno EDITOR) para editar el fichero antes de salir hace una comprobación del fichero, por si hubiera algún error. En este artículo solo expongo algunas nociones y apuntes muy resumidos de lo que se puede hacer para ver en profundidad todo lo que se puede hacer lo mejor es ir a la página del manual, man sudoers desde consola o aquí.

Estructura del fichero sudoers

1. Definiciones de aliasAquí lo que hacemos es definir un alias, que es básicamente una abreviación o agrupación de otros nombres o alias. Su formato es:

Alias_Type NAME = item1, item2, ...

Alias_Type-> puede ser:

NAME -> Es el nombre del alias. Debe empezar por letra mayúscula y sólo se permiten letras mayúsculas y números. itemx puede ser un elemento o un alias el cual será expandido. NOTA: Existe un alias especial, ALL, que se utiliza para englobar a todos los comandos, usuarios, hosts. 2. Ajuste de opcionesAquí es donde definimos los valores por defecto de cada usuario para que tenga unas opciones diferentes o específicas. La sintaxis es la siguiente:

Defaults             lista_opciones
Defaults:usuario     lista_opciones
Defaults@host        lista_opciones

La lista_opcioneses una lista de opciones separadas por comas. Existen cuatro tipos de opciones:

  1. Booleanos: Que se activan con sólo escribir el nombre de la opción y se desactivan con el símbolo ! delante.
  2. Enteros: De la forma nombre_opcion = valor
  3. Strings: Igual que los enteros nombre_opcion = "valor"
  4. Listas: Que pueden ser de la forma nombre_opcion = "valor1 valor2". Éstas opciones también pueden utilizar += y -= en lugar de = para añadir elementos y quitar elementos respectivamente.

NOTA: para ver la lista completa de opciones y su descripción aquí. 3. Reglas de accesoAquí es donde definimos que usuario puede ejecutar qué comando bajo que usuario (por defecto root) y en que host lo pueden hacer (por defecto localmente). El formato es (lo que va entre [ ] es opcional):

usuario    host = [(usuario_privilegiado)] [NOPASSWD:] comando

Como se puede ver es bastante simple, pero aquí va una breve explicación: usuario es el usuario al que vamos a permitir ejecutar algo con privilegios. host es en que máquina puede ejecutar, por defecto (y comodidad) se suele poner ALL. NOPASSWD: sirve para que SOLO en este comando NO pida nuestra contraseña para validar y ejecutar el comando. comando, es lo que queremos ejecutar con privilegios, y debe tener el path completo. 4. Ejemplos

#
# Aliases
#

# Comandos para instalar paquetes en Debian
Cmnd_Alias APT = /usr/bin/apt-get, /usr/bin/dpkg

# Usuarios que pueden instalar paquetes
User_Alias ADMIN = paco, felix

# Usuarios privilegiados
Runas_Alias OP = root, operator

#
# Reglas de acceso
# 

# Sólo pueden instalar paquetes los usuarios de ADMIN
# (por defecto, como root). No necesitan contraseña.
ADMIN           ALL = NOPASSWD: APT

# El usuario edu puede des/montar como si fuese root
edu             ALL = (OP) /sbin/mount

# El root puede hacer lo que quiera.
root            ALL = (ALL) ALL

Comandos que fallan por no encontrar el path

Cuando ejecutamos algo con SUDO puede ocurrir que este comando no encuentre algo en el path por lo que debemos poner un path en el sudoers para solventarlo:

Defaults        env_reset
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Modificado el 18 Abril, 2015
Creado el 3 octubre, 2011
   

Compartiendo conocimiento desde 1995 - I.M.D. I.M.D.