Base de Conocimiento Base de Conocimiento

« Volver a Administración de...

Manual de Configuración del Fichero Sudoers

Sobre Sudoers#

En este fichero se estableceran los usuarios que podran ejecutar ciertos comandos y la forma en como podran ser ejecutados, generando asi una lista de control de acceso que puede ser tan detallada como se desee

El fichero esta conformado por tres secciones particulares, estas secciones son:

  • Alias
  • Reglas de acceso

Alias#

Un alias se refiere al nombre de un usuario, un comando o a un equipo. El alias engloba bajo un solo nombre una serie de elementos que después en la parte de definición de reglas serán referidos o aplicados bajos ciertos criterios.

La sintaxis para crear un alias es la siguiente:

tipo_alias NOMBRE_DEL_ALIAS = elemento1, elemento2, ... , elementoN
tipo_alias NOMBRE1 = elemento1, elemento2 : NOMBRE2 = elemento1, elemento2}}}

Podemos notar en la segunda linea una diferencia con respecto a la primera, esta diferencia es el caracter de “:” . Cuando nosotros separamos una misma linea mediante el uso de “:” indicamos mas de un alias en una misma definicion.

El parametro

tipo_alias
define los elementos, es decir, dependiendo del tipo de alias serán sus elementos.

Los tipo de alias que podemos ocupar son los siguientes:

Cmnd_Aliasdefine alias de comandos
User_Aliasdefine alias de usuarios normales
Runas_Aliasdefine alias de usuarios administradores o con privilegios
Host_Aliasdefine alias de hosts o equipos

El parametro

NOMBRE_DEL_ALIAS ó NOMBRE1

puede ser especificado con letras, numeros o guion bajo, pero es obligatorio que la primera letra sea en MAYUSCULAS aunque naturalmente se acostumbra a usarlos siempre en MAYUSCULAS

Los elementos del “alias” pueden variar dependiendo del tipo de alias que se implemente, asi que veámoslos por partes asi como varios ejemplos para que comience a quedar claro.

Cmnd_Alias#

Esta parametro define uno o mas comandos asi como tambien otros alias de comandos que podran ser utilizados despues en un alias de usuarios. Ejemplos:

Cmnd_Alias RED = /usr/sbin/apachectl, /usr/sbin/httpd, sudoedit /etc/httpd/
Indica que a quien se le aplique el alias RED podrá ejecutar los comandos apachectl, httpd y editar todo lo que este debajo del directorio /etc/httpd/, nótese que debe de terminar con '/' cuando se indican directorios. También, la ruta completa a los comandos debe ser indicada.

Cmnd_Alias APAGAR = /usr/bin/shutdown -h 19\:00 
Al usuario que se le asigne el alias APAGAR podrá hacer uso del comando 'shutdown' exactamente con los parámetros como están indicados, es decir apagar -h (halt) el equipo a las 19:00 horas.

Cmnd_Alias RED_ADMIN = /sbin/ifconfig, /sbin/iptables, RED
RED_ADMIN es un alias con los comandos de configuración de interfaces de red ifconfig y de firewall iptables, pero además le agregamos un alias previamente definido que es RED, asi que a quien se le asigne este alias podrá hacer uso de los comandos del alias RED.

Cmnd_Alias ALL_BIN = /usr/bin/, !/usr/bin/rpm 
A quien se le asigne este alias podrá ejecutar todos los comandos que estén dentro del directorio /usr/bin/ menos el comando 'rpm' ubicado en el mismo directorio.

User_Alias#

Este parametro define a uno o mas usuarios, grupos del sistema, grupos de red u otros alias de usuarios

Los grupos del sistema son indicados con el identidicador --> %
Los grupos de red son indicados con el identidicador --> +

Ejemplos:

User_Alias USUARIOS_MYSQL = alfredo, victor, salvador, %mysql
Indica que al alias USUARIOS_MYSQL pertenecen los usuarios indicados individualmente asi como tambien a los usuarios que formen parte del grupo 'mysql'.

User_Alias ADMIN = nahim, isaac 
'nahim' e 'isaac' pertenecen al alias ADMIN.

User_Alias TODOS = ALL, !samuel, !david
Aqui encontramos algo nuevo, definimos el alias de usuario TODOS que al poner como elemento la palabra reservada 'ALL' abarcaría a todos los usuarios del sistema, pero no deseamos a dos de ellos, asi que negamos con '!', que serían los usuarios 'angelica' y 'iliana'. Es decir, todos los usuarios menos esos dos

User_Alias TODOS = ALL, !samuel, !david
Aqui encontramos algo nuevo, definimos el alias de usuario TODOS que al poner como elemento la palabra reservada 'ALL' abarcaría a todos los usuarios del sistema, pero no deseamos a dos de ellos, asi que negamos con '!', que serían los usuarios 'angelica' y 'iliana'. Es decir, todos los usuarios menos esos dos

Runas_Alias#

Este parametro funciona exactamente igual que User_Alias, la única diferencia es que es posible usar el ID del usario con el caracter '#'

Ejemplos:

Runas_Alias DESARROLLADORES = #507, ivan 
Al alias DESARROLLADORES pertenecen el usuario con UID 507 y el usuario 'ivan'

Host_Alias#

Este parametro define uno o más equipos u otros alias de host. Los equipos pueden indicarse por su nombre si estos se encuentran nombrados en /etc/hosts, por nombre de dominio, por dirección IP

Ejemplos:

