PAM

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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-auth est 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 required pré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)).

Voir aussi

  • Sudo — élévation de privilèges, s'appuie sur la pile PAM du service sudo
  • SSH — authentification interactive, pile PAM du service sshd