~$ cat /etc/passwd_

Utilisateurs
& Groupes

Authentification · /etc/passwd · shadow · useradd · PAM · chage

useraddpasswdusermod /etc/shadowPAMchage
01 — fondamentaux
Identification & Authentification
U1.1 Identification vs Authentification — quelle différence ?

Identification

Annoncer qui on est. Le système détermine les permissions associées à cet identifiant (UID/GID).

Authentification

Prouver qu'on est bien qui on prétend être. Généralement via un mot de passe ou une clé SSH.

Séquence de login via terminal

1
init lance un processus getty sur chaque terminal
2
getty demande le nom d'utilisateur (identification)
3
login demande le mot de passe et vérifie dans /etc/shadow (authentification)
4
Si succès : droits accordés selon UID/GID, shell lancé avec les fichiers d'environnement
5
Fin de session → init relance un nouveau getty
02 — fichiers système
Les 3 fichiers clés
U2.1 /etc/passwd — structure champ par champ
robert:x:1010:100:Compte de Robert:/home/robert:/bin/bash
# 1 2 3 4 5 6 7
#ChampExempleDescription
1LoginrobertNom de connexion de l'utilisateur
2Mot de passexx = stocké dans /etc/shadow · * = compte désactivé
3UID1010Identifiant numérique unique. 0=root, 1-999=système, 1000+=users
4GID100Groupe principal (référence /etc/group)
5GECOSCompte de RobertCommentaire / nom complet
6Home/home/robertRépertoire personnel
7Shell/bin/bashShell de connexion. /sbin/nologin = compte système sans login
# voir son propre UID/GID
id
# chercher un utilisateur
grep robert /etc/passwd
getent passwd robert
U2.2 /etc/group — structure
sudo:x:27:youssef,robert
# nom : mdp : GID : membres
#ChampDescription
1Nom du groupeIdentifiant textuel
2Mot de passeToujours x (inutilisé en pratique)
3GIDIdentifiant numérique du groupe
4MembresListe des utilisateurs ayant ce groupe en secondaire (séparés par virgule)
# voir les groupes d'un utilisateur
groups robert
id robert
U2.3 /etc/shadow — mots de passe et politique d'expiration
root:$6$hash....:15741:0:99999:7:::
# 1 2 3 4 5 6 7 8 9
#Description
1Login
2Hash du mot de passe. $6$=SHA-512, $1$=MD5, !=compte verrouillé
3Jours depuis le 01/01/1970 du dernier changement de mot de passe
4Nombre de jours minimum avant de pouvoir changer le mdp (0 = n'importe quand)
5Nombre de jours maximum de validité du mdp (99999 = jamais)
6Jours d'avertissement avant expiration
7Jours après expiration avant désactivation du compte
8Date de désactivation du compte (jours depuis 01/01/1970)
9Réservé
# convertir un champ de date shadow en date lisible
date --date="1 jan 1970 + 15741 days"
# voir la politique de mdp d'un utilisateur
sudo chage -l robert
sécurité/etc/shadow est lisible uniquement par root. Ne jamais modifier directement — utiliser passwd et chage.
U2.4 /etc/login.defs — politique globale des comptes

Définit les valeurs par défaut utilisées lors de la création de comptes. Appliqué uniquement aux nouveaux comptes, pas aux existants.

ParamètreRôle
PASS_MAX_DAYSDurée maximale de validité du mot de passe
PASS_MIN_DAYSDélai minimum entre deux changements
PASS_MIN_LENLongueur minimale du mot de passe
PASS_WARN_AGEJours d'avertissement avant expiration
UID_MIN / UID_MAXPlage UID pour les utilisateurs normaux
GID_MIN / GID_MAXPlage GID pour les groupes normaux
sudo cat /etc/login.defs | grep -v "^#" | grep -v "^$"
03 — gestion des utilisateurs
Créer · Modifier · Supprimer
U3.1 useradd — créer un utilisateur
# création minimale (sans home, sans shell)
sudo useradd robert
# création complète recommandée
sudo useradd -m -s /bin/bash -c "Compte de Robert" -G sudo robert
# définir le mot de passe immédiatement
sudo passwd robert
# voir les valeurs par défaut
useradd -D
# sur Debian/Ubuntu — adduser (plus interactif)
sudo adduser robert
OptionRôle
-mCréer le répertoire home (/home/login)
-u UIDPréciser l'UID
-g GRPGroupe principal (nom ou GID)
-G GRP1,GRP2Groupes secondaires
-d PATHChemin du home (autre que /home/login)
-s SHELLShell de connexion
-c "texte"Commentaire / nom complet (champ GECOS)
-k /etc/skelRépertoire squelette
-e YYYY-MM-DDDate d'expiration du compte
-DVoir/modifier les valeurs par défaut
/etc/skelLes fichiers dans /etc/skel sont copiés dans chaque nouveau home créé avec -m. Idéal pour déployer une config bash, vimrc, etc. par défaut.
U3.2 passwd et chage — gérer mots de passe et expiration
── passwd ──
passwd # changer son propre mdp
sudo passwd robert # changer le mdp d'un autre user (root)
sudo passwd -l robert # verrouiller le compte (lock)
sudo passwd -u robert # déverrouiller (unlock)
sudo passwd -e robert # forcer le changement au prochain login
sudo passwd -d robert # supprimer le mdp (login sans mdp)
── chage (politique d'expiration) ──
sudo chage -l robert # voir la politique
sudo chage -M 90 robert # expiration max 90 jours
sudo chage -m 7 robert # min 7 jours entre changements
sudo chage -W 14 robert # avertissement 14 jours avant
sudo chage -E 2025-12-31 robert # expiration du compte
sudo chage -I 30 robert # désactiver 30j après expiration
U3.3 usermod et userdel — modifier et supprimer
── usermod ──
sudo usermod -aG sudo robert # ajouter au groupe sudo (-a = append !)
sudo usermod -s /bin/zsh robert # changer le shell
sudo usermod -l newname robert # renommer le compte
sudo usermod -d /home/new -m robert # déplacer le home
sudo usermod -L robert # verrouiller
sudo usermod -U robert # déverrouiller
── userdel ──
sudo userdel robert # supprimer le compte (garde le home)
sudo userdel -r robert # supprimer compte + home + mail spool
piège classiqueusermod -G sudo robert sans -a remplace tous les groupes secondaires par sudo. Toujours utiliser -aG pour ajouter.
04 — gestion des groupes
groupadd · groupmod · gpasswd
U4.1 Commandes de gestion des groupes
── créer / modifier / supprimer ──
sudo groupadd devteam # créer un groupe
sudo groupadd -g 1500 devteam # avec GID spécifique
sudo groupmod -n newname devteam # renommer un groupe
sudo groupdel devteam # supprimer (membres non supprimés)
── gérer les membres ──
sudo gpasswd -a robert devteam # ajouter robert au groupe
sudo gpasswd -d robert devteam # retirer robert du groupe
sudo gpasswd -A robert devteam # nommer robert admin du groupe
── vérification ──
getent group devteam # voir les membres
groups robert # groupes d'un utilisateur
nouvelle sessionAprès avoir ajouté un utilisateur à un groupe, il doit se déconnecter et se reconnecter (ou faire newgrp devteam) pour que le changement soit effectif.
05 — PAM
Politique de mots de passe
U5.1 Pourquoi Linux refuse "123456" — PAM et pwquality

PAM (Pluggable Authentication Modules) est le framework d'authentification de Linux. Il gère toutes les règles de complexité des mots de passe via des modules configurables.

# installer le module de qualité des mdp
sudo apt install libpam-pwquality
# configurer dans /etc/security/pwquality.conf
sudo nano /etc/security/pwquality.conf
minlen = 12 # longueur minimale
dcredit = -1 # au moins 1 chiffre
ucredit = -1 # au moins 1 majuscule
lcredit = -1 # au moins 1 minuscule
ocredit = -1 # au moins 1 caractère spécial
difok = 3 # 3 chars différents du précédent mdp
dictcheck = 1 # vérifier contre les dictionnaires
# le module PAM est activé dans
cat /etc/pam.d/common-password | grep pwquality
sécurité offensiveCes mêmes règles que vous configurez ici définissent ce que les outils comme john ou hashcat devront contourner lors d'un crack de hash shadow. Comprendre PAM, c'est comprendre la surface d'attaque.