Aller au contenu
Infrastructure as Code medium

Module group Ansible : gérer les groupes Linux

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

Un GID mal choisi ne se manifeste qu'au moment où un partage réseau refuse l'accès, bien après le run qui l'a créé. Le lab vous fait poser plusieurs groupes avec un GID forcé sur une machine réelle, ajouter un groupe système distinct des groupes utilisateurs, et respecter l'ordre qui place le groupe avant les comptes qui le référencent. La vérification interroge la cible pour confirmer chaque GID attribué et la plage dans laquelle tombe le groupe système.

  • Module sudoers : écrire une règle sur un groupe plutôt que compte par compte, avec le préfixe %.
  • Module getent : vérifier la présence d'un groupe et son GID directement depuis la base du système.
  • Module mount : le cas concret qui justifie un GID forcé : un partage NFS où les identifiants numériques doivent concorder.

Ce site vous est utile ?

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

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn