Base de Conocimiento
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, ... , elementoNtipo_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_aliasdefine los elementos, es decir, dependiendo del tipo de alias serán sus elementos.
Los tipo de alias que podemos ocupar son los siguientes:
| Cmnd_Alias | define alias de comandos | |
| User_Alias | define alias de usuarios normales | |
| Runas_Alias | define alias de usuarios administradores o con privilegios | |
| Host_Alias | define 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\:00Al 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, REDRED_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/rpmA 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, %mysqlIndica 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, !davidAqui 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, !davidAqui 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, ivanAl 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.0El 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, dataserverSe 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
| usuario | Puede ser un usuario, un alias de usuario o un grupo (indicado por %) | |
| host | Puede ser cualquier equipo, un solo equipo, un alias de equipo, una dirección IP o una definición de red IP/máscara | |
| comando | Es 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/iptablesEl usuario 'rodrigo' en cualquier equipo puede utilizar iptables
ADMIN ALL = ALLLos 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) ALLSe establece permiso para el usuario 'zynya' en cualquier equipo, ejecutar cualquier comando de cualquier usuario, por supuesto incluyendo los de root.
ADMINISTRADORES PRODUCCION = EJECUCIONEn 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 rootEste 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 :
- NOPASSWD
- PASSWD
- NOEXEC
- 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
| | Tweet | Este obra está bajo una licencia Creative Commons Atribución-NoComercial-CompartirIgual 2.5 México. | ![]() |
