Aller au contenu
Infrastructure as Code medium

Module group Ansible : gérer les groupes Linux

6 min de lecture

Logo Ansible

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).

  • 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: AVANT user: qui le référence.
  • Comprendre le concept de groupe primaire vs groupes secondaires sous Linux.
- name: Creer le groupe dev-team
ansible.builtin.group:
name: dev-team
state: present

groupadd dev-team est exécuté. Le GID est auto-attribué (premier libre ≥ 1000). Idempotent : 2e run → ok.

- name: Groupe avec GID 4000 force
ansible.builtin.group:
name: rhce-shared
gid: 4000
state: present

Pourquoi forcer le GID ?

  • NFS : un fichier gid=4000 côté serveur n’est lisible côté client que si le client a aussi gid=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.

- name: Groupe applicatif systeme (GID < 1000)
ansible.builtin.group:
name: myapp-system
system: true
state: present

system: 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.

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 avant

Si 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érentconflit ou incohérence.

Convention RHCE : dans un même play, ordonner :

  1. group: (création des groupes nécessaires).
  2. user: (création des users qui les utilisent).
  3. authorized_key: (clés SSH).
  4. sudoers: (droits sudo).
- name: Supprimer dev-team
ansible.builtin.group:
name: dev-team
state: absent

Si 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: absent

Le 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 : 3000

La tâche réussit (groupmod -g 3500 ops-team). Mais tous les fichiers appartenant à gid=3000 sont maintenant orphelins :

Fenêtre de terminal
# 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 :

  1. Supprimer le groupe.
  2. Recréer avec le nouveau GID.
  3. chgrp -R sur tous les fichiers concernés.
SymptômeCauseFix
Conflit GID entre hôtesPas de gid: forcéForcer gid: sur les groupes partagés (NFS, containers)
groupdel failed (primaire)User a ce groupe comme primaireRéassigner d’abord avec user: group:
Fichiers orphelins après modifModification du gid: sur groupe existantNe jamais modifier — supprimer + recréer + chgrp
Groupe applicatif avec GID > 1000Oubli de system: trueAjouter system: true à la création
  • gid: forcé pour la cohérence multi-hôtes (NFS, containers, audit).
  • system: true pour les groupes applicatifs / système (GID < 1000).
  • Ordonner : group: AVANT user: 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.

Cette page a un lab d’accompagnement : labs/modules-utilisateurs/group/ dans stephrobert/ansible-training.

Challenge — sur db1.lab :

  1. Créer 3 groupes avec GIDs forcés (rhce-shared GID 4000, rhce-admins GID 4001, rhce-readonly GID 4002).
  2. Créer un groupe système myapp-system (system: true).

Validation pytest+testinfra :

Fenêtre de terminal
ansible-playbook solution.yml
pytest -v labs/modules-utilisateurs/group/challenge/tests/

4 tests vérifient les GIDs forcés et le caractère “système” du dernier groupe.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn