Turgon37.sudoers
Ansible Role Sudo/Sudoers
Descripción
:grey_exclamation: Antes de usar este rol, ten en cuenta que todos mis roles de Ansible están completamente escritos y adaptados a mi infraestructura de TI. Así que, aunque sean lo más genéricos posible, no necesariamente cubrirán tus necesidades. Te aconsejo que analices cuidadosamente lo que hacen y evalúes su capacidad para ser instalados de manera segura en tus servidores.
Este rol configura sudo
Requisitos
Requiere Ansible >= 2.4
Dependencias
Familia de Sistemas Operativos
Este rol está disponible para Debian y CentOS
Características
Hoy en día, el rol se puede usar para:
- instalar sudo
- configurar valores y reglas por defecto
- proporcionar un pseudo "tipo" para permitir que otros roles incluyan reglas de sudo
- factores locales
Configuración
Rol
Todas las variables que se pueden sobrescribir están almacenadas en el archivo defaults/main.yml, así como en la tabla a continuación. Para ver los valores predeterminados, consulta este archivo.
Nombre | Tipos/Valores | Descripción |
---|---|---|
sudoers__sss |
Booleano | Instala paquetes necesarios para usar sudo con el backend sss |
sudoers__defaults_(global/group/host) |
Lista de dict/string | Declara configuraciones predeterminadas para sudoers a nivel de rol |
sudoers__purge |
Booleano | Si es verdadero, todas las reglas de sudo no manejadas directamente por este rol serán eliminadas |
sudoers__ansible_managed_key |
Cadena | La cadena utilizada para identificar qué reglas de sudo están gestionadas por ansible |
sudoers__rules_(global/group/host) |
Diccionario de reglas | Las reglas de sudoers que se aplicarán a nivel de rol |
Regla de Sudo
Este rol proporciona un pseudo "tipo" que puedes usar desde otro rol. Esto permite que este otro rol declare un conjunto de reglas de sudo fuera del alcance de este rol de sudoers y después de su aplicación en el playbook.
Para usarlo, simplemente declara una tarea como esta:
- name: Configurar regla de sudoers para ROLE
include_role:
name: sudoers
tasks_from: types/sudo_rule
vars:
sudoers__sudo_rule: {}
Todos los elementos de configuración de reglas deben estar bajo la variable llamada sudoers__sudo_rule
.
Nombre | Tipos/Valores | Descripción |
---|---|---|
name |
Cadena | El nombre del archivo de regla (no debe contener espacios) |
state |
Enum ausente/presente | El estado de la regla para eliminar si es necesario |
defaults |
Lista de valores (ver abajo) | La lista de directivas 'defaults' de sudoers para aplicar en esta regla. Ten en cuenta que estas serán efectivas para toda la configuración de ejecución de sudo, no solo para esta regla |
users |
Lista de cadenas | Lista de usuarios para los cuales se aplicará esta regla |
hosts |
Lista de cadenas | Lista opcional de hosts sobre los cuales se aplicará esta regla, por defecto es TODO |
commands |
Lista de comandos (ver abajo) | Lista de definiciones de comandos |
comment |
Cadena | Comentario opcional para incluir en el archivo |
Directiva "defaults"
Debido a que la directiva "defaults" de sudo puede tomar un valor opcional, ansible admite dos formas para cada directiva bajo la clave defaults:
Defaults always_set_home
Defaults listpw = always
- una cadena simple
- un mapeo
La versión de cadena es la más sencilla de usar porque la cadena se colocará directamente después de la palabra clave de sudo Defaults.
La versión de mapeo permite una configuración más precisa. Primero, ten en cuenta que la directiva Defaults de sudo admite filtrado por host, usuario, comando y runas. Pero solo puedes elegir una condición de filtro para una directiva por defecto. Así que este rol de ansible utilizará el orden de las claves anteriores como orden de prioridad si estableces múltiples claves de filtrado.
Si la directiva requiere un valor, debes establecer el nombre de la directiva como una clave del mapeo y su valor asociado como el valor de la clave. Si la directiva solo requiere su nombre (como requiretty), debes (es una limitación) poner la palabra estática "defaults" como clave, y el nombre de la directiva como el valor.
Por ejemplo, para aplicar "requiretty" al usuario1, establece las siguientes variables:
sudoers__sudo_rule:
name: rule1
defaults:
- defaults: requiretty
user: user1
Y para aplicar "listpw", se establece:
sudoers__sudo_rule:
name: rule1
defaults:
- listpw: always
user: user1
Para resumir, todas estas claves de diccionario están disponibles dentro de una especificación de defaults:
Nombre | Uso |
---|---|
defaults: NAME |
Para directivas sin valor |
NAME: VALUE |
Para directivas con valor |
host: HOST |
Para restringir efecto de Defaults en un host específico |
user: USER |
Para restringir efecto de Defaults en un usuario específico |
command: COMMAND |
Para restringir efecto de Defaults en un comando específico |
runas: RUNAS_USER |
Para restringir efecto de Defaults en un usuario runas específico |
Directiva "commands"
Cada comando bajo la clave commands permite al usuario ejecutar un comando del sistema con o sin restricciones.
Un bloque de comando permite las siguientes claves:
Nombre | Tipos/Valores | Uso |
---|---|---|
commands: |
Cadena o lista de cadenas | Patrones de comandos, ver man 5 sudoers para especificación de sintaxis |
run_as_user: |
Cadena o lista de cadenas | Este/estos comandos (línea anterior) solo deben ser ejecutados como este/estos usuario/s |
run_as_group: |
Cadena o lista de cadenas | Este/estos comandos (línea anterior) solo deben ser ejecutados como este/estos grupo/s |
tags |
Cadena o lista de cadenas | Etiqueta o lista de etiquetas a aplicar en este comando |
Por ejemplo, para permitir que el usuario "user1" ejecute ls en cualquier lugar como usuario root sin tener que escribir la contraseña:
sudoers__sudo_rule:
name: rule1
commands:
- commands: /bin/ls
run_as_user: user1
run_as_group: root
tags: NOPASSWD
Factores
Por defecto, el factor local se instala y expone las siguientes variables:
ansible_local.sudoers.version_full
ansible_local.sudoers.version_major
Ejemplo
Playbook
Úsalo en un playbook de la siguiente manera:
- hosts: all
roles:
- turgon37.sudoers
Inventario
- Declara tus configuraciones por defecto
sudoers__defaults_global:
- always_set_home
- insults
- listpw: always
- mailsub: "[PRODUCCIÓN][%h][SEGURIDAD SUDO]"
- mailto: [email protected]
- mail_no_user
- mail_no_perms
- mail_no_host
- mail_badpass
- passprompt_override
- pwfeedback
- secure_path: /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
- '!visiblepw'
- Uso con sssd
# Requerido para que sudo recupere reglas de LDAP
sudoers__sss: true
- Declara reglas de sudo desde otro rol
- name: Configurar regla de sudoers para ROLE
include_role:
name: sudoers
tasks_from: types/sudo_rule
vars:
sudoers__sudo_rule:
name: role__autogenerated_rule_10
remove_using_regexp:
- role__autogenerated_rule_0[0-9]+
force_remove_using_regexp: true
users: '{{ role__user }}'
hosts: ALL
comment: Regla generada automáticamente para el rol
commands:
- commands: /bin/ls
run_as_user: '{{ role__another_user }}'
run_as_group: root
tags: NOPASSWD
- commands: /bin/cat /home/[a-zA-Z]*/.ssh/config
run_as_user: ALL
run_as_group: root
defaults:
- defaults: '!requiretty'
user: '{{ role__user }}'
state: present
ansible-galaxy install Turgon37.sudoers