Table des matières
Pour quoi faire ?
Les PAM (pluggable module authentification) est un moyen modulable d'authentifier des utilisateurs. On peut ainsi définir des stratégies sans avoir à recompiler les programmes qui supportent PAM. En fait PAM, évite que chaque application ne vous redemande une authentification avec des règles différentes à chaque fois. Avez vous besoin de toucher à cela? La plupart du temps non, mais si vous souhaitez renforcer la sécurité (obliger des mots de passe qui ne sont pas dans un dictionnaire par exemple), l'uniformiser ou adopter une autre méthode d'authentification (ldap par exemple) alors la réponse est oui.
L'installation
Il est installé sur tous les unix - linux par défaut. Toutefois il existe des petites différences. Dans certains cas on trouve l'ensemble de la configuration dans /etc/pam.conf (BSD), sous RedHat, Mandrake on a un fichier par service dans /etc/pam.d/. Si le fichier /etc/pam.d correspondant existe le fichier /etc/pam.conf est ignoré. Le fichier principal dans le cas de l'existence de /etc/pam.d est system-auth. Les modules appelés dans les différents fichiers de configuration se trouvent dans /lib/security (ou /usr/lib/) cela dépend de la distribution. Vérifiez donc que le module que vous souhaitez utiliser existe. Enfin on trouve dans /etc/security des fichiers complémentaires (access.conf, group.conf, limits.conf, time.conf) utilisés par certaines applications.
La syntaxe de configuration
Il y a une petite différence si vous avez cela dans pam.conf ou dans /etc/pam.d, mais le principe est le même.
login auth required /lib/security/pam_securetty.so login account requisite /lib/security/pam_roles.so
Voilà deux lignes seulement pour vous montrer la syntaxe. Le premier champ indique le nom de l'application. Il n'existe que pour le fichier pam.conf. Le deuxième indique le type de module. Il peut prendre les valeurs suivantes :
- auth : Cette interface de module sert à authentifier l'utilisateur. Elle demande par exemple la saisie d'un mot de passe pour lequel elle vérifie la validité. Les modules avec cette interface peuvent également établir des certificats d'identité, tels que l'appartenance à un groupe ou des tickets Kerberos.
- account : Cette interface de module sert à vérifier que l'accès est bien autorisé. Par exemple, elle peut vérifier si un compte utilisateur a expiré ou non, ou bien si l'utilisateur est autorisé à se connecter à un moment donné de la journée.
- password : Cette interface de module sert à définir et vérifier les mots de passe.
- session : Cette interface de module sert à configurer et gérer des sessions d'utilisateurs. Les modules ayant cette interface peuvent également effectuer des tâches supplémentaires requises pour autoriser l'accès, comme par exemple pour monter le répertoire personnel d'un utilisateur ou activer sa boîte aux lettres.
comportement du module
- required : Le module doit être vérifié avec succès pour que l'authentification puisse se poursuivre. Si la vérification d'un module de type required échoue, l'utilisateur n'en est pas averti tant que tous les modules associés à cette interface n'ont pas été vérifiés.
- requisite : Le module doit être vérifié avec succès pour que l'authentification puisse se poursuivre. Cependant, si la vérification d'un module de type requisite échoue, l'utilisateur en est averti immédiatement par le biais d'un message lui indiquant l'échec du premier module de types required ou requisite.
- sufficient : En cas d'échec, les vérifications de modules sont ignorées. Toutefois, si la vérification d'un module de type sufficient est réussie et qu'aucun module précédent de type required n'a échoué, aucun autre module de ce type n'est nécessaire et l'utilisateur sera authentifié auprès du service.
- optional : le succès ou failure de ce module n'a pas de conséquences.
- include : permet d'inclure les règles d'un autre fichier commençant par le même champ type.
Modules à connaître
- pam_cracklib : Permet d'accepter ou de rejeter un mot de passe, si celui-ci se trouve dans un dictionnaire. Il permet aussi de vérifier que vous ne réutilisez pas le même mot de passe. Vous pouvez le faire suivre de retry=n (le nombre de tentatives) minlen=n (la longueur imposée) difok=n (nombre de caractères qui sont dans le vieux mot de passe et que l'on ne peut pas retrouver dans le nouveau).
- pam_env : Permet de spécifier des variables d'environnements spécifiées dans /etc/security/pam_env.conf à tout utilisateur qui se connecte sur la machine.
- pam_unix : Module de base. Gère à la mode unix la politique d'authentification. Il peut être avec les quatre types de modules : account (établi la validité utilisateur/mot de passe et peut forcer la modification de celui là), auth (compare avec la base le mot de passe), password (la politique de changement du mot de passe), session (pour loguer les connexions).
Vous pouvez associer quelques options dont : nullock pour autoriser un mot de passe vide, md5 pour le type de cryptage, debug pour loguer les informations à syslog, remember=n pour ce souvenir des n derniers mots de passe utilisés.
- pam_pwdb : module de base, qui a les mêmes options que pam_unix.
- pam_time : autorise un accès par heure. La configuration se faisant dans le fichier /etc/security/time.conf.
- pam_wheel : permet de limiter l'accès à root via la commande su qu'aux seuls membres du groupe wheel. On peut changer le nom du groupe par défaut avec l'option group=mon_group.
- pam_limits : Permet de limiter les ressources mis à la disposition d'un utilisateur. Il faut alors configurer le fichier /etc/security/limits.conf.
- pam_nologin : permet de désactiver les comptes. Il faut alors créer le fichier /etc/nologin et alors il n'y a plus que root qui puisse se connecter.
- pam_access : Ce module permet de contrôler les utilisateurs par nom, machine, domaine, adresse IP, terminal. Vous devez alors configurer le fichier /etc/security/access.conf
- pam_deny : comme sont nom l'indique. Vous pouvez (devez !) l'utiliser dans /etc/security/other pour auth, account, password et session avec required. Si dans le répertoire /etc/security vous avez des noms d'applications que vous n'utilisez pas vous pouvez renommer ces fichiers avec un autre nom au cas..! Si quelqu'un cherche à utiliser l'application le other sera alors utilisé par défaut.
- pam_securrety : Vérifie que le compte root a la possibilité de se connecter sur cette console. Pour cela il faut qu'elle soit indiquée dans le fichier /etc/securrety.
- pam_warm : log les informations à syslog
- pam_console : permet de spécifier les autorisations d'accès à la console. Il faut alors configurer /etc/security/console.perms.
- pam_stack : généralement suivi de service=system-auth, permet de renvoyer sur system-auth.
- pam_ldap : permet d'effectuer l'authentification sur une base ldap. Ce module demande une documentation à lui tout seul.
Arguments
- debug Augmente les logs dans syslog
- use_first_pass Reprend le mot de passe fourni par le module précédent pour éviter à l’utilisateur de le saisir plusieurs fois
- nullok Autorise les mots de passe vides
Exemple
Voici le fichier /etc/pam.d/login.
#%PAM-1.0 auth required /lib/security/pam_securetty.so auth required /lib/security/pam_unix.so shadow nullok auth required /lib/security/pam_nologin.so account required /lib/security/pam_unix.so password required /lib/security/pam_cracklib.so password required /lib/security/pam_unix.so shadow nullok use_authtok session required /lib/security/pam_unix.so
- Ligne 1 est un commentaire.
- Ligne 2 interdit à root de se connecter sur la console (enfin directement on peut utiliser su), si la console n'est pas autorisée dans /etc/securrety.
- Ligne 3 Vérifie le mot de passe, on peut aussi utiliser pam_pwdb
- Ligne 4 Vérifie l'existence du fichier /etc/nologin. Si celui-ci existe, il n'est plus possible de ce loguer sauf pour root. Affiche son contenu.
- Ligne 5 Comptabilise la “vie” du mot de passe.
- Ligne 6 Teste la validité du mot de passe.
- Ligne 7 Impose les règles de modification du mot de passe.
- Ligne 8 Ne fait rien, mais indique qu'il doit être utilisé pour gérer la session.
7 Les liens
Page de man en français : http://www.delafond.org/traducmanfr/man/man8/pam.8.html Reference : http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/pam.html