Les programmes qui donnent aux utilisateurs un accès à des privilèges doivent être capables de les identifier. Lorsque vous vous connectez sur le système, vous indiquez votre nom et votre mot de passe. Le processus de connexion vérifie que vous êtes bien la personne que vous prétendez être. Il existe d'autres formes d'identification que l'utilisation des mots de passe, qui peuvent d'ailleurs êtres stockés sous différentes formes.
PAM, qui signifie Pluggable Authentication Modules, permet à l'administrateur de définir une politique d'identification sans avoir à recompiler les programmes concernés. Le contrôle des modules se fait à l'aide d'un fichier de configuration que vous devez éditer.
La plupart des utilisateurs de Red Hat Linux n'auront pas besoin de modifier ce fichier. Lorsque vous utilisez RPM pour installer des programmes qui ont besoin d'une identification, les modifications nécessaires à une identification normale par mot de passe sont automatiquement réalisées. Si vous voulez modifier votre configuration, vous devez savoir à quoi correspond ce fichier.
Le standard PAM définit quatre types de modules. Les modules auth sont utilisés pour une identification normale (nom et mot de passe par exemple). Les modules account vérifient que l'identification est autorisée (vérifie si le compte n'est pas expiré, vérifie que l'utilisateur peut se connecter à cette heure de la journée, ...). Les modules password sont utilisés pour définir les mots de passe. Les modules session sont utilisés après l'identification de l'utilisateur pour qu'il puisse utiliser son compte, monter son répertoire utilisateur ou accéder à sa boîte aux lettres.
Vous avez la possibilité d'utiliser plusieurs modules. Par exemple, rlogin utilise au moins deux méthodes d'identification : si l'identification rhosts réussit vous pouvez vous connecter, si elle échoue, l'identification standard UNIX (mot de passe) est utilisée.
Vous pouvez ajouter des modules à n'importe quel moment, les applications PAM pourront ensuite les utiliser.
Chaque programme qui utilise PAM définit son propre nom de service. Le programme login utilise le type de service login, ftpd le type de service ftp, ... En règle générale, le type de service est le nom du programme utilisé pour accéder au service, et non (s'il y a une différence) celui du programme utilisé pour fournir le service.
Le répertoire /etc/pam.d est utilisé pour configurer toutes les applications PAM (/etc/pam.conf dans les anciennes versions, le fichier pam.conf est toujours lu s'il n'y a pas d'entrée /etc/pam.d/). Chaque application (chaque service, en réalité) possède son propre fichier. Un fichier ressemble à ce qui suit :
#%PAM-1.0 auth required /lib/security/pam_securetty.so auth required /lib/security/pam_pwdb.so shadow nullok auth required /lib/security/pam_nologin.so account required /lib/security/pam_pwdb.so password required /lib/security/pam_cracklib.so password required /lib/security/pam_pwdb.so shadow nullok use_authtok session required /lib/security/pam_pwdb.so
La première ligne (qui commence par le caractère #) est une ligne de commentaire. Les trois lignes suivantes sont utilisées pour l'autorisation de login. La première s'assure, si l'utilisateur tente de se connecter sous root, que le tty sous lequel il est connecté se trouve dans le fichier /etc/securetty, s'il existe. La seconde demande et vérifie le mot de passe. La troisième vérifie l'existence du fichier /etc/nologin, si ce fichier existe le contenu est affiché et si l'utilisateur n'est pas root, la connexion est refusée.
Notez que la vérification s'effectue sur les trois modules, même si elle échoue au premier module. L'utilisateur qui se voit refuser la connexion, n'en connaîtra donc pas (par mesure de sécurité) la raison. Vous pouvez remplacer required par requisite, si un module requisite échoue les modules suivants ne seront pas exécutés.
La cinquième ligne autorise l'accès au compte. Si vous avez par exemple activé les shadow passwords, le module pam_pwdb.so vérifie si le compte n'est pas expiré ou si le mot de passe a été changé alors que la période allouée au changement est déjà expirée.
Si le mot de passe utilisateur est modifié, la sixième ligne indique que c'est le module pam_pwdb.so qui doit être utilisé. (Il en sera ainsi, sauf si le module auth a décidé que le mot de passe doit être changé, si par exemple un shadow password est expiré).
La dernière ligne indique que le module pam_pwdb.so sera utilisé pour gérer la session. Vous pouvez le remplacer ou lui ajouter d'autres modules.
Vous devez respecter l'ordre des lignes qui se trouvent à l'intérieur d'un fichier. L'ordre dans lequel sont appelés les modules required n'est pas très important, mais d'autres drapeaux de contrôle sont disponibles. optional est très rarement utilisé et jamais par défaut sur un système Red Hat Linux. L'ordre est par contre important pour sufficient et requisite.
Jetons un coup d'oeil à la configuration de auth pour rlogin :
auth required /lib/security/pam_securetty.so auth sufficient /lib/security/pam_rhosts_auth.so auth required /lib/security/pam_pwdb.so shadow nullok auth required /lib/security/pam_nologin.so
La configuration est similaire à celle de login, mais un module supplémentaire est utilisé. Les modules sont aussi spécifiés dans un ordre différent.
Premièrement, pam_securetty.so empêche les connexions root depuis les terminaux non sécurisés. Les connexions root sont désactivées. Si vous voulez les réactiver (dans ce cas, nous vous recommandons de ne pas être connecté à Internet et d'utiliser un firewall de qualité), supprimez simplement cette ligne.
Deuxièmement, pam_nologin.so vérifie /etc/nologin, comme spécifié ci dessus.
Troisièmement, si pam_rhosts_auth.so authentifie l'utilisateur, il n'y aura pas de vérification de mot de passe. Si pam_rhosts_auth.so n'authentifie pas l'utilisateur, l'échec d'authentification est ignoré.
Enfin (si pam_rhosts_auth.so n'a pas réussi à authentifier l'utilisateur), le module pam_pwdb.so lance l'authentification normale (par mot de passe).
En cas d'échec, vous pouvez stopper l'authentification au niveau du module pam_securetty.so en remplaçant required par requisite.
Le module pam_pwdb.so détecte automatiquement l'utilisation des shadow passwords et effectue les modifications nécessaires. Consultez la section 11.3 pour plus de détails sur les outils qui gèrent les shadow passwords.
Ceci est une simple introduction à PAM. Vous trouverez d'autres informations dans /usr/doc/pam* : System Administrators' Guide, A Module Writers' Manual, Application Developers's Manuel, et le standard PAM DCE-RFC 86.0. Vous pouvez aussi consulter le site internet Red Hat via :
http://www.redhat.com/linux-info/pam/