ahuffman.sudoers

Ansible Role

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

  1. Tabla de Contenidos
  2. Consejos
  3. Variables del Rol
  4. Campos del Diccionario sudoers_files
    1. Campos del Diccionario sudoers_files.aliases
      1. Campos del Diccionario cmnd_alias
      2. Campos del Diccionario host_alias
      3. Campos del Diccionario runas_alias
      4. Campos del Diccionario user_alias
    2. Campos del Diccionario user_specifications
      1. user_specifications estándar
      2. user_specifications de anulación predeterminada
  5. Generación Automática de los Datos de los Archivos Sudoers a partir de una Configuración Existente
  6. Ejemplos de Playbooks
    1. Configuración Predeterminada de Sudoers RHEL7.6
      1. Resultados: /etc/sudoers
    2. Configuración de Sudoers (múltiples archivos)
      1. Resultados: /etc/sudoers
      2. Resultados: /etc/sudoers.d/pingers
      3. Resultados: /etc/sudoers.d/root
    3. Migrando una Configuración de Sudoers en Ejecución a Otro Host
  7. Licencia
  8. 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

MIT

Información del Autor

Andrew J. Huffman
Tyler Cross

Acerca del proyecto

Controls the configuration of the default /etc/sudoers file and included files/directories

Instalar
ansible-galaxy install ahuffman.sudoers
Licencia
mit
Descargas
34.8k
Propietario