1 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.
2 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.
4 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 authentifie l'utilisateur par une demande de mot
de passe ou par une autre méthode.
account restriction du compte : expiration, en fonction
de l'heure, de la machine source, des ressources disponibles.
password Gestion des mots de passe.
session Tout ce qui concerne l'ouverture d'une session,
avant et après.
Le troisième champ est ce que l'on appelle un drapeau de contrôle. Il peut
prendre les valeurs suivantes :
required Doit réussir, mais on continue à tester les
autres modules malgré tout. Echec est renvoyé. L'avantage par rapport à
requisite étant que l'on ne donne pas la raison de l'échec de la connexion.
requisite Doit réussir, on ne continue pas à lire les
autres modules, Echec est renvoyé immédiatement.
optimal Est ignoré, en fait que le test réussisse ou
pas cela ne change pas la suite.
sufficient Si le test est correct, on obtient
immédiatement une acceptation.
En lisant les lignes précédentes, vous comprenez que l'ordre des modules est extrêmement
important.
Le dernier champ indique l'endroit ou se trouvent les modules. Normalement,
ils sont tous dans le même répertoire.
5 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.
6 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
http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/pam.html
TP 1 : Créez un utilisateur. Ne pas lui donner de mot de
passe.
Dans une autre console, se loguer avec ce compte. Peut il se loguer ?
Dans /etc/pam.d/passwd modifier la ligne auth required /lib/security/pam_pwdb.so
shadow nullock en enlevant nullock.
Essayez de vous reloguer avec le compte précédent.
TP 2 : Modifiez la politique de mot de passe.
Dans /etc/pam.d/passwd vérifiez la présence de pam_cracklib.so. Sinon ajoutez
la ligne password required /lib/security/pam_cracklib.so retry=3 minlen=X difok=Y
Ajustez X et Y à votre politique de sécurité.
TP 3 : Dans le fichier /etc/pam.d/login vérifiez la présence de nologin.so. Sinon ajouter la
ligne auth required /lib/security/pam_nologin.so.
Créez un fichier vide touch /etc/nologin. Essayez de vous connecter avec le
compte précédent.
© Philippe Chadefaux - 10/1/2002 -