Les Pluggable Authentication Modules, plus communément connus sous l'acronyme PAM, est un élément important de la gestion de l'authentification dans les environnements Linux. PAM est un ensemble de bibliothèques logicielles qui fournissent un mécanisme flexible et puissant pour l'authentification des utilisateurs sur les systèmes d'exploitation Linux. Il s'agit d'une interface standardisée permettant d'intégrer différentes méthodes d'authentification, allant des mots de passe classiques à des solutions plus complexes comme la biométrie ou les jetons d'authentification.
L'importance de PAM réside dans sa capacité à centraliser et à uniformiser le processus d'authentification sur un système. Cela permet aux administrateurs de systèmes de changer ou d'ajouter des méthodes d'authentification sans avoir à modifier les applications elles-mêmes. PAM offre ainsi une grande flexibilité et une meilleure gestion de la sécurité.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Comprendre la chaîne PAM (types de modules et flags de contrôle)
- Verrouiller les comptes après des échecs avec
pam_faillock - Imposer une politique de mot de passe avec
pam_pwqualityetpam_pwhistory - Distinguer la configuration Debian (
common-*) de RHEL (authselect) - Éviter de se verrouiller hors du système
L'histoire et l'évolution de PAM
Section intitulée « L'histoire et l'évolution de PAM »PAM a été initialement développé par Sun Microsystems dans les années 1990. Depuis, il est devenu un standard de facto dans les systèmes Unix et Linux, étant intégré dans de nombreuses distributions et utilisé par une multitude de services et d'applications.
Les composants de base de PAM
Section intitulée « Les composants de base de PAM »Pluggable Authentication Modules (PAM) est un système qui fournit des mécanismes pour intégrer de multiples technologies d'authentification dans un seul cadre cohérent. Les composants de base de PAM se répartissent en quatre catégories principales, chacune ayant un rôle spécifique dans le processus d'authentification et de gestion des sessions utilisateur. Comprendre ces catégories est essentiel pour appréhender le fonctionnement global de PAM.
Modules d'authentification
Section intitulée « Modules d'authentification »Les modules d'authentification sont le cœur de PAM. Ils sont responsables de la vérification de l'identité de l'utilisateur. Lorsqu'un utilisateur tente de se connecter à un système, ces modules vérifient les informations d'identification, comme les noms d'utilisateur et les mots de passe. Ils peuvent également intégrer des méthodes d'authentification plus avancées, telles que les empreintes digitales ou la reconnaissance faciale.
Modules de gestion de compte
Section intitulée « Modules de gestion de compte »Les modules de gestion de compte interviennent après l'authentification. Leur rôle est de vérifier que l'accès de l'utilisateur est autorisé. Par exemple, ils peuvent contrôler si un compte utilisateur est expiré, si l'utilisateur a le droit d'accéder à un service spécifique ou si des conditions d'accès particulières (comme des horaires spécifiques) sont respectées.
Modules de gestion de session
Section intitulée « Modules de gestion de session »Après une authentification réussie, les modules de gestion de session entrent en jeu. Ils s'occupent de la préparation et de la fin de la session utilisateur. Ces modules peuvent exécuter des scripts ou des commandes spécifiques au démarrage ou à la fermeture d'une session, comme le montage de répertoires personnels ou la journalisation des activités de session.
Modules de gestion des mots de passe
Section intitulée « Modules de gestion des mots de passe »Enfin, les modules de gestion des mots de passe sont impliqués lors de la création ou de la modification de mots de passe. Ils assurent que les mots de passe respectent les politiques de sécurité en vigueur, comme les critères de complexité et les règles de renouvellement. Ces modules peuvent également être utilisés pour synchroniser les mots de passe sur différents systèmes.
Fonctionnement de PAM
Section intitulée « Fonctionnement de PAM »Pour comprendre le fonctionnement de PAM, il est essentiel de saisir comment les différents modules interagissent pour fournir un système d'authentification complet et sécurisé. Ce chapitre explore le processus d'authentification et la manière dont les modules PAM sont organisés et utilisés dans les systèmes Unix-like.
Processus d'authentification
Section intitulée « Processus d'authentification »Le processus d'authentification avec PAM commence lorsqu'un utilisateur tente de se connecter à un système ou d'accéder à un service. PAM agit comme un intermédiaire entre l'application demandant l'authentification (comme un serveur SSH ou un gestionnaire de connexion) et les modules d'authentification configurés.
Lors de cette tentative, PAM va consulter sa configuration pour déterminer quels
modules doivent être utilisés et dans quel ordre. Cette configuration est
spécifique à chaque service et est définie dans les fichiers de configuration de
PAM, généralement situés dans /etc/pam.d/.
La chaîne de modules
Section intitulée « La chaîne de modules »PAM fonctionne sur la base d'une chaîne de modules, où chaque module est appelé à son tour selon la configuration spécifiée. Cette chaîne peut inclure divers types de modules, chacun accomplissant une tâche spécifique dans le processus d'authentification, de gestion de compte, de gestion de session ou de gestion des mots de passe.
Les modules dans une chaîne sont traités de manière séquentielle. Si un module
échoue, PAM peut soit arrêter le processus d'authentification immédiatement,
soit continuer avec les modules suivants, selon la configuration. Ce
comportement est défini par les types de contrôle assignés à chaque module
dans la configuration, tels que requisite, required, sufficient ou
optional.
Exemples concrets
Section intitulée « Exemples concrets »Prenons l'exemple d'une connexion SSH. Lorsqu'un utilisateur tente de se
connecter via SSH, le service SSH fait appel à PAM. PAM va alors consulter le
fichier de configuration /etc/pam.d/sshd pour déterminer quels modules
utiliser. Cette configuration peut inclure un module pour vérifier le mot de
passe, un autre pour contrôler l'accès en fonction de l'heure et un autre pour
enregistrer la tentative de connexion.
Un autre exemple est l'ouverture de session sur un système de bureau. Le gestionnaire de connexion utilise PAM pour gérer l'authentification. Les modules configurés peuvent inclure des vérifications de mot de passe, de l'intégrité du compte utilisateur et des initialisations nécessaires à la session de l'utilisateur.
Configuration de PAM
Section intitulée « Configuration de PAM »La configuration des Pluggable Authentication Modules (PAM) est un élément central de la sécurisation et de la personnalisation des processus d'authentification et de gestion des sessions sur les systèmes basés sur Unix. Ce chapitre se penche en détail sur les mécanismes de configuration de PAM, en explorant la structure des fichiers de configuration, leur rôle dans la définition des politiques d'authentification et comment les ajuster pour répondre à des besoins spécifiques.
Comprendre la structure des fichiers de configuration
Section intitulée « Comprendre la structure des fichiers de configuration »Les fichiers de configuration de PAM, localisés dans /etc/pam.d/, sont
essentiels pour définir le comportement des modules d'authentification. Chaque
service utilisant PAM, comme SSH (sshd) ou le gestionnaire de connexion
(login), dispose de son propre fichier de configuration. Ces fichiers sont
structurés en lignes, chacune représentant un module et sa configuration.
Un exemple de ligne dans un fichier de configuration PAM est le suivant :
type contrôle module_path arguments- Type : Catégorie du module (auth, account, password, session).
- Contrôle : Réaction de PAM à l'issue du module (required, requisite, sufficient, optional).
- Module_path : Chemin vers le fichier du module.
- Arguments : Options spécifiques au module.
Définir les politiques d'authentification
Section intitulée « Définir les politiques d'authentification »Les fichiers de configuration PAM établissent les règles que les services doivent suivre pour l'authentification et la gestion des sessions. Ils permettent une grande flexibilité, autorisant des configurations allant de la simple vérification de mot de passe à des contrôles d'accès complexes basés sur le temps, l'emplacement ou d'autres critères.
L'ordre des lignes dans un fichier de configuration est déterminant. PAM traite chaque module dans l'ordre spécifié, ce qui signifie que l'ordre des modules peut influencer l'issue du processus d'authentification.
Exemples de configurations avancées
Section intitulée « Exemples de configurations avancées »Pour illustrer la puissance de la configuration PAM, examinons quelques exemples avancés :
-
Restriction d'accès en fonction de l'heure :
Fenêtre de terminal account required pam_time.soCe module peut être configuré pour restreindre l'accès à certaines heures.
-
Limitation des tentatives de connexion :
Fenêtre de terminal auth required pam_faillock.so preauth deny=3 unlock_time=600pam_faillockbloque un compte après trois échecs. Il remplace l'ancienpam_tally2, supprimé de Linux-PAM depuis la version 1.5.0 (2020) : une lignepam_tally2.soprovoque aujourd'hui une erreur de chargement PAM. La mise en place complète est détaillée plus bas. -
Intégration d'une authentification à deux facteurs :
Fenêtre de terminal auth required pam_google_authenticator.soCe module ajoute une couche d'authentification basée sur Google Authenticator.
Bonnes pratiques de configuration
Section intitulée « Bonnes pratiques de configuration »Lors de la configuration de PAM, il est essentiel de suivre certaines bonnes pratiques pour maintenir la sécurité du système :
- Testez les modifications en environnement de développement avant de les déployer en production.
- Faites des sauvegardes des fichiers de configuration avant de les modifier.
- Soyez prudent avec l'ordre des modules : un mauvais ordre peut entraîner des failles de sécurité ou empêcher les utilisateurs légitimes d'accéder au système.
- Utilisez des modules bien compris et testés pour éviter les configurations erronées.
Durcir l'authentification en pratique
Section intitulée « Durcir l'authentification en pratique »Au-delà des concepts, voici les deux leviers concrets du durcissement PAM : verrouiller les comptes après des échecs et imposer une politique de mot de passe. Ils correspondent aux recommandations ANSSI-BP-028 R31 (mots de passe), R67 (authentification PAM) et R68 (stockage des mots de passe).
Verrouiller les comptes avec pam_faillock
Section intitulée « Verrouiller les comptes avec pam_faillock »Le module pam_faillock bloque un compte après N échecs. Les réglages
communs vivent dans /etc/security/faillock.conf, mais l'activation diffère
selon la distribution : c'est le piège central.
deny = 3unlock_time = 600fail_interval = 900La configuration vit dans /etc/pam.d/common-auth (géré par pam-auth-update).
Vérifiez que pam_faillock y est référencé en preauth et authfail, puis
appliquez les réglages via faillock.conf.
Sur RHEL 9, n'éditez jamais system-auth/password-auth à la main : ces
fichiers sont régénérés par authselect et vos modifications seraient
écrasées. Activez la fonctionnalité proprement :
sudo authselect enable-feature with-faillocksudo authselect apply-changesConsultez et débloquez un compte avec la commande faillock :
sudo faillock --user alice # etat des echecssudo faillock --user alice --reset # debloquerImposer une politique de mot de passe
Section intitulée « Imposer une politique de mot de passe »Deux modules : pam_pwquality (qualité à la création) et pam_pwhistory
(empêche de réutiliser les anciens). Réglez la qualité dans
/etc/security/pwquality.conf :
minlen = 12minclass = 3pam_pwhistory se règle avec remember=5 (historique dans /etc/security/opasswd).
Cas pratiques d'utilisation de PAM
Section intitulée « Cas pratiques d'utilisation de PAM »Les Pluggable Authentication Modules (PAM) sont extrêmement polyvalents et peuvent être utilisés dans une variété de scénarios pour améliorer la sécurité et la gestion des accès.
Pour cela, je vais m'appuyer cette fois sur OpenSCAP pour récupérer les recommandations définies par l'ANSSI.
Installation d'OpenScap
Section intitulée « Installation d'OpenScap »Pour ceux qui ne connaissent pas OpenScap, j'ai écrit une documentation expliquant tout sur ce formidable produit d'audit de sécurité. Pour installer OpenScap, j'ai écrit un rôle Ansible.
Dans un répertoire vide créer un fichier ansible.cfg avec ce contenu :
[defaults]roles_path=./rolesInstallation du rôle :
ansible-galaxy install stephrobert.openscapLe playbook :
---- name: Install Openscap on Client hosts: all pre_tasks: - name: Install packages ansible.builtin.package: name: - libopenscap8 - python3-openscap state: present become: true roles: - role: stephrobert.openscap vars: - oscap_version: "1.3.9" - install_content: true - install_oscap: true - scan: trueLancement de l'installation :
ansible-playbook -i localhost, -c local openscap.yml --ask-become-passAnalyse du résultat du scan OpenScap
Section intitulée « Analyse du résultat du scan OpenScap »Au bout de quelques minutes, l'installation et le scan se termine. Vous devriez
retrouver dans le répertoire un fichier html. Ouvrez-le dans votre navigateur
web.

