Users avancés Linux : groupes, chage, sudoers.d (2026)
À la fin de ce tutoriel, vous saurez distinguer comptes système et humains (plages UID), créer un service account (
useradd -r -M -s /usr/sbin/nologin), verrouiller/déverrouiller (usermod -L/-U,chage), gérer groupes linux avancés (groupadd -g,gpasswd,newgrp), partager un répertoire avec setgid + umask, et écrire un drop-in sudoers.d avecCmnd_Alias/%groupe— le tout sur VM jetable, sans bypass auth.Niveau : Intermédiaire · Temps estimé : 50–60 min · Versions testées : Ubuntu 22.04 / 24.04, Debian 12 ; notes Rocky/Alma 9 · Dernière vérification : 2026-09-11
Slug proposé :
linux-users-avances· Série : Linux Admin · Remplace / fusionne : N/A — création (chapitre 8)
Prérequis
- Hub Linux Admin et Basics utilisateurs & sudo (
useradd,usermod -aG,visudominimal) - Permissions : fichiers & permissions (
chmod,chown, umask) - VM ou WSL jetable (Ubuntu/Debian ou Rocky/Alma 9) avec un compte déjà
sudo - Pas de secrets réels ; lab limité à
svcapp,opsalice, groupedeploy,/srv/shared-lab
Coût estimé : 0 €. Tout est nettoyable en fin de chapitre.
Ce que nous allons construire
UID système vs humain + useradd -r / nologin
→ Compte service svcapp (-M -r -s nologin)
→ opsalice + groupe deploy (GID fixe) + gpasswd / newgrp
→ /srv/shared-lab setgid + umask collab
→ Verrouillage : usermod -L, passwd -l, chage
→ sudoers.d : Cmnd_Alias + %deploy (NOPASSWD lab limité)
→ Inspect getent / id / last · vérification + nettoyage
(Schéma à remplacer par une image locale Excalidraw / draw.io, alt : « Users avancés Linux : comptes système, groupes deploy, setgid /srv/shared-lab, sudoers.d ».)
Huitième chapitre de Linux Admin. Après utilisateurs & sudo, on n’écrit pas un second lab débutant : on approfondit comptes de service, expiration, collab setgid et sudoers versionnables. Analogie cloud : groupe deploy + Cmnd_Alias ≈ rôle IAM à permissions bornées.
Étape 1 — Comptes système vs humains (UID)
Sur Debian/Ubuntu, plages usuelles via /etc/login.defs et useradd :
| Type | Plage typique (Debian/Ubuntu) | Shell fréquent | Home |
|---|---|---|---|
| Système | UID 1–999 (useradd -r) |
/usr/sbin/nologin |
souvent absent (-M) |
| Humain | UID ≥ 1000 | /bin/bash |
/home/<user> |
Rocky/Alma 9 : plages proches (UID_MIN ≈ 1000) ; groupe admin = wheel. Vérifiez :
grep -E '^(UID_MIN|UID_MAX|SYS_UID_MIN|SYS_UID_MAX)' /etc/login.defs
getent passwd | awk -F: '$3 < 1000 {print}' | head -n 8
ls -l /usr/sbin/nologin /sbin/nologin 2>/dev/null || true
/usr/sbin/nologin refuse un login interactif tout en laissant le compte pour un daemon (User= systemd). Ce n’est pas une suppression.
Étape 2 — Compte service svcapp (-M -r -s nologin)
sudo useradd -r -M -s /usr/sbin/nologin -c "Lab service app" svcapp
getent passwd svcapp
id svcapp
test ! -d /home/svcapp && echo "pas de /home/svcapp — OK"
| Flag | Effet |
|---|---|
-r |
Compte système (UID bas) |
-M |
Ne crée pas de home |
-s /usr/sbin/nologin |
Pas de shell interactif |
-c |
Commentaire GECOS |
Rocky/Alma : mêmes flags ; nologin peut être /sbin/nologin — getent le confirme. Ne donnez pas de mot de passe à svcapp : le daemon tourne sous UID, pas via SSH.
Étape 3 — Humain opsalice et groupe deploy (GID fixe)
sudo groupadd -g 3500 deploy
getent group deploy
sudo useradd -m -s /bin/bash -c "Ops Alice lab" opsalice
sudo passwd opsalice # mot de passe lab local uniquement
sudo usermod -aG deploy opsalice
id opsalice
getent group deploy
Debian/Ubuntu créent souvent un groupe privé homonyme (opsalice:opsalice). Le secondaire deploy sert la collab.
sudo gpasswd -a opsalice deploy
# sudo gpasswd -d opsalice deploy # retrait
# newgrp deploy # sous-shell GID effectif ; exit pour revenir
Après usermod -aG, un relogin (ou newgrp) est souvent requis pour voir les groupes à jour — vrai aussi sur Rocky/Alma.
Étape 4 — Répertoire partagé setgid + umask
Fichiers créés dans /srv/shared-lab restent au groupe deploy via setgid (chmod g+s). Rappel : fichiers & permissions.
sudo mkdir -p /srv/shared-lab
sudo chown root:deploy /srv/shared-lab
sudo chmod 2775 /srv/shared-lab
namei -l /srv/shared-lab
stat -c '%a %A %U:%G' /srv/shared-lab
sudo -u opsalice bash -c '
umask 002
echo "note deploy" > /srv/shared-lab/note-alice.txt
ls -l /srv/shared-lab/note-alice.txt
'
stat -c '%a %A %U:%G' /srv/shared-lab/note-alice.txt
| Élément | Rôle |
|---|---|
chmod g+s / 2xxx |
Nouveaux fichiers héritent du GID du dossier |
umask 002 |
Fichiers group-writable (lab collab) |
chown root:deploy |
Owner root, groupe métier |
Sans setgid, un fichier d’opsalice resterait souvent au groupe privé — la collab casse.
Étape 5 — Verrouiller, déverrouiller, expiration (chage)
sudo usermod -L opsalice
# équivalent : sudo passwd -l opsalice
sudo passwd -S opsalice
sudo usermod -U opsalice
# sudo passwd -u opsalice
sudo chage -l opsalice
sudo chage -M 90 -W 7 opsalice
sudo chage -l opsalice
| Commande | Effet |
|---|---|
usermod -L / passwd -l |
Verrouille le hash (préfixe !) |
usermod -U / passwd -u |
Déverrouille |
chage -l |
Affiche aging |
chage -M 90 |
Expire après 90 jours |
chage -W 7 |
Avertissement 7 jours avant |
Préférez le lock à userdel immédiat pour garder UID/fichiers en audit. faillock / pam_tally2 : hors cœur — mention utiles si vous durcissez PAM, sans tenter de bypass.
Étape 6 — sudoers avancé : drop-in, Cmnd_Alias, %groupe
Drop-ins dans /etc/sudoers.d/ — toujours visudo -cf. NOPASSWD limité à une commande lab.
sudo tee /etc/sudoers.d/90-lab-deploy >/dev/null <<'EOF'
# Lab uniquement — ne pas copier en prod tel quel
Cmnd_Alias LAB_DEPLOY_CMDS = /usr/bin/systemctl status ssh, /bin/systemctl status ssh
%deploy ALL=(root) NOPASSWD: LAB_DEPLOY_CMDS
EOF
sudo chmod 440 /etc/sudoers.d/90-lab-deploy
sudo visudo -cf /etc/sudoers.d/90-lab-deploy
sudo visudo -cf
sudo -u opsalice sudo -l
sudo -u opsalice sudo systemctl status ssh | head -n 5
| Concept | Usage |
|---|---|
/etc/sudoers.d/* |
Drop-ins (chmod 440) |
Cmnd_Alias |
Liste nommée de binaires |
%deploy |
Membres du groupe |
NOPASSWD: |
Lab seulement, commande bornée |
Defaults:user !authenticate |
À éviter en prod — ne pas activer ici |
Avertissement :
NOPASSWD: ALLou!authenticateélargissent la surface. En projet : auth interactive, commandes listées, revue des drop-ins. Jamais d’édition brute de/etc/sudoerssansvisudo.
Étape 7 — Inspect : getent, id, last / lastlog
getent passwd svcapp opsalice
getent group deploy
id opsalice
id svcapp
last -n 5 2>/dev/null || true
lastlog -u opsalice 2>/dev/null || true
Préférez getent : NSS (LDAP/SSSD) est respecté. Corrélation login : journalctl (journalctl -u ssh).
Étape 8 — Vérification
getent passwd svcapp | grep -E 'nologin|false'
id -nG opsalice | grep -qw deploy && echo "opsalice dans deploy — OK"
stat -c '%a %G' /srv/shared-lab | grep -E '2775|deploy' && echo "setgid shared — OK"
sudo visudo -cf /etc/sudoers.d/90-lab-deploy
sudo -u opsalice sudo -n systemctl status ssh >/dev/null && echo "sudoers lab — OK"
sudo chage -l opsalice | head -n 6
Validé si : svcapp système + nologin, opsalice ∈ deploy, /srv/shared-lab en 2775/deploy, drop-in OK, chage -l répond.
Nettoyage
sudo rm -f /etc/sudoers.d/90-lab-deploy
sudo visudo -cf
sudo rm -rf /srv/shared-lab
sudo userdel -r opsalice 2>/dev/null || sudo userdel opsalice
sudo userdel svcapp 2>/dev/null || true
sudo groupdel deploy 2>/dev/null || true
getent passwd opsalice svcapp || echo "users lab absents — OK"
getent group deploy || echo "groupe deploy absent — OK"
Jamais userdel sur votre session admin. Si un process tient l’UID, stoppez-le d’abord (processus avancés).
Erreurs fréquentes
| Symptôme | Cause | Correction |
|---|---|---|
Groupes absents après usermod -aG |
Session non rafraîchie | Logout/login ou newgrp deploy |
Fichier pas groupe deploy |
Pas de setgid | chmod g+s / 2775 sur le dossier |
| GID 3500 déjà pris | -g en conflit |
GID libre via getent group |
sudo: a password is required |
Hors alias / pas dans %deploy |
id, sudo -l, chemin exact |
visudo: parse error |
Syntaxe drop-in | Corriger + visudo -cf avant de couper sudo |
usermod -G vide les secondaires |
Oubli de -a |
Toujours usermod -aG |
Login svcapp refusé |
Attendu avec nologin | Normal — compte service |
Quiz (3 questions)
1. À quoi sert useradd -r -M -s /usr/sbin/nologin svcapp ?
– A. Créer un admin interactif avec home
– B. Créer un compte système sans home ni shell login
– C. Activer NOPASSWD: ALL pour svcapp
2. Pourquoi chmod 2775 sur /srv/shared-lab ?
– A. Chiffrer le répertoire
– B. Activer setgid pour hériter du groupe du dossier
– C. Remplacer umask globalement
3. Où placer une règle sudoers versionnable pour %deploy ?
– A. Dans ~/.bashrc
– B. Dans /etc/sudoers.d/ validé par visudo -cf
– C. Uniquement dans le kernel sysctl
Réponses : 1‑B · 2‑B · 3‑B
FAQ
Différence compte système et compte humain ?
Le système (useradd -r) a un UID bas, souvent sans home ni shell login, pour daemons. L’humain (UID ≥ 1000) a home + shell. Les deux sont dans getent passwd ; seul le second sert une session interactive.
Comment partager un dossier entre plusieurs users DevOps ?
Groupe commun (deploy), chown root:deploy, bit setgid (2775), umask 002. Voir permissions et LVM si volume dédié.
NOPASSWD ou !authenticate en production ?
À éviter en large. Limitez NOPASSWD à des binaires précis (Cmnd_Alias) pour automation contrôlée ; auth interactive pour les humains. Toujours visudo -cf.
Pour aller plus loin
man useradd,man usermod,man gpasswd,man chage,man sudoers,man visudo- Hub Linux Admin · Basics utilisateurs & sudo
- Auth logs : journalctl · SSH : clés / hardening
Maillage série Linux Admin
| ← Précédent | Hub Linux Admin · voisin live : logs journalctl · LVM volumes · Monitoring local (ch. 7, à venir) |
| → Suivant | Kernel modules & sysctl (ch. 9, à venir) · Hub Linux Admin |
| Hub | Linux Admin |
| Aussi | Basics utilisateurs & sudo · fichiers & permissions |
Meta publication (à remplir dans Rank Math / SEO)
- Title SEO : Users avancés Linux : groupes, chage, sudoers.d (2026)
- Meta description (≤ 155) : Gestion utilisateurs Linux avancée : groupes, chage, setgid, sudoers.d. Lab jetable DevOps 2026.
- Focus keyphrase : gestion utilisateurs linux
- KW secondaires : groupes linux, chage, sudoers.d, setgid, useradd -r, gpasswd
- Schemas Rank Math : Article + HowTo (étapes lab) + FAQ (3 questions ci-dessus)
- Image mise en avant :
assets/web/devopelastichayway/cover-linux-users-avances-1200x630.webp(Visuels Linux — WebP 1200×630) - Catégorie : Linux · Niveau : Intermédiaire
- Slug :
linux-users-avances - Statut : HOLD — draft only (ne pas publier)
← Retour parcours Linux — Basics, Admin, Réseau & Sécurité, Shell & Automation.