Turgon37.sudoers
Rôle Ansible Sudo/Sudoers
Description
:grey_exclamation: Avant d'utiliser ce rôle, veuillez noter que tous mes rôles Ansible sont entièrement écrits et adaptés à mon infrastructure informatique. Donc, même s'ils sont aussi généraux que possible, ils ne répondront pas nécessairement à vos besoins. Je vous conseille d'analyser soigneusement ce qu'ils font et d'évaluer leur capacité à être installés en toute sécurité sur vos serveurs.
Ce rôle configure sudo.
Exigences
Nécessite Ansible >= 2.4
Dépendances
Famille OS
Ce rôle est disponible pour Debian et CentOS.
Fonctionnalités
À ce jour, le rôle peut être utilisé pour :
- installer sudo
- configurer les valeurs par défaut et les règles de commande
- fournir un pseudo "type" pour permettre à d'autres rôles d'inclure des règles sudo
- faits locaux
Configuration
Rôle
Toutes les variables qui peuvent être remplacées sont stockées dans le fichier defaults/main.yml ainsi que dans le tableau ci-dessous. Pour voir les valeurs par défaut, veuillez vous référer à ce fichier.
Nom | Types/Valeurs | Description |
---|---|---|
sudoers__sss |
Booléen | Installer les paquets nécessaires pour utiliser sudo avec le backend sss |
sudoers__defaults_(global/groupe/hôte) |
Liste de dict/string | Déclarer les paramètres par défaut pour sudoers au niveau du rôle |
sudoers__purge |
Booléen | Si vrai, toutes les règles sudo non gérées directement par ce rôle seront supprimées |
sudoers__ansible_managed_key |
Chaîne | La chaîne utilisée pour identifier quelles règles sudo sont gérées par ansible |
sudoers__rules_(global/groupe/hôte) |
Dictionnaire de règles | Les règles sudo à appliquer au niveau du rôle |
Règle sudo
Ce rôle fournit un pseudo "type" que vous pouvez utiliser depuis un autre rôle. Cela permet à cet autre rôle de déclarer un ensemble de règles sudo en dehors de la portée de ce rôle sudoers, et après son application dans le playbook.
Pour l'utiliser, déclarez une tâche comme ceci :
- name: Configurer la règle sudoers pour ROLE
include_role:
name: sudoers
tasks_from: types/sudo_rule
vars:
sudoers__sudo_rule: {}
Tous les éléments de configuration de la règle doivent être sous la variable nommée sudoers__sudo_rule
.
Nom | Types/Valeurs | Description |
---|---|---|
name |
Chaîne | Le nom du fichier de règle (ne doit pas contenir d'espace) |
state |
Enum absent/présent | L'état de la règle à supprimer si nécessaire |
defaults |
Liste de défauts (voir ci-dessous) | La liste des directives par défaut de sudoers à appliquer dans cette règle. Notez que celles-ci seront efficaces pour toute la configuration d'exécution de sudo, pas seulement pour cette règle |
users |
Liste de chaînes | Liste des utilisateurs pour lesquels cette règle s'appliquera |
hosts |
Liste de chaînes | Liste optionnelle des hôtes sur lesquels cette règle s'appliquera, par défaut sur TOUS |
commands |
Liste de commandes (voir ci-dessous) | Liste des définitions de commande |
comment |
Chaîne | Commentaire optionnel à inclure dans le fichier |
Directive "defaults"
Comme la directive "defaults" de sudo peut prendre des valeurs optionnelles, ansible prend en charge deux formes pour chaque directive defaults sous la clé defaults :
Defaults always_set_home
Defaults listpw = always
- une chaîne simple
- un mapping
La version chaîne est la plus simple à utiliser car la chaîne sera simplement placée après le mot-clé sudo Defaults.
La version mapping permet un réglage plus fin. Tout d'abord, sachez que la directive Defaults de sudo prend en charge le filtrage par hôte, utilisateur, commande et exécution. Mais vous ne pouvez choisir qu'une seule condition de filtre pour une directive default. Donc, ce rôle Ansible utilisera l'ordre des clés précédentes comme ordre de priorité si vous définissez plusieurs clés de filtrage.
Si la directive nécessite une valeur, vous devez définir le nom de la directive comme clé du mapping et sa valeur associée comme valeur de la clé.
Sinon, si la directive nécessite seulement son nom (comme requiretty), vous devez (c'est une limitation) mettre le mot statique "defaults" comme clé, et le nom de la directive comme valeur.
Par exemple, pour appliquer "requiretty" à l'utilisateur user1, définissez les variables suivantes :
sudoers__sudo_rule:
name: rule1
defaults:
- defaults: requiretty
user: user1
Et pour appliquer "listpw", définissez :
sudoers__sudo_rule:
name: rule1
defaults:
- listpw: always
user: user1
Pour résumer, toutes ces clés de dictionnaire sont disponibles dans une spécification de défauts :
Nom | Utilisation |
---|---|
defaults: NAME |
Pour les directives sans valeur |
NAME: VALUE |
Pour les directives avec valeur |
host: HOST |
Pour restreindre l'effet des Defaults à un hôte spécifié |
user: USER |
Pour restreindre l'effet des Defaults à un utilisateur spécifié |
command: COMMAND |
Pour restreindre l'effet des Defaults à une commande spécifiée |
runas: RUNAS_USER |
Pour restreindre l'effet des Defaults à un utilisateur runas spécifié |
Directive "commands"
Chaque commande sous la clé commands permet à l'utilisateur d'exécuter une commande système avec ou sans restrictions.
Un bloc de commande permet les clés suivantes :
Nom | Types/Valeurs | Utilisation |
---|---|---|
commands: |
Chaîne ou liste de chaînes | Modèle(s) de commande, voir man 5 sudoers pour la spécification de syntaxe |
run_as_user: |
Chaîne ou liste de chaînes | Cette/ces commande(s) (ligne ci-dessus) doit uniquement être exécutée(s) par cet(te/s) utilisateur(s) |
run_as_group: |
Chaîne ou liste de chaînes | Cette/ces commande(s) (ligne ci-dessus) doit uniquement être exécutée(s) par ce groupe/ces groupes |
tags |
Chaîne ou liste de chaînes | Tag ou liste de tags à appliquer à cette commande |
Par exemple, pour permettre à l'utilisateur "user1" d'exécuter ls n'importe où en tant qu'utilisateur root sans taper de mot de passe :
sudoers__sudo_rule:
name: rule1
commands:
- commands: /bin/ls
run_as_user: user1
run_as_group: root
tags: NOPASSWD
Faits
Par défaut, les faits locaux sont installés et exposent les variables suivantes :
ansible_local.sudoers.version_full
ansible_local.sudoers.version_major
Exemple
Playbook
Utilisez-le dans un playbook comme suit :
- hosts: all
roles:
- turgon37.sudoers
Inventaire
- Déclarez vos paramètres par défaut
sudoers__defaults_global:
- always_set_home
- insults
- listpw: always
- mailsub: "[PRODUCTION][%h][SÉCURITÉ SUDO]"
- mailto: admin@example.com
- 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'
- Utilisation avec sssd
# Nécessaire pour que sudo récupère les règles à partir de LDAP
sudoers__sss: true
- Déclarez des règles sudo depuis un autre rôle
- name: Configurer la règle sudoers pour 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: Règle générée automatiquement pour le rôle
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