ahuffman.sudoers
ahuffman.sudoers
Controla la configuración del archivo /etc/sudoers
predeterminado y los archivos/directorios incluidos.
Por favor, ten en cuenta que la versión 2.0.0+ es una reescritura importante del rol. Lee la documentación para asegurarte de entender los cambios antes de la instalación y el uso si vienes de versiones anteriores.
Tabla de Contenidos
- Tabla de Contenidos
- Consejos
- Variables del Rol
- Campos del Diccionario sudoers_files
- Generación Automática de los Datos de los Archivos Sudoers a partir de una Configuración Existente
- Ejemplos de Playbooks
- Licencia
- Información del Autor
Consejos
Consejo: Aquí hay algunos recursos excelentes sobre la configuración de sudoers: |
---|
Comienza aquí - Proporciona una buena introducción sobre configuraciones y terminología básicas de archivos sudoers. |
Manual de Sudoers - Si quieres conocer todos los detalles, este es para ti. |
Variables del Rol
Los valores predeterminados definidos para este rol se basan en una configuración predeterminada de /etc/sudoers
de RHEL7.6. Por favor, revisa los valores predeterminados en defaults/main.yml
antes de ejecutarlo para comprobar la compatibilidad del sistema operativo.
Nombre de Variable | Descripción | Valor Predeterminado | Tipo de Variable |
---|---|---|---|
sudoers_rewrite_default_sudoers_file | Usar la configuración predeterminada del rol o la definición sudoers_files definida por el usuario, reemplazando su archivo /etc/sudoers proporcionado por la distribución. Útil para desplegar nuevos archivos de configuración en include_directories sin modificar el archivo /etc/sudoers . |
Verdadero | booleano |
sudoers_remove_unauthorized_included_files | ¡Muy Peligroso! Se eliminará cada archivo sudoer existente en el diccionario include_directories que no esté definido en sudoers_files . Esto permite hacer cumplir un estado deseado. |
Falso | booleano |
sudoers_backup | Si crear o no una copia de seguridad del estado actual del archivo /etc/sudoers existente y de cualquier archivo definido en sudoers_files . Los archivos se respaldan en el nodo de control de Ansible (servidor desde el cual estás ejecutando Ansible) y evita dejar archivos atrás en tus include_directories que puedan ser evaluados por la configuración de sudoers. |
Verdadero | booleano |
sudoers_backup_path | Ruta relativa desde donde estás ejecutando tu playbook para respaldar las copias remotas de los sudoers_files definidos. |
"sudoers_backups" | cadena |
sudoers_backup_become | Si utilizar o no sudo al crear el directorio de respaldo local de sudoers y las copias de seguridad del archivo sudoers. | Verdadero | booleano |
sudoers_visudo_path | Ruta completamente calificada al binario visudo requerido para la validación de los cambios en la configuración de sudoers. Agregado para compatibilidad del sistema operativo. |
"/usr/sbin/visudo" | cadena |
sudoers_files | Definición de todas tus configuraciones de sudoers. | ver defaults/main.yml | lista de diccionarios |
Campos del Diccionario sudoers_files
Nombre de Variable | Descripción | Tipo de Variable |
---|---|---|
path | Dónde desplegar el archivo de configuración en el sistema de archivos. | cadena |
aliases | Definición opcional de elementos cmnd_alias , host_alias , runas_alias o user_alias . |
diccionario |
defaults | Esto te permite definir los valores predeterminados de tu configuración de sudoers. Se pueden realizar anulaciones predeterminadas a través de la clave user_specifications . |
lista |
include_files | Archivos específicos opcionales que te gustaría incluir en tu configuración. Esta es una lista de rutas completamente calificadas para incluir a través de la opción #include de una configuración de sudoers. |
lista |
include_directories | Directorios específicos opcionales que te gustaría que incluyeran tus configuraciones. Esta es una lista de rutas completamente calificadas a directorios para incluir a través de la opción #includedir de una configuración de sudoers. |
lista |
user_specifications | Lista de especificaciones de usuario y anulaciones predeterminadas que aplicar a la configuración del archivo sudoers. | lista |
Campos del Diccionario sudoers_files.aliases
Nombre de Variable | Descripción | Tipo de Variable |
---|---|---|
cmnd_alias | Lista de definiciones de alias de comandos. | lista de diccionarios |
host_alias | Lista de definiciones de alias de host. | lista de diccionarios |
runas_alias | Lista de definiciones de alias de runas. | lista de diccionarios |
user_alias | Lista de definiciones de alias de usuario. | lista de diccionarios |
Campos del Diccionario cmnd_alias
Nombre de Variable | Descripción | Tipo de Variable |
---|---|---|
name | Nombre del alias de comando. | cadena |
commands | Lista de comandos que aplicar al alias. | lista |
Campos del Diccionario host_alias
Nombre de Variable | Descripción | Tipo de Variable |
---|---|---|
name | Nombre del alias de host. | cadena |
hosts | Lista de hosts que aplicar al alias. | lista |
Campos del Diccionario runas_alias
Nombre de Variable | Descripción | Tipo de Variable |
---|---|---|
name | Nombre del alias de runas. | cadena |
users | Lista de usuarios que aplicar al alias. | lista |
Campos del Diccionario user_alias
Nombre de Variable | Descripción | Tipo de Variable |
---|---|---|
name | Nombre del alias de usuario. | cadena |
users | Lista de usuarios que aplicar al alias. | lista |
Campos del Diccionario user_specifications
Este diccionario puede ser utilizado para asignar especificaciones de usuario o anulaciones predeterminadas.
user_specifications estándar
Nombre de Variable | Descripción | Tipo de Variable |
---|---|---|
users | Lista de usuarios a los que aplicar la especificación. Puedes usar un nombre de user_alias así como nombres de usuario. |
lista |
hosts | Lista de hosts a los que aplicar la especificación. Puedes usar un nombre definido de host_alias así como nombres de host. |
lista |
operators | Lista de operadores a los que aplicar la especificación. Puedes usar un nombre de runas_alias definido así como nombres de usuario. |
lista |
selinux_role | Rol de selinux opcional para aplicar a la especificación. | lista |
selinux_type | Tipo de selinux opcional para aplicar a la especificación. | lista |
solaris_privs | Opcional conjunto de privilegios de Solaris para aplicar a la especificación. | lista |
solaris_limitprivs | Opcional conjunto de privilegios de Solaris para aplicar a la especificación. | lista |
tags | Lista opcional de etiquetas para aplicar a la especificación. | lista |
commands | Lista de comandos a aplicar a la especificación. Puedes usar un nombre de cmnd_alias definido así como comandos. |
lista |
user_specifications de anulación predeterminada
Nombre de Variable | Descripción | Tipo de Variable |
---|---|---|
defaults | Lista de valores predeterminados para anular desde la configuración principal. | lista |
type | Tipo de anulación predeterminada, esto afecta al operador en la configuración (host -> @ , user -> : , command -> ! , y runas -> > ). El campo de tipo puede ser uno de los siguientes valores: command , host , runas , o user . |
cadena |
commands | Usar cuando type: "command" . Lista de nombres de cmnd_alias así como comandos para anular valores predeterminados específicos. |
lista |
hosts | Usar cuando type: "host" . Lista de nombres de host_alias así como nombres de host individuales para anular valores predeterminados específicos. |
lista |
operators | Usar cuando type: "runas" . Lista de nombres de runas_alias así como nombres de usuario individuales para anular valores predeterminados específicos. |
lista |
users | Usar cuando type: "user" . Lista de nombres de user_alias así como nombres de usuario individuales para anular valores predeterminados específicos. |
lista |
Generación Automática de los Datos de los Archivos Sudoers a partir de una Configuración Existente
¿Te parece que todo esto es demasiado complicado de configurar desde la documentación? Por favor, revisa y prueba ahuffman.scan_sudoers para encontrar un rol que puede generar automáticamente la estructura de datos adecuada para ti. Con el rol ahuffman.scan_sudoers, puedes tomar una configuración en ejecución en un play y aplicarla en otra con el rol ahuffman.sudoers (versión 2.0.0+). También podrías optar por tomar los datos recopilados y enviarlos a una fuente de verdad como una CMDB o repositorio a través de automatización. Los datos recopilados que genera ahuffman.scan_sudoers y que pueden ser consumidos por ahuffman.sudoers serían {{ ansible_facts['sudoers'].sudoers_files }}
.
Esto debería ayudar a aliviar parte de la complicación de definir manualmente las configuraciones de sudoers como código, y hacer que te pongas en marcha más rápido.
Consulta el Ejemplo de Playbook a continuación.
Ejemplos de Playbooks
Configuración Predeterminada de Sudoers RHEL7.6
- name: "Aplicar una configuración predeterminada de /etc/sudoers RHEL7.6"
hosts: "todos"
roles:
- role: "ahuffman.sudoers"
...o con sintaxis moderna:
- name: "Aplicar una configuración predeterminada de /etc/sudoers RHEL7.6"
hosts: "todos"
tasks:
- name: "Configurar /etc/sudoers"
include_role:
name: "ahuffman.sudoers"
Resultados: /etc/sudoers
Los dos ejemplos anteriores usando los valores predeterminados del rol producirán un archivo de configuración /etc/sudoers
que se verá así:
# Gestión de Ansible
# Especificaciones por defecto
Defaults !visiblepw
Defaults always_set_home
Defaults match_group_by_gid
Defaults always_query_group_plugin
Defaults env_reset
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR"
Defaults env_keep += "LS_COLORS MAIL PS1 PS2 QTDIR"
Defaults env_keep += "USERNAME LANG LC_ADDRESS LC_CTYPE LC_COLLATE"
Defaults env_keep += "LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME"
Defaults env_keep += "LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL"
Defaults env_keep += "LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
# Especificaciones de usuario
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
# Inclusiones
## Directorios incluidos
#includedir /etc/sudoers.d
Configuración de Sudoers (múltiples archivos)
- name: "Aplicar una configuración de sudoers de múltiples archivos"
hosts: "todos"
tasks:
- name: "Configurar /etc/sudoers y archivos incluidos"
include_role:
name: "ahuffman.sudoers"
vars:
sudoers_rewrite_default_sudoers_file: True
sudoers_remove_unauthorized_included_files: True
sudoers_backup: True
sudoers_backup_path: "sudoers-backups"
sudoers_files:
- path: "/etc/sudoers"
defaults:
- "!visiblepw"
- "always_set_home"
- "match_group_by_gid"
- "always_query_group_plugin" # mantiene el comportamiento del grupo previo a sudo 1.8.15
- "env_reset"
- secure_path:
- "/sbin"
- "/bin"
- "/usr/sbin"
- "/usr/bin"
- env_keep:
- "COLORS"
- "DISPLAY"
- "HOSTNAME"
- "HISTSIZE"
- "KDEDIR"
- "LS_COLORS"
- "MAIL"
- "PS1"
- "PS2"
- "QTDIR"
- "USERNAME"
- "LANG"
- "LC_ADDRESS"
- "LC_CTYPE"
- "LC_COLLATE"
- "LC_IDENTIFICATION"
- "LC_MEASUREMENT"
- "LC_MESSAGES"
- "LC_MONETARY"
- "LC_NAME"
- "LC_NUMERIC"
- "LC_PAPER"
- "LC_TELEPHONE"
- "LC_TIME"
- "LC_ALL"
- "LANGUAGE"
- "LINGUAS"
- "_XKB_CHARSET"
- "XAUTHORITY"
user_specifications:
- users:
- "root"
hosts:
- "ALL"
operators:
- "ALL"
commands:
- "ALL"
- users:
- "%wheel"
hosts:
- "ALL"
operators:
- "ALL"
commands:
- "ALL"
include_directories:
- "/etc/sudoers.d"
aliases:
cmnd_alias:
- name: "PING"
commands:
- "/bin/ping"
user_alias:
- name: "PINGERS"
users:
- "ahuffman"
- path: "/etc/sudoers.d/pingers"
user_specifications:
- type: "user"
defaults:
- "!requiretty"
users:
- "PINGERS"
- path: "/etc/sudoers.d/root"
defaults:
- "syslog=auth"
user_specifications:
- type: "runas"
defaults:
- "!set_logname"
operators:
- "root"
El ejemplo anterior producirá los siguientes archivos de configuración:
Resultados: /etc/sudoers
# Gestión de Ansible
# Especificaciones por defecto
Defaults !visiblepw
Defaults always_set_home
Defaults match_group_by_gid
Defaults always_query_group_plugin
Defaults env_reset
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR"
Defaults env_keep += "LS_COLORS MAIL PS1 PS2 QTDIR"
Defaults env_keep += "USERNAME LANG LC_ADDRESS LC_CTYPE LC_COLLATE"
Defaults env_keep += "LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME"
Defaults env_keep += "LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL"
Defaults env_keep += "LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
# Especificaciones de Alias
## Alias de Comandos
Cmnd_Alias PING = /bin/ping
## Alias de Usuarios
User_Alias PINGERS = ahuffman
# Especificaciones de usuario
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
# Inclusiones
## Directorios incluidos
#includedir /etc/sudoers.d
Resultados: /etc/sudoers.d/pingers
# Gestión de Ansible
# Especificaciones de anulación predeterminada
Defaults:PINGERS !requiretty
Resultados: /etc/sudoers.d/root
# Gestión de Ansible
# Especificaciones por defecto
Defaults syslog=auth
# Especificaciones de anulación predeterminada
Defaults>root !set_logname
Migrando una Configuración de Sudoers en Ejecución a Otro Host
---
- name: "Recopilar hechos de Sudoers existentes"
hosts: "source-host"
tasks:
- name: "Recopilar configuración de Sudoers en ejecución"
include_role:
name: "ahuffman.scan_sudoers"
- name: "Establecer hechos de Sudoers recopilados"
set_fact:
sudoers_files: "{{ ansible_facts['sudoers'].sudoers_files }}"
- name: "Mostrar hechos de configuración de Sudoers recopilados"
debug:
var: "sudoers_files"
verbosity: "1"
- name: "Desplegar configuración en ejecución al objetivo"
hosts: "destination-host"
tasks:
- include_role:
name: "ahuffman.sudoers"
vars:
sudoers_remove_unauthorized_included_files: True
El ejemplo anterior proporciona un método de usar Infraestructura-como-Código en reversa para tomar una configuración conocida, convertirla en datos estructurados y dirigir la automatización futura. Alternativamente a aprovisionar directamente la configuración recopilada en un nuevo host, podrías enviar los datos a una CMDB o repositorio para su uso futuro como fuente de verdad.
Licencia
Información del Autor
Controls the configuration of the default /etc/sudoers file and included files/directories
ansible-galaxy install ahuffman.sudoers