ahuffman.sudoers

Rôle Ansible

ahuffman.sudoers

Contrôle la configuration du fichier par défaut /etc/sudoers ainsi que des fichiers/dossiers inclus.


Veuillez noter que la version 2.0.0+ est une réécriture majeure du rôle. Veuillez lire la documentation pour comprendre les changements avant l'installation et l'utilisation si vous venez des versions antérieures.


Table des matières

  1. Table des matières
  2. Astuces
  3. Variables du rôle
  4. Champs du dictionnaire sudoers_files
    1. Champs du dictionnaire sudoers_files.aliases
      1. Champs du dictionnaire cmnd_alias
      2. Champs du dictionnaire host_alias
      3. Champs du dictionnaire runas_alias
      4. Champs du dictionnaire user_alias
    2. Champs du dictionnaire user_specifications
      1. Spécifications standard user_specifications
      2. Spécifications de remplacement par défaut user_specifications
  5. Génération automatique des données des fichiers sudoers à partir d'une configuration existante
  6. Exemples de playbooks
    1. Configuration sudoers par défaut RHEL7.6
      1. Résultats : /etc/sudoers
    2. Configuration sudoers (fichiers multiples)
      1. Résultats : /etc/sudoers
      2. Résultats : /etc/sudoers.d/pingers
      3. Résultats : /etc/sudoers.d/root
    3. Migration d'une configuration sudoers active vers un autre hôte
  7. Licence
  8. Informations sur l'auteur

Astuces

Astuce : Voici quelques excellentes ressources sur la configuration des sudoers :
Commencez ici - Fournit un bon aperçu des configurations de fichiers sudoers de base et de la terminologie
Manuel de sudoers - Si vous voulez connaître tous les détails, c'est pour vous.

Variables du rôle

Les valeurs par défaut définies pour ce rôle sont basées sur une configuration par défaut de /etc/sudoers pour RHEL7.6. Veuillez vérifier les valeurs par défaut dans defaults/main.yml avant de l'exécuter pour la compatibilité avec votre OS.

Nom de la variable Description Valeur par défaut Type de variable
sudoers_rewrite_default_sudoers_file Utilise les valeurs par défaut du rôle ou les définitions sudoers_files définies par l'utilisateur, remplaçant votre fichier /etc/sudoers fourni par la distribution. Utile lors du déploiement de nouveaux fichiers de configuration dans les include_directories sans modifier le fichier /etc/sudoers. True boolean
sudoers_remove_unauthorized_included_files Très dangereux! Chaque fichier sudoer existant trouvé dans le dictionnaire include_directories qui n'a pas été défini dans sudoers_files sera supprimé. Cela permet de forcer un état souhaité. False boolean
sudoers_backup Indique s'il faut ou non créer une sauvegarde de l'état actuel du fichier /etc/sudoers existant ainsi que de tous les fichiers définis dans sudoers_files. Les fichiers sont sauvegardés sur le nœud de contrôle Ansible (Serveur depuis lequel vous exécutez Ansible) pour éviter de laisser accidentellement des fichiers dans vos include_directories susceptibles d'être évalués par la configuration sudoers. True boolean
sudoers_backup_path Chemin relatif à l'endroit où vous exécutez votre playbook pour sauvegarder les copies distantes des sudoers_files définis. "sudoers_backups" string
sudoers_backup_become Indique s'il faut utiliser sudo lors de la création du répertoire de sauvegarde local de sudoers et des sauvegardes de fichiers sudoers True boolean
sudoers_visudo_path Chemin entièrement qualifié vers le binaire visudo requis pour valider les changements de configuration des sudoers. Ajouté pour la compatibilité avec le système d'exploitation. "/usr/sbin/visudo" string
sudoers_files Définition de toutes vos configurations sudoers voir defaults/main.yml liste de dictionnaires

Champs du dictionnaire sudoers_files

