PAM
Un article de Projet de documentation fug-fr .
Traduction avec l'aimable autorisation de l'auteur, d'un article intitulé PAM de Dru Lavigne, dans la série FreeBSD Basics sur le site BSDDevCenter d'ONLamp
Sommaire |
[modifier] Introduction:
Un article précédent de cette série a examiné une méthode d'authentification, connue sous le nom d'OTP (mots de passe). Votre système FreeBSD supporte plusieurs méthodes
d'authentification ; vous pouvez choisir ce que peuvent taper vos utilisateurs, en configurant un utilitaire comme PAM, ou Pluggable Module Auhentication.
Comme son nom le suggère, PAM se compose de modules. Vous pouvez voir quels modules ont été
installés sur votre système, en tapant cette commande:
$ ls /usr/lib |grep pam_
Notez que chaque module se termine par so, et d'un nom qui donne une indication de qui ce
module est responsable.
"Pluggable" signifie que cela vous procure une grande flexibilité. Le cadre de travail existe déjà; vous y choisissez simplement les parties que vous souhaitez mettre en application. Il implique également que l'on peut utiliser le module désiré. Chaque module peut être ajouté ou retiré simplement, en ajoutant ou en supprimant un commentaire, ou en changeant un mot-clé dans un fichier de configuration.
[modifier] Variables:
Si vous êtes nouveau avec PAM, vous trouverez d'excellentes informations concernant la mise en oeuvre sur FreeBSD, écrites par la personne même qui en est responsable. Alternativement, si vous installez le répertoire /doc quand vous installez FreeBSD, vous trouverez la même information sur votre disque dur:
$ ls /usr/share/doc/en_US.ISO8859-1/articles/pam
PAM utilise une terminologie que j'ai récapitulée dans les tableaux suivants. D'abord, PAM a été divisé en quatre groupes (facilities). Chaque groupe fournit au moins une fonction, dîtes primitive. Le tableau 1 apparie chaque primitive à sa facility, et inclut une courte description de l'usage de cette primitive:
| Facility | Primitive | Description |
|---|---|---|
| auth | pam_authenticate | Authentification des utilisateurs. |
| pam_setcred | Fixe les limites UID et GID. | |
| account | pam_acct_mgmt | Horaires. |
| session | pam_open_session | Ouvre les entrées dans utmp/wtmp, ssh. |
| pam_close_session | Idem pour fermer. | |
| password | pam_chauthok | Contrôle de validité du password. |
Ensuite, PAM utilise des flags de contrôle pour déterminer quelle politique d'authentification appliquer à l'utilisateur. J'ai récapitulé ces flags dans le tableau 2. Ne vous inquiétez pas si ce n'est pas encore bien compréhensible; cela deviendra plus clair quand nous travaillerons sur un exemple de configuration.
| Flag | Action |
|---|---|
| required | Cette ligne doit réussir. |
| requisite | La requête est refusée si la ligne échoue. |
| sufficient | La requête est acceptée si la ligne réussit. |
| optional | Accepte, si la ligne échoue. |
[modifier] Fichiers, branches BSD:
Maintenant que nous avons une idée de la terminologie employée par PAM, nous sommes prêts à jeter un oeil à sa configuration. Ceci dépendra si vous utilisez FreeBSD 4. ou 5., ou ultérieurs, aussi, j'expliquerais les deux. Si vous êtes peu familier avec la différence entre les deux, une explication peut être trouvée
ici, et dans le "early adopter guide".
Le résultat est que vous ne voulez pas installer de version CURRENT ou RELENG sur votre machine, jusqu'à ce que la branche soit devenue STABLE. Le site FreeBSD publiera une annonce, lorsque ceci se produit. Jusque-là, vous noterez que mes articles mentionneront
FreeBSD 4. et 5., pour vous aider dans une période de transition. Si vous êtes assez
chanceux d'avoir un ordinateur disponible, à utiliser comme machine d'essai, installez une
version STABLE, pour vous donner le temps d'en découvrir les fonctionnalités. Cependant, si vous n'en avez qu'un, vous pouvez toujours installer un FreeBSD, et attendre sa sortie en STABLE.
Pour finir ces explications, le support de pam à partir de FreeBSD 5. a été beaucoup amélioré. la version de PAM a changée, de Linux-PAM en OpenPAM.
Je commencerais par montrer comment configurer PAM sur un système FreeBSD 4., et passerais ensuite à la branche 5.0 .
[modifier] FreeBSD-4. :
Dans FreeBSD 4., le fichier de configuration PAM est /etc./pam.conf. Je n'afficherais pas le fichier entier ici, comme il commence avec environ deux pages de commentaires. Quoique les commentaires répètent l'information des tableaux ci-dessus, ils sont intéressants à lire. Une fois arrivé après les commentaires, vous verrez cette section:
# If the user can authenticate with S/Key, that's sufficient; # allow clear password. Try kerberos, then try plain unix password. login auth sufficient pam_skey.so login auth sufficient pam_opie.so no_fake_prompts #login auth required pam_opieaccess.so login auth requisite pam_cleartext_pass_ok.so #login auth sufficient pam_kerberosIV.so try_first_pass #login auth sufficient pam_krb5.so try_first_pass login auth required pam_unix.so try_first_pass login account required pam_unix.so login password required pam_permit.so login session required pam_permit.so
Chaque ligne dans cette section commence par le mot login, car cette section traite des
procédures de la procédure de connexion. Cette section dédinit comment un utilisateur s'authentifiera quand ils reçevra une invite de login. voyons si nous pouvons en établir la syntaxe.
D'abord, trois de ces lignes sont commentées, car elles commencent par un #. Ceci signifie qu' opieaccess et les deux versions de Kerberos ne sont pas employées par défaut. En second lieu, chaque ligne dans le fichier pam.conf est divisée comme suit:
service facility control flag module name module arguments
Notez que le service est la procédure login, qui supporte chacune des quatre possibilités:
auth, account, password, et session. Concentrons nous sur le service auth pendant un moment. Il y a sept manières différentes pour authentifier un utilisateur: avec s/key, OPIE, opie_access, un mot de passe texte en clair, Kerberos IV, Kerberos 5, et le système traditionnel d'authentification par mot de passe Unix.
[modifier] Flags de contrôle:
Les flags de contrôle déterminent à laquelle, parmi les sept méthodes d'authentification, un
utilisateur est soumi. Il est important de comprendre comment ces indicateurs de commande
agissent l'un sur l'autre, les uns avec les autres, avant que vous commenciez à éditer ce fichier.
Les lignes sont lues dans l'ordre, mais quelques indicateurs de commande indiquent à PAM d'aller lire la fonction de la prochaine ligne, alors que d'autres indicateurs de commande cessent la lecture.
Par exemple, dans la configuration par défaut, pam_unix.so est exigé et pam_cleartext_pass_ok.so est requis. Notez que cette authentification échouera si un utilisateur ne rencontre pas la condition requisite. C'est-à-dire, si un utilisateur saisit un mot de passe texte incorrect, la procédure de connexion échouera. Cependant, si l'utilisateur saisit le mot de passe correct, PAM continuera de lire. Puisqu'il n'y a aucune autre ligne requisite, et que l'authentification par mot de passe Unix est required, le mot de passe correct sera traité comme la méthode d'authentification de l'utilisateur.
[modifier] Possibilités:
Maintenant, notez les lignes qu'utilise sufficient. Si un utilisateur choisit une méthode d'authentification ,labelisée sufficient, la tentative de procédure de connexion réussira, et PAM cessera de lire, et acceptera l'authentification. Cependant, un utilisateur sufficient, n'est pas obligé de s'authentifier en utilisant une méthode marquée comme required.
Nous avons vu ce comportement quand nous avons configuré OPIE. Puisque pam_opie.so est sufficient, l'utilisateur peut ouvrir une session avec son OTP, s'ils choisit de faire ainsi. S'il choisit la bonne configuration, la procédure de connexion sera réussie, et il ne sera plus sollicité par toute autre demande d'information de connexion. Si l'utilisateur décide à la place de ne pas utiliser OTP, il sera invité à entrer le mot de passe, par requisite.
Déplacez-vous maintenant vers le bas, aux quatre dernières lignes dans cette section. Remarquez qu'il y a une ligne pour chaque service, et chaque ligne est exigée. Si jamais vous changez une ligne dans un fichier de configuration PAM, revérifiez bien que la dernière ligne pour chaque service énuméré soit required.
Si vous jetez un coup d'oeil rapide sur le reste de /etc./pam.conf, vous y verrez des sections pour différents services: ftpd, sshd, telnetd, xserver, xdm, gdm, IMAP, pop3', et autres. Ceci laisse la flexibilité d'organiser différents arrangements d'authentification pour différents services. Si un utilisateur tente de se connecter à un système FreeBSD en utilisant un service non mentionné dans le fichier, ils sera traité par l'autre section, qui par défaut, exige un mot de passe Unix:
# If we don't match anything else, default to using getpwnam(). other auth required pam_unix.so try_first_pass other account required pam_unix.so try_first_pass
[modifier] FreeBSD-5. :
L' OpenPAM utilisé dans FreeBSD 5. suit la même logique, mais s'ajoutent davantage de modules, et présente une configuration légèrement différente. Si vous essayez cette commande sur un système FreeBSD 5.0, vous verrez beaucoup plus de modules PAM:
ls /usr/lib |grep pam_
Vous constaterez également que les modules 4. ont été inclus pour la compatibilité:
ls /usr/lib/compat |grep pam_
OpenPAM supporte également /etc./pam.conf, en compatibilité; cependant, ce fichier n'est pas inclus par défaut. Au lieu de cela, vous devriez utiliser la nouvelle disposition:
$ ls /etc/pam.d README imap other rsh xdm ftp kde passwd sshd xserver ftpd login pop3 su gdm rexecd telnetd
Notez que chaque service dans l'ancien /etc./pam.conf est maintenant un fichier séparé dans le répertoire pam.d. Le fichier README commente l'ancienne section, avec les changements.
En plus des nombreux nouveaux modules, davantage de services ont été ajoutés. Les fichiers eux-mêmes sont identiques à /etc./pam.conf, et à moins que le nom de service soit manquant, il est maintenant en nom de fichier. Par exemple, cette ligne dans /etc./pam.conf:
login auth sufficient pam_opie.so no_fake_prompts
Maintenant, cette ligne dans /etc./pam.d/login:
auth sufficient pam_opie.so no_warn no_fake_prompts
[modifier] Configurations:
Avant d'aborder le changement des fichiers par défaut de PAM, vous devriez vous rendre compte que PAM est à configurer progressivement. Je recommande vivement de créer un compte "test", et soyez prêt à expérimenter. D'un terminal virtuel, modifiez la configuration en tant que super-utilisateur. Essayez alors d'ouvrir une session sur un autre terminal virtuel, en tant qu'utilisateur "test", pour voir si vos changements donnent le résultat escompté. De cette façon, si vous tombez sur n'importe quel comportement inattendu, vous pouvez simplement retourner au terminal, d'où vous avez modifié le fichier de configuration, et remodifiez.
Comme exemple, voyons comment on pourrait "forcer" les utilisateurs à utiliser leur mot de passe OTP à la demande de connexion. le man pam_opieaccess donne un conseil sur la façon d'influer sur le choix d'un utilisateur, et le forcer à ouvrir une session en utilisant OTP:
To properly use this module, pam_opie(8) should be marked ``sufficient, and pam_opieaccess should be listed right below it and marked ``requisite.
Il indique également comment ce changement affectera vos utilisateurs:
.The authentication component (pam_sm_authenticate()), returns . PAM_SUCCESS in two cases: . . 1. The user does not have OPIE enabled. . . 2. The user has OPIE enabled, and the remote host is listed as a . trusted host in /etc/opieaccess, and the user does not have a . file named opiealways in his home directory. . . Otherwise, it returns PAM_AUTH_ERR.
[modifier] Compatibilité:
Comparons ces conseils des pages man, aux lignes appropriées dans /etc./pam.conf sur un système FreeBSD 4.:
login auth sufficient pam_skey.so login auth sufficient pam_opie.so no_fake_prompts #login auth required pam_opieaccess.so login auth requisite pam_cleartext_pass_ok.so login auth required pam_unix.so try_first_pass
Dépendant de la date d'installation de FreeBSD, votre ligne pam_opieaccess.so peut indiquer required au lieu de requisite. C'est un "typo" dans pam.conf, car la page manest correcte. Je changerais la ligne, ainsi, elle ressemble maintenant à ceci:
login auth requisite pam_opieaccess.so
[modifier] Authentification utilisateurs:
Maintenant, d'un autre terminal, j'essayerais d'ouvrir une session en tant qu'utilisateur test . Au lieu de donner le mot de passe OTP, j'essayerais de donner un mot de passe réutilisable pour ce compte:
login: test otp-md5 497 dh0908 ext Password: (ici, entrez le pwd réutilisable.) $
Hmmmm. Au premier abord, il semble que le changement de configuration n'a pas imposé de mot de passe OTP, comme l'utilisateur s'est connecté avec succès avec un mot de passe réutilisable.
Améliorons en jetant un oeil dans cette section de la page man:
2. The user has OPIE enabled, and the remote host is listed as a trusted host in /etc/opieaccess, and the user does not have a file named opiealways in his home directory.
Je me demande s'il a quelque chose à faire avec le fichier opiealways ?. Il n'y a aucune page man, et je suis allé chez mon ami google, et cherché opiealways. La toute première réponse m'a apportée The diary of OpenPAM's implementer, qui explique que la présence de ce fichier forcera toujours un utilisateur à utiliser OTP. Ainsi, en tant qu'utilisateur "test", j'ai créé un fichier vide dans mon répertoire local. Alors je me suis déconnecté, et ai essayé de me reconnecter sans utiliser OTP:
$ touch .opiealways
$ exit
login: test
otp-md5 497 dh0908 ext
Password: (here I typed in the reusable password)
pam_opieaccess: pam_sm_authenticate: Refused;
remote host is not in opieaccess
Login incorrect
Voila, en retirant simplement une remarque dans le fichier de configuration de PAM, et en conduisant l'utilisateur par touch.opiealways, il sera maintenant toujours obligé d'utiliser OTP.
[modifier] Ajouter des utilisateurs:
Étant du genre parano, j'ai également testé si le changement de configuration n'avait pas compromis les utilisateurs n'utilisant pas OTP. Je me suis connecté comme utilisateur régulier, reçu l'invite de login normale, et entré avec succès le mot de passe. J'ai poussé un peu plus loin en créant un fichier .opiealways dans un home utilisateur. Puisque l'utilisateur n'était pas dans la base de données OTP, ce fichier n'a pas affecté la procédure de connexion de l'utilisateur. Cependant, il s'ajoute à l'avenir à la base de données OTP, la présence de ce fichier les forcant à utiliser OTP.
Ce comportement peut simplifier les choses, si vous projetez de créer de nouveaux comptes utilisateurs, qui doivent utiliser OTP. Créez le fichier suivant:
$ touch /usr/share/skel/dot.opiealways
Notez que ce fichier squelette sera seulement affecté aux nouveaux utilisateurs que vous venez
de créer. Il ne concerne pas les comptes existants.
Ceci devrait vous permettre de commencer vos propres expériences PAM.
Dru Lavigne enseigne les technologies Marketbridge à Ottawa, et participe à l'Open Ressource Protocole.