Dans le champ [Group rules by], sélectionnez ANSSI. N'afficher que les tests en [Fail]. Les règles sur les mots de passe relèvent de la recommandation R31 d'ANSSI-BP-028.

Cliquez sur un des Fail et vous aurez toutes les explications.
Nous allons résoudre le problème [Ensure PAM Enforces Password Requirements - Minimum Digit Characters ].
- Dans le fichier
/etc/security/pwquality.confon doit trouver une ligne contenantdcredit = -1. - Dans le fichier
/etc/pam.d/common-passwordon doit trouver une ligne répondant à cette expression régulière :^\s*password\s+(?:(?:required)|(?:requisite))\s+pam_pwquality\.so.*$
On modifie les fichiers :
/etc/security/pwquality.confen ajoutant cette ligne :dcredit = -1./etc/pam.d/common-passworden ajoutant cette ligne :password required pam_pwquality.so
On relance le scan :
ansible-playbook -i localhost, -c local openscap.yml --ask-become-pass
C'est passé !
Automatisation
Section intitulée « Automatisation »Sécurité et bonnes pratiques avec PAM
Section intitulée « Sécurité et bonnes pratiques avec PAM »La sécurité est un aspect essentiel dans la gestion des systèmes d'exploitation Unix-like et les Pluggable Authentication Modules (PAM) jouent un rôle essentiel dans ce domaine. Ce chapitre se concentre sur les enjeux de sécurité associés à PAM et offre des conseils sur les bonnes pratiques à adopter pour maintenir un haut niveau de sécurité.
Comprendre les enjeux de sécurité avec PAM
Section intitulée « Comprendre les enjeux de sécurité avec PAM »PAM est une interface puissante pour gérer l'authentification et les sessions utilisateurs, mais cette puissance s'accompagne de risques de sécurité potentiels. Une mauvaise configuration peut entraîner des vulnérabilités, comme des accès non autorisés ou des failles permettant l'escalade de privilèges. Il est donc impératif de comprendre ces risques pour les atténuer efficacement.
Bonnes pratiques en matière de configuration de PAM
Section intitulée « Bonnes pratiques en matière de configuration de PAM »Pour garantir une utilisation sécurisée de PAM, il est recommandé de suivre certaines pratiques :
-
Maintenez le système à jour : Assurez-vous que les modules PAM et le système d'exploitation sont régulièrement mis à jour pour bénéficier des derniers correctifs de sécurité.
-
Minimalisme dans les configurations : N'utilisez que les modules nécessaires et évitez les configurations excessivement complexes. Cela réduit la surface d'attaque potentielle.
-
Contrôle d'accès strict : Limitez les accès aux fichiers de configuration de PAM aux administrateurs systèmes uniquement, en utilisant des permissions appropriées.
-
Audit et surveillance : Mettez en place des systèmes d'audit pour surveiller les tentatives de connexion et les modifications apportées aux fichiers de configuration PAM. Cela peut aider à détecter des activités suspectes.
-
Testez les configurations : Avant de déployer de nouvelles configurations en production, testez-les dans un environnement contrôlé pour s'assurer qu'elles fonctionnent comme prévu sans introduire de nouvelles vulnérabilités.
-
Formation et sensibilisation : Assurez-vous que les personnes impliquées dans la gestion des systèmes sont bien formées et conscientes des pratiques de sécurité relatives à PAM.
Sécuriser les modules spécifiques
Section intitulée « Sécuriser les modules spécifiques »En plus des pratiques générales, il est important de prêter attention à la sécurité des modules spécifiques utilisés :
- Authentification forte : Privilégiez les modules qui supportent l'authentification multifacteur pour renforcer la sécurité.
- Gestion des mots de passe : imposez longueur et historique avec
pam_pwqualityetpam_pwhistory(voir la politique recommandée plus haut). La rotation forcée n'est plus recommandée par le NIST et l'ANSSI hors comptes privilégiés. - Restrictions d'accès : Configurez des modules pour limiter l'accès basé sur des critères tels que l'heure, le lieu ou l'état du système.
Gestion des vulnérabilités
Section intitulée « Gestion des vulnérabilités »Enfin, restez informé des vulnérabilités connues affectant PAM et ses modules. Réagissez rapidement en appliquant les correctifs ou en ajustant les configurations pour atténuer les risques.
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
| Plus aucune authentification ne fonctionne | Erreur de syntaxe dans un fichier PAM | Mode rescue, restaurer la sauvegarde du fichier |
pam_tally2.so introuvable au chargement | Module supprimé depuis Linux-PAM 1.5.0 | Migrer vers pam_faillock |
| Un compte reste verrouillé | Compteur faillock non remis à zéro | faillock --user <u> --reset |
| Réglages PAM perdus sur RHEL 9 | Édition manuelle de system-auth | Passer par authselect enable-feature + apply-changes |
| Compteurs d'échecs perdus au reboot | État dans /var/run/faillock (tmpfs) | Ajouter dir=/var/log/faillock dans faillock.conf |
À retenir
Section intitulée « À retenir »- PAM chaîne des modules par type (
auth,account,password,session) et par flag (required,requisite,sufficient,optional) pam_faillockremplacepam_tally2(supprimé en 2020) pour verrouiller après N échecs- Debian se configure via
common-*; RHEL viaauthselect(ne jamais éditersystem-authà la main) - Politique mot de passe : longueur + historique d'abord ; la rotation forcée n'est plus recommandée (NIST, ANSSI) hors comptes privilégiés
- Toujours une session root ouverte + une 2e session de test avant de modifier un fichier PAM
- Références ANSSI-BP-028 R31 / R67 / R68