Nom de la variable Description Type de variable
path Où déployer le fichier de configuration sur le système de fichiers. string
aliases Définition optionnelle des éléments cmnd_alias, host_alias, runas_alias, ou user_alias. dictionnaire
defaults Permet de définir les valeurs par défaut de votre configuration sudoers. Des remplacements par défaut peuvent être effectués via la clé user_specifications. liste
include_files Fichiers spécifiques optionnels que vous souhaitez inclure dans votre configuration. C'est une liste de chemins entièrement qualifiés à inclure via l'option #include d'une configuration sudoers. liste
include_directories Répertoires spécifiques optionnels que vous souhaitez inclure dans vos configurations. C'est une liste de chemins entièrement qualifiés vers les répertoires à inclure via l'option #includedir d'une configuration sudoers. liste
user_specifications Liste des spécifications utilisateur et des remplacements par défaut à appliquer à une configuration de fichier sudoers. liste

Champs du dictionnaire sudoers_files.aliases

Nom de la variable Description Type de variable
cmnd_alias Liste des définitions d'alias de commande. liste de dictionnaires
host_alias Liste des définitions d'alias d'hôte liste de dictionnaires
runas_alias Liste des définitions d'alias runas liste de dictionnaires
user_alias Liste des définitions d'alias utilisateur liste de dictionnaires

Champs du dictionnaire cmnd_alias

Nom de la variable Description Type de variable
name Nom de l'alias de commande. string
commands Liste des commandes à appliquer à l'alias liste

Champs du dictionnaire host_alias

Nom de la variable Description Type de variable
name Nom de l'alias d'hôte. string
hosts Liste des hôtes à appliquer à l'alias liste

Champs du dictionnaire runas_alias

Nom de la variable Description Type de variable
name Nom de l'alias runas string
users Liste des utilisateurs à appliquer à l'alias liste

Champs du dictionnaire user_alias

Nom de la variable Description Type de variable
name Nom de l'alias utilisateur string
users Liste des utilisateurs à appliquer à l'alias liste

Champs du dictionnaire user_specifications

Ce dictionnaire peut être utilisé pour attribuer soit des spécifications utilisateur, soit des remplacements par défaut.

Spécifications standard user_specifications

Nom de la variable Description Type de variable
users Liste des utilisateurs à appliquer à la spécification. Vous pouvez utiliser un nom d'alias utilisateur ainsi que des noms d'utilisateur. liste
hosts Liste des hôtes à appliquer à la spécification. Vous pouvez utiliser un nom d'alias d'hôte défini ainsi que des noms d'hôte. liste
operators Liste des opérateurs à appliquer à la spécification. Vous pouvez utiliser un nom d'alias runas défini ainsi que des noms d'utilisateur. liste
selinux_role Rôle selinux optionnel à appliquer à la spécification liste
selinux_type Type selinux optionnel à appliquer à la spécification liste
solaris_privs Privileges Solaris optionnels à appliquer à la spécification liste
solaris_limitprivs Privileges Solaris optionnels à appliquer à la spécification liste
tags Liste optionnelle de tags à appliquer à la spécification. liste
commands Liste des commandes à appliquer à la spécification. Vous pouvez utiliser un nom d'alias cmnd défini ainsi que des commandes. liste

Remplacements par défaut user_specifications

Nom de la variable Description Type de variable
defaults Liste des valeurs par défaut à remplacer à partir de la configuration principale liste
type Type de remplacement par défaut, cela affecte l'opérateur dans la configuration ( hôte -> @, utilisateur -> :, commande -> !, et runas -> >). Le champ type peut être l'une des valeurs suivantes : command, host, runas, ou user. string
commands À utiliser lorsque type: "command". Liste de noms d'alias cmnd ainsi que des commandes pour remplacer des valeurs par défaut spécifiques. liste
hosts À utiliser lorsque type: "host". Liste de noms d'alias host ainsi que des noms d'hôtes individuels pour remplacer des valeurs par défaut spécifiques. liste
operators À utiliser lorsque type: "runas". Liste de noms d'alias runas ainsi que des noms d'utilisateur individuels pour remplacer des valeurs par défaut spécifiques. liste
users À utiliser lorsque type: "user". Liste de noms d'alias user ainsi que des noms d'utilisateur individuels pour remplacer des valeurs par défaut spécifiques. liste

Génération automatique des données des fichiers sudoers à partir d'une configuration existante

