Turgon37.sudoers

Ansible Role Sudo/Sudoers

Estado de Construcción Licencia Rol de Ansible

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
Acerca del proyecto

This role configure sudoers file

Instalar
ansible-galaxy install Turgon37.sudoers
Licencia
mit
Descargas
4.8k
Propietario
Ingénieur, Informaticien, curieux de nouvelles technologies. Passionné par le libre et l'esprit de communauté