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 terminal2
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 getty02 — 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
| # | Champ | Exemple | Description |
|---|---|---|---|
| 1 | Login | robert | Nom de connexion de l'utilisateur |
| 2 | Mot de passe | x | x = stocké dans /etc/shadow · * = compte désactivé |
| 3 | UID | 1010 | Identifiant numérique unique. 0=root, 1-999=système, 1000+=users |
| 4 | GID | 100 | Groupe principal (référence /etc/group) |
| 5 | GECOS | Compte de Robert | Commentaire / nom complet |
| 6 | Home | /home/robert | Répertoire personnel |
| 7 | Shell | /bin/bash | Shell 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
| # | Champ | Description |
|---|---|---|
| 1 | Nom du groupe | Identifiant textuel |
| 2 | Mot de passe | Toujours x (inutilisé en pratique) |
| 3 | GID | Identifiant numérique du groupe |
| 4 | Membres | Liste 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 |
|---|---|
| 1 | Login |
| 2 | Hash du mot de passe. $6$=SHA-512, $1$=MD5, !=compte verrouillé |
| 3 | Jours depuis le 01/01/1970 du dernier changement de mot de passe |
| 4 | Nombre de jours minimum avant de pouvoir changer le mdp (0 = n'importe quand) |
| 5 | Nombre de jours maximum de validité du mdp (99999 = jamais) |
| 6 | Jours d'avertissement avant expiration |
| 7 | Jours après expiration avant désactivation du compte |
| 8 | Date de désactivation du compte (jours depuis 01/01/1970) |
| 9 | Ré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ètre | Rôle |
|---|---|
| PASS_MAX_DAYS | Durée maximale de validité du mot de passe |
| PASS_MIN_DAYS | Délai minimum entre deux changements |
| PASS_MIN_LEN | Longueur minimale du mot de passe |
| PASS_WARN_AGE | Jours d'avertissement avant expiration |
| UID_MIN / UID_MAX | Plage UID pour les utilisateurs normaux |
| GID_MIN / GID_MAX | Plage 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
| Option | Rôle |
|---|---|
| -m | Créer le répertoire home (/home/login) |
| -u UID | Préciser l'UID |
| -g GRP | Groupe principal (nom ou GID) |
| -G GRP1,GRP2 | Groupes secondaires |
| -d PATH | Chemin du home (autre que /home/login) |
| -s SHELL | Shell de connexion |
| -c "texte" | Commentaire / nom complet (champ GECOS) |
| -k /etc/skel | Répertoire squelette |
| -e YYYY-MM-DD | Date d'expiration du compte |
| -D | Voir/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 classique
usermod -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.