PAM
| Fiche express | |
|---|---|
| Domaine | Authentification (Pluggable Authentication Modules) |
| Fichiers | /etc/pam.d/*, /etc/security/*
|
| Contexte | Linux (RHEL/CentOS et dérivés) — empilement de modules d'authentification par service |
| Voir aussi | Sudo, SSH (services qui s'appuient sur PAM) |
PAM (Pluggable Authentication Modules) centralise l'authentification, le contrôle
d'accès, la gestion des mots de passe et des sessions pour tous les programmes qui l'utilisent
(login, sudo, sshd, su, passwd...).
Chaque service décrit dans /etc/pam.d/ la pile de modules à appliquer pour chacune
de ces étapes : changer le comportement d'authentification d'un service ne demande donc pas de
recompiler le programme, seulement d'éditer sa pile PAM.
Format du fichier de configuration
Chaque ligne d'un fichier /etc/pam.d/<service> suit ce format :
<type de module> <drapeau de contrôle> <chemin du module> <arguments>
Un service sans fichier dédié dans /etc/pam.d/ retombe sur l'ancien fichier unique
/etc/pam.conf (format historique, quasiment plus utilisé sur les distributions
récentes qui livrent un fichier par service dans /etc/pam.d/).
Types de modules (interface)
- auth : authentifie l'utilisateur — typiquement en demandant et en vérifiant un mot de
passe. Peut aussi établir des informations d'identification (appartenance à un groupe, ticket Kerberos...).
- account : vérifie que l'accès est autorisé indépendamment de l'authentification — compte
expiré, restriction horaire de connexion, etc.
- password : gère le changement de mot de passe (règles de complexité, mise à jour du hash).
- session : configure et gère la session une fois l'accès accordé — montage du répertoire
personnel, mise à disposition de la boîte mail, journalisation d'ouverture/fermeture de session...
Empilement des règles : exemple
Les modules d'une même interface sont empilés dans l'ordre du fichier ; chaque ligne est évaluée
à la suite des précédentes. Exemple avec le service reboot :
#%PAM-1.0
auth sufficient pam_rootok.so
auth required pam_console.so
#auth include system-auth
account required pam_permit.so
- La première ligne (
#) est un commentaire, ignoré. auth sufficient pam_rootok.so: vérifie si l'utilisateur courant est root (UID 0).
Si le test réussit, aucun autre module auth n'est consulté et la commande s'exécute
directement. S'il échoue, on passe au module suivant.
auth required pam_console.so: si l'utilisateur est déjà connecté sur la console
locale, ce module vérifie l'existence d'un fichier portant le nom du service (reboot) dans/etc/security/console.apps/. Si le fichier existe, l'authentification réussit.
- La ligne
#auth include system-authest commentée, donc ignorée. account required pam_permit.so: autorise sans condition tout utilisateur ayant
franchi l'étape auth précédente (root, ou utilisateur connecté à la console) à
redémarrer la machine.
L'ordre des modules required n'a pas d'incidence sur le résultat final — seuls les drapeaux sufficient et requisite rendent l'ordre déterminant (voir ci-dessous).
Drapeaux de contrôle (control flags)
- required : le module doit réussir pour que l'authentification continue. En cas d'échec,
le résultat n'est communiqué à l'utilisateur qu'une fois tous les modules de la même interface évalués — l'échec n'est pas immédiat.
- requisite : comme
required, mais en cas d'échec l'utilisateur est informé
immédiatement et les modules suivants de la pile ne sont pas évalués.
- sufficient : si ce module réussit et qu'aucun module
requiredprécédent
n'a échoué, l'authentification est immédiatement validée sans évaluer les modules suivants. Si le module échoue, il est simplement ignoré (sauf s'il était le dernier de la pile).
- optional : le résultat n'est déterminant que si c'est le seul module de l'interface —
sinon il est ignoré.
Politique de mot de passe (pam_pwquality)
Règles de complexité imposées via pam_pwquality :
vi /etc/security/pwquality.conf
minlen = 12
maxrepeat = 2
minclass = 4
ucredit = -3
dcredit = -3
badword = password, pass, word
Activation dans la pile PAM du service passwd :
vi /etc/pam.d/passwd
password required pam_pwquality.so retry=3
retry=3 autorise 3 tentatives de saisie d'un mot de passe conforme avant l'échec du
module.
Verrouillage de compte après échecs répétés (pam_faillock)
Au-delà de la complexité du mot de passe, pam_faillock permet de verrouiller
temporairement un compte après un nombre d'échecs d'authentification consécutifs, typiquement
en ajoutant des lignes auth dans /etc/pam.d/system-auth (ou
password-auth) — l'ordre exact des lignes preauth/authfail/
authsucc et les options associées varient selon la version de la distribution
(à vérifier avant mise en production, la syntaxe précise diffère entre RHEL 6 (pam_tally2) et
RHEL 7+/8+ (pam_faillock)).