Document

SUBSCRIBE TO GET FULL ACCESS TO THE E-BOOKS FOR FREE 🎁SUBSCRIBE NOW

Professional Dropdown with Icon

SUBSCRIBE NOW TO GET FREE ACCESS TO EBOOKS

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 avec Cmnd_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, visudo minimal)
  • 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, groupe deploy, /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/nologingetent 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: ALL ou !authenticate élargissent la surface. En projet : auth interactive, commandes listées, revue des drop-ins. Jamais d’édition brute de /etc/sudoers sans visudo.

É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, opsalicedeploy, /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

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.