Lorsque vous arrivez sur un système de type Unix, il est nécessaire de vous identifier. Une fois chose faite, vous devez vous authentifier, c'est-à-dire prouver votre identité. La forme sous laquelle on rencontre le plus souvent cette identification / authentification est bien sûr la procédure de login (identification) et de mot de passe (authentification).
Pour identifier un utilisateur à son arrivée, le système demande un nom d'utilisateur (login), puis un mot de passe. Ce mot de passe est ensuite crypté, puis comparé avec celui correspondant au login dans la base d'utilisateurs /etc/passwd ou /etc/shadow. Le problème de cette méthode "traditionnelle" est la difficulté de changer la procédure. Prenons par exemple le cas simple selon lequel vous ne souhaitez autoriser les logins du root que sur les deux premières consoles (tty1 et tty2). Vous voilà obligé de modifier les sources des programmes concernés, avec tous les risques que cela comporte.
Heureusement, voici PAM. Les Pluggable Authentication Modules sont destinés à simplifier la vie de l'administrateur système. Ils permettent de changer de manière élégante la politique d'authentification sans avoir à recompiler le moindre programme. La seule chose à faire est de modifier un fichier de configuration.
Modules
Comme son nom l'indique, PAM est constitué de modules. Ainsi, pour chaque type de service, vous pouvez définir le ou les modules de votre choix. Il existe quatre familles de modules :
Il est également possible de combiner les modules pour obtenir les effets de son choix avec les services de son choix. Chaque application utilisant PAM définit un service. Ainsi, le programme login utilise le service ... login, ftpd le service ftp, rlogin le service rlogin, etc.
Configuration
La plupart des distributions récentes incluent PAM. Pour vérifier si PAM est installé sur votre système, rien de plus simple. Jetez simplement un oeil au répertoire /etc. Si celui-ci contient un sous-répertoire pam.d, contenant lui-même un grand nombre de fichiers, PAM est présent. Si votre répertoire /etc contient un pam.conf mais pas de /etc/pam.d, vous possédez une version plus ancienne de PAM. Le reste de cet article ne sera probablement pas en accord avec votre configuration.
Dans /etc/pam.d sont placés autant de fichiers qu'il existe de services utilisant PAM sur le système. Voici un exemple de noms de fichiers présents dans le répertoire : chfn, chsh, ftpd, login, other, passwd, ppp, proftpd, rexec, rlogin, rsh, samba, su, sul, sudo, xdm, xlock, xscreensaver. On reconnaît rapidement des noms familiers correspondant à certaines applications. Regardons de près l'un des fichiers, su, par exemple. Celui-ci correspond au service su fourni par la commande du même nom qui permet à un utilisateur quelconque de passer temporairement en root :
#%PAM-1.0 auth sufficient /lib/security/pam_rootok.so auth required /lib/security/pam_unix.so nullok # set_secrpc account required /lib/security/pam_unix.so password required /lib/security/pam_unix.so # strict=false session required /lib/security/pam_unix.so debug # trace or none
La première ligne offre une facilité pour le root. Celui-ci n'est pas obligé de fournir un mot de passe (il est vrai que, pour ce service, autoriser le root à devenir root est un peu léger mais ce module s'avère bien pratique pour d'autres services). La seconde ligne définit, grâce au module pam_unix, qu'un mot de passe vide (null) est valide. Les trois dernières lignes définissent les choix concernant l'autorisation d'identification, la vérification du mot de passe et la sécurité de la session. Ajoutons à présent la ligne :
auth sufficient /lib/security/pam_permit.so
Le module pam_permit ne fait qu'une seule chose, renvoyer PAM_SUCCESS quand on l'interroge. Ainsi, étant donné qu'on signale que ce module est suffisant (sufficient) pour garantir la sécurité, n'importe quel utilisateur peut utiliser su sans aucun mot de passe (dangereux non ?). Voyons maintenant plus en détail ma syntaxe utilisable dans les fichiers de service. Celle-ci est la suivante :
famille drapeau module argument(s)
Nous avons déjà parlé des familles de modules, nous ne n'y reviendrons donc pas. drapeau indique comment la bibliothèque PAM doit réagir en fonction du résultat retourné par un module. Plus haut, nous avons vu qu'une ligne avec un drapeau sufficient avait la possibilité de définir seule le succès ou l'échec dans l'accès au service. Il existe trois autres drapeaux :
Le champ modules doit être complété avec le chemin complet et le nom du module (habituellement /lib/security/pam_*.so). Dernier champ, argument passe des paramètres au module. Il s'agit principalement d'options permettant de garder des traces de l'activité de PAM dans un journal grâce à un appel syslog.
Quelques modules
Nous ne listerons pas ici tous les modules existants. En effet, il en existe des dizaines permettant des possibilités quasi infinies.
Info
Si vous êtes intéressé par PAM ou le développement de nouveaux modules, la première source d'information est la documentation de PAM. Celle-ci est répartie en trois manuels (administrateur, développeur de modules, développeur d'applications). Elle est disponible en ligne ou sous forme de fichiers ps sur http://www.kernel.org/pub/linux/libs/pam/.
Concernant l'utilisation de chaque module, vous devez avoir dans votre répertoire /usr/doc la documentation de PAM comprenant la plupart des informations nécessaires.