Host_Alias LAN = 192.168.0.0/24, 192.168.0.1/255.255.255.0 
El alias LAN define todos los equipos de las redes locales.

Host_Alias SERVIDORES_WEB = 172.16.0.21, web1 : SERVIDORES_DB = 192.168.100.10, dataserver 
Se definen dos alias en el mismo renglón: SERVIDORES_WEB y SERVIDORES_DB con sus respectivas listas de elementos, el separador ':' es válido en cualquier definición de tipo de alias.

Reglas de acceso#

En las reglas de acceso se define que usuarios ejecutan que comandos bajo que usuario y en que equipos. La sintaxis basica sobre como se declaran estas reglas de acceso es la siguiente:

usuario host = comando1, comando2,...,comandoN

usuarioPuede ser un usuario, un alias de usuario o un grupo (indicado por %)
hostPuede ser cualquier equipo, un solo equipo, un alias de equipo, una dirección IP o una definición de red IP/máscara
comandoEs cualquier comando indicado con su ruta completa. Si se termina en '/' como en /etc/http/ entonces indica todos los archivos dentro de ese directorio

Ejemplos:

rodrigo ALL = /sbin/iptables  
El usuario 'rodrigo' en cualquier equipo puede utilizar iptables

ADMIN ALL = ALL 
Los usuarios definidos en el alias ADMIN pueden desde cualquier equipo ejecutar cualquier comando

%webmaster servdorDB = (administrador) /usr/respaldo, (root) /var/log/* 
En este ejemplo los usuarios que pertenezcan al grupo del sistema llamado webmaster pueden en el equipo llamado servidorDB ejecutar como si fueran el usuario admnistrador la aplicación llamada 'respaldo', además como usuarios 'root' pueden ver el contendido de los archivos que contenga el directorio /var/log.

zyanya ALL = (ALL) ALL 
Se establece permiso para el usuario 'zynya' en cualquier equipo, ejecutar cualquier comando de cualquier usuario, por supuesto incluyendo los de root.

ADMINISTRADORES PRODUCCION = EJECUCION 
En el alias de usuario a ADMINISTRADORES los usuarios que esten indicados en ese alias, tendrán permiso en los equipos definidos en el alias de equipo PRODUCCIÓN, de ejecutar los comandos definidos o listados en el alias de comandos EJECUCIÓN. En este último ejemplo se aprecia lo últil que pueden ser los alias, ya que una vez definida la regla, solo debemos agregar o eliminar elementos de las listas de alias definidos previamente. Es decir, se agrega un equipo más a la red, se añade al alias PRODUCCION, un usuario renuncia a la empresa, alteramos el alias ADMINISTRADORES eliminándolo de la lista, etc.

checo ALL = /usr/bin/passwd *, !/usr/bin/passwd root 
Este es un ejemplo muy interesante de la potencia y flexibilidad . Al usuario 'checo', desde cualquier equipo, tiene permiso de cambiar la contraseña de cualquier usuario (usando el comando 'passwd'), excepto '!' la contraseña del usuario 'root'. Lo anterior se logra mediante el uso de argumentos en los comandos. En el primer ejemplo '/usr/bin/passwd ' el asterisco indica una expansión de comodin (wildcard) que indica cualquier argumento, es decir, cualquier usuario. En el segundo caso '!/usr/bin/passwd root', si indica un argumento específico 'root', y la '!' como ya se sabe indica negación, negando entonces el permiso a cambiar la contraseña de root.

viridiana ALL = "/sbin/ifconfig"
Al estar entre comillas dobles un comando, entonces sudo lo interpreta como puede hacer uso del comando lsmod pero sin argumentos. En este caso el usuario mariajose podrá ver la lista de módulos del kernel, pero solo eso.

Tags (etiquetas de comandos)#

Cuando se definen reglas en la lista de comandos estos pueden tener ninguna o más varias tags, estas tags por lo regular son :

  1. NOPASSWD
  2. PASSWD
  3. NOEXEC
  4. EXEC

NOPASSWD Y PASSWD#

Por defecto cuando ejecutamos algun comando con sudo este requiere que el usuario se auténtifique con su contraseña.

ricardo servidorweb = NOPASSWD: /bin/kill, /usr/bin/lprm, /etc/httpd/conf/ 

Usuario ricardo en el equipo servidorweb no requerira contraseña para los comandos listados. El tag se hereda, es decir no solo el primer elemento de la lista de comandos, sino los subsiguientes. Suponiendo que el último '/etc/httpd/conf/ elemento, que permite modificar cualquier archivo contenido en el directorio, si deseamos que use contraseña, lo siguiente lo conseguirá:

ricardo servidorweb = NOPASSWD: /bin/kill, /usr/bin/lprm, PASSWD: /etc/httpd/conf/ 

NOEXEC Y EXEC#

Este es un tag muy importante a considerar sobre todo cuando se otorgan permisos sobre programas que permiten accesos a un BASH, como en el editor 'vi' que mediante el uso de '!' es posible ejecutar un comando en el shell sin salir de 'vi'. Con el tag NOEXEC se logra que esto no suceda, aunque no hay que tomarlo como un hecho, ya que siempre existe la posibilidad de vulnerabilidades no conocidas en los múltiples programas que utilizan escapes a shell. Al igual que los tags anteriores, el tag se hereda y se deshabilita con su tag contrario EXEC, en caso de que en la lista de comandos hubiera varios comandos.

valeria ALL = NOEXEC: /usr/bin/vi 

Promedio (0 Votos)
La valoración media es de 0.0 estrellas de 5.
Comentarios