Cela semble-t-il trop compliqué à configurer selon la documentation ? Veuillez vérifier et essayer ahuffman.scan_sudoers pour trouver un rôle qui peut générer automatiquement la structure de données appropriée pour vous. Avec le rôle ahuffman.scan_sudoers, vous pouvez prendre une configuration active dans un play et l'appliquer sur un autre avec le rôle ahuffman.sudoers (version 2.0.0+). Vous pourriez aussi choisir de prendre les données collectées et de les pousser dans une source de vérité telle qu'un CMDB ou un dépôt via l'automatisation. Les données collectées générées par ahuffman.scan_sudoers et pouvant être utilisées par ahuffman.sudoers seraient {{ ansible_facts['sudoers'].sudoers_files }}.

Cela devrait vous aider à réduire la complexité de la définition manuelle des configurations sudoers en tant que code, et vous faire gagner beaucoup de temps.

Voir l'Exemple de Playbook ci-dessous.

Exemples de playbooks

Configuration sudoers par défaut RHEL7.6

- name: "Appliquer une configuration sudoers par défaut RHEL7.6 /etc/sudoers"
  hosts: "all"
  roles:
    - role: "ahuffman.sudoers"

...ou avec une syntaxe moderne :

- name: "Appliquer une configuration sudoers par défaut RHEL7.6 /etc/sudoers"
  hosts: "all"
  tasks:
    - name: "Configurer /etc/sudoers"
      include_role:
        name: "ahuffman.sudoers"

Résultats : /etc/sudoers

Les deux exemples ci-dessus utilisant les valeurs par défaut du rôle produiront un fichier de configuration /etc/sudoers comme ceci :

# Géré par Ansible

# Spécifications par défaut
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"

# Spécifications utilisateur
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL

# Inclus
## Répertoires inclus
#includedir /etc/sudoers.d

Configuration sudoers (fichiers multiples)

- name: "Appliquer une configuration sudoers multi-fichiers"
  hosts: "all"
  tasks:
    - name: "Configurer /etc/sudoers et les fichiers inclus"
      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" # maintient le comportement de groupe sudo pré-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"

L'exemple ci-dessus produira les fichiers de configuration suivants :

Résultats : /etc/sudoers

# Géré par Ansible

# Spécifications par défaut
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"

# Spécifications d'alias
## Alias de commande
Cmnd_Alias    PING = /bin/ping

## Alias d'utilisateur
User_Alias    PINGERS = ahuffman

# Spécifications utilisateur
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL

# Inclus
## Répertoires inclus
#includedir /etc/sudoers.d

Résultats : /etc/sudoers.d/pingers

# Géré par Ansible

# Spécifications de remplacement par défaut
Defaults:PINGERS !requiretty

Résultats : /etc/sudoers.d/root

# Géré par Ansible

# Spécifications par défaut
Defaults    syslog=auth


# Spécifications de remplacement par défaut
Defaults>root !set_logname

Migration d'une configuration sudoers active vers un autre hôte

---
- name: "Collecter les faits sudoers existants"
  hosts: "source-host"
  tasks:
    - name: "Collecter la configuration sudoers active"
      include_role:
        name: "ahuffman.scan_sudoers"

    - name: "Définir les faits sudoers collectés"
      set_fact:
        sudoers_files: "{{ ansible_facts['sudoers'].sudoers_files }}"

    - name: "Afficher les faits de configuration sudoers collectés"
      debug:
        var: "sudoers_files"
        verbosity: "1"

- name: "Déployer la configuration active sur la cible"
  hosts: "destination-host"
  tasks:
    - include_role:
        name: "ahuffman.sudoers"
      vars:
        sudoers_remove_unauthorized_included_files: True

L'exemple ci-dessus fournit une méthode d'utilisation de l'Infrastructure-as-Code à l'envers pour prendre une configuration connue convertie en données structurées pour alimenter l'automatisation future. Au lieu de provisionner directement la configuration collectée sur un nouvel hôte, vous pourriez pousser les données dans un CMDB ou un dépôt pour un usage futur comme source de vérité.

Licence

MIT

Informations sur l'auteur

Andrew J. Huffman
Tyler Cross

À propos du projet

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

Installer
ansible-galaxy install ahuffman.sudoers
Licence
mit
Téléchargements
34.8k
Propriétaire