
ansible.builtin.group: gère les groupes Linux — création, suppression, forçage du GID. Module compagnon de user: : on crée d’abord les groupes, puis on rattache les utilisateurs.
Trois options principales : name:, state:, gid: (et system: true pour les groupes système avec GID < 1000).
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Créer un groupe simple ou avec GID forcé (cohérence multi-hôtes).
- Distinguer un groupe utilisateur (GID ≥ 1000) d’un groupe système (
system: true). - Comprendre pourquoi la suppression d’un groupe primaire échoue.
- Ordonner correctement :
group:AVANTuser:qui le référence.
Prérequis
Section intitulée « Prérequis »- Comprendre le concept de groupe primaire vs groupes secondaires sous Linux.
Création basique
Section intitulée « Création basique »- name: Creer le groupe dev-team ansible.builtin.group: name: dev-team state: presentgroupadd dev-team est exécuté. Le GID est auto-attribué (premier libre ≥ 1000). Idempotent : 2e run → ok.
GID forcé pour la cohérence multi-hôtes
Section intitulée « GID forcé pour la cohérence multi-hôtes »- name: Groupe avec GID 4000 force ansible.builtin.group: name: rhce-shared gid: 4000 state: presentPourquoi forcer le GID ?
- NFS : un fichier
gid=4000côté serveur n’est lisible côté client que si le client a aussigid=4000. - Containers : les volumes partagés entre hôte et conteneur exigent les mêmes IDs.
- Audit : comparer les GIDs entre hôtes pour détecter une divergence.
Si le GID est déjà pris par un autre groupe, la tâche failed — pas de collision silencieuse.
Groupes système (system: true)
Section intitulée « Groupes système (system: true) »- name: Groupe applicatif systeme (GID < 1000) ansible.builtin.group: name: myapp-system system: true state: presentsystem: true demande un GID auto-attribué dans la plage système (< 1000 par convention RHEL). Sans cette option, le GID auto-attribué est ≥ 1000 (groupe utilisateur).
Cas d’usage : groupe applicatif réservé au démon (nginx, postgres, myapp). On ne veut pas qu’il soit confondu avec un groupe utilisateur normal — la différence d’UID/GID est un signal visuel pour les administrateurs.
Ordonnancement : group: AVANT user:
Section intitulée « Ordonnancement : group: AVANT user: »Pattern correct :
- name: Step 1 — creer le groupe ansible.builtin.group: name: rhce-team gid: 5000
- name: Step 2 — creer alice avec rhce-team comme primaire ansible.builtin.user: name: alice group: rhce-team # Le groupe DOIT exister avantSi vous inversez l’ordre : user: crée alice avec un groupe rhce-team auto-généré (GID 1001 ou autre). Puis group: gid: 5000 essaie de créer le groupe avec un GID différent → conflit ou incohérence.
Convention RHCE : dans un même play, ordonner :
group:(création des groupes nécessaires).user:(création des users qui les utilisent).authorized_key:(clés SSH).sudoers:(droits sudo).
Suppression : la protection du groupe primaire
Section intitulée « Suppression : la protection du groupe primaire »- name: Supprimer dev-team ansible.builtin.group: name: dev-team state: absentSi un utilisateur a dev-team comme groupe primaire, la tâche failed :
groupdel: cannot remove the primary group of user 'carl'C’est une protection système — Linux refuse de laisser un utilisateur sans groupe primaire valide.
Solution : réassigner d’abord :
- name: Reassigner carl a un autre groupe primaire ansible.builtin.user: name: carl group: nogroup
- name: Maintenant supprimer dev-team ansible.builtin.group: name: dev-team state: absentLe piège : modifier le GID d’un groupe existant
Section intitulée « Le piège : modifier le GID d’un groupe existant »- name: Tenter de changer le GID ansible.builtin.group: name: ops-team gid: 3500 # Avant : 3000La tâche réussit (groupmod -g 3500 ops-team). Mais tous les fichiers appartenant à gid=3000 sont maintenant orphelins :
# Avant changement$ ls -la /home/alice/data-rw-r--r-- 1 alice ops-team 0 ... data
# Apres changement$ ls -la /home/alice/data-rw-r--r-- 1 alice 3000 0 ... data # Plus de nom !Règle : ne jamais modifier un GID en production. Si nécessaire :
- Supprimer le groupe.
- Recréer avec le nouveau GID.
chgrp -Rsur tous les fichiers concernés.
Pièges courants
Section intitulée « Pièges courants »| Symptôme | Cause | Fix |
|---|---|---|
| Conflit GID entre hôtes | Pas de gid: forcé | Forcer gid: sur les groupes partagés (NFS, containers) |
groupdel failed (primaire) | User a ce groupe comme primaire | Réassigner d’abord avec user: group: |
| Fichiers orphelins après modif | Modification du gid: sur groupe existant | Ne jamais modifier — supprimer + recréer + chgrp |
| Groupe applicatif avec GID > 1000 | Oubli de system: true | Ajouter system: true à la création |
À retenir
Section intitulée « À retenir »gid:forcé pour la cohérence multi-hôtes (NFS, containers, audit).system: truepour les groupes applicatifs / système (GID < 1000).- Ordonner :
group:AVANTuser:qui le référence. - Suppression d’un groupe primaire d’un user → failed. Réassigner d’abord.
- Ne pas modifier le GID d’un groupe existant — fichiers orphelins.
Pratiquer dans le lab
Section intitulée « Pratiquer dans le lab »Cette page a un lab d’accompagnement : labs/modules-utilisateurs/group/ dans stephrobert/ansible-training.
Challenge — sur db1.lab :
- Créer 3 groupes avec GIDs forcés (
rhce-sharedGID 4000,rhce-adminsGID 4001,rhce-readonlyGID 4002). - Créer un groupe système
myapp-system(system: true).
Validation pytest+testinfra :
ansible-playbook solution.ymlpytest -v labs/modules-utilisateurs/group/challenge/tests/4 tests vérifient les GIDs forcés et le caractère “système” du dernier groupe.