PAM

Un article de Projet de documentation fug-fr .

Jump to: navigation, search

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:

Tableau 1: Quatre possibilités pour six primitives:
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.

Tableau 2: Flags de contrôle:
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.

Page d'accueil