# Pluggable Authentication Modules

En informatique, Pluggable Authentication Modules (modules d'authentification enfichables, en abrégé PAM) est une API permettant d'offrir aux programmes des services d'authentification, d'autorisation et de contrôle d'ouverture de sessions.
PAM opère une séparation entre les logiciels réclamant une authentification d'une part, et de l'autre les standards et bonnes pratiques liés au contrôle d'identité.
Déployer des politiques de sécurité est une recommandation de l'ANSSI relative à l'administration sécurisée d'un SI. PAM facilite le durcissement d'un SI en permettant de définir des stratégies sur mesure en sélectionnant et en configurant les modules de PAM nécessaires. Si aucun module ne convient, PAM spécifie comment réaliser son module.

## Origines

PAM est la solution proposée par Sun Microsystems pour traiter la problématique de l'authentification, formulée en 1995 au sein du groupe de travail security group participant au développement de l'environnement de bureau Common Desktop Environment de l'Open Software Foundation. PAM a été choisie en juin puis décrite en octobre 1995 dans un RFC de l'OSF puis présenté à l'ACM en 1996.
Bien que l'idée fut proposée par des ingénieurs de Sun Microsystems, la première implémentation réalisée en janvier 1996 est le fruit de Marc Ewing (Red Hat Software) au travers du projet Linux-PAM.
Depuis lors, PAM a été portée sur de multiples architectures dont Solaris, Linux, FreeBSD, NetBSD, DragonFly BSD, AIX et HP-UX.

## Modules PAM

Les modules PAM sont une collection extensible de bibliothèques dynamiques ((en) shared objects) (par ex. pam_unix.so) fournissant les six primitives d'authentification définies dans la norme, regroupées dans quatre mécanismes :
* Le mécanisme account fournit une seule primitive : il vérifie si le compte demandé est disponible (si le compte n'est pas arrivé à expiration, si l'utilisateur est autorisé à se connecter à cette heure de la journée, etc.).
* Le mécanisme auth fournit deux primitives ; il assure l'authentification réelle, éventuellement en demandant et en vérifiant un mot de passe, et il définit des « certificats d'identité » tels que l'appartenance à un groupe ou des « tickets » kerberos.
* Le mécanisme password fournit une seule primitive : il permet de mettre à jour le jeton d'authentification (en général un mot de passe), soit parce qu'il a expiré, soit parce que l'utilisateur souhaite le modifier.
* Le mécanisme session fournit deux primitives : mise en place et fermeture de la session. Il est activé une fois qu'un utilisateur a été autorisé afin de lui permettre d'utiliser son compte. Il lui fournit certaines ressources et certains services, par exemple en montant son répertoire personnel, en rendant sa boîte aux lettres disponible, en lançant un agent ssh, etc.

## Extensions

* pam_mount est une extension de PAM permettant de monter un système de fichiers quand un utilisateur se connecte. On pourra par exemple lancer le montage d’un répertoire CIFS en utilisant le mot de passe que l’utilisateur vient de rentrer. De plus, la partition sera démontée quand l’utilisateur va se déconnecter. En le combinant avec le module pam_ldap, il permet d’utiliser le couple SaMBa/OpenLDAP pour l’authentification et la gestion des répertoires utilisateur sous Linux. Mais les fonctions de pam_mount ne s’arrêtent pas là : il permet aussi de monter à la connexion des partitions de nombreux types comme des partitions chiffrées comme loop-AES.

## Critiques de PAM

Malgré des travaux, PAM n'est toujours pas standardisée en 2023. Ainsi, le comportement peut varier entre les diverses implémentations.