<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V4.5-Based Extension//EN" "../../../share/xml/freebsd45.dtd"> <!-- - Copyright (c) 2001-2003 Networks Associates Technology, Inc. - All rights reserved. - - This software was developed for the FreeBSD Project by ThinkSec AS and - Network Associates Laboratories, the Security Research Division of - Network Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035 - ("CBOSS"), as part of the DARPA CHATS research program. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. The name of the author may not be used to endorse or promote - products derived from this software without specific prior written - permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. --> <article xmlns:xi="http://www.w3.org/2001/XInclude" lang='fr'> <articleinfo> <title>Pluggable Authentication Modules</title> <abstract> <para>Cet article d�crit les principes sous-jacent et les m�canismes de la biblioth�que PAM, il explique comment configurer PAM, l'int�grer dans les applications, et �crire ses propres modules PAM.</para> &trans.a.mathieu; </abstract> <copyright> <year>2001</year> <year>2002</year> <year>2003</year> <holder>Networks Associates Technology, Inc.</holder> </copyright> <authorgroup> <author> <firstname>Dag-Erling</firstname> <surname>Smørgrav</surname> <contrib>Contributed by </contrib> </author> </authorgroup> <legalnotice> <para>Cet article a �t� �crit pour le Projet FreeBSD par ThinkSec AS et les laboratoires de Networks Associates, la division de recherche en s�curit� de Networks Associates, Inc. sous le contrat DARPA/SPAWAR N66001-01-C-8035 (<quote>CBOSS</quote>), en tant que partie du programme de recherche DARPA CHATS.</para> </legalnotice> <releaseinfo>$FreeBSD$</releaseinfo> </articleinfo> <section id="pam-intro"> <title id="pam-intro.title">Introduction</title> <para>La biblioth�que PAM est une API g�n�ralis�e pour les services relevant de l'authentification permettant à un administrateur syst�me d'ajouter une nouvelle m�thode d'authentification en ajoutant simplement un nouveau module PAM, ainsi que de modifier les r�gles d'authentification en �ditant les fichiers de configuration.</para> <para>PAM a �t� con�u et d�velopp� en 1995 par Vipin Samar et Charlie Lai de Sun Microsystems, et n'a pas beaucoup �volu� depuis. En 1997 l'Open Group publie les premi�res sp�cifications XSSO qui standardisent l'API PAM et ajoute des extensions pour un simple (ou plutot int�gr�) "sign-on". Lors de l'�criture de cet article, la sp�cification n'a toujours pas �t� adopt�e comme standard.</para> <para>Bien que cet article se concentre principalement sur FreeBSD 5.x, qui utilise OpenPAM, il devrait �galement �tre applicable à FreeBSD 4.x qui utilise Linux-PAM, ainsi qu'à d'autres syst�mes d'exploitations tels que Linux ou Solaris.</para> <section id="pam-trademarks"> <title id="pam-trademarks.title">Marques d�pos�es</title> <para>Sun, Sun Microsystems, SunOS and Solaris are trademarks or registered trademarks of Sun Microsystems, Inc.</para> <para>UNIX and The Open Group are trademarks or registered trademarks of The Open Group.</para> <para>All other brand or product names mentioned in this document may be trademarks or registered trademarks of their respective owners.</para> </section> </section> <section id="pam-terms"> <title id="pam-terms.title">Termes et conventions</title> <section id="pam-definitions"> <title id="pam-definitions.title">D�finitions</title> <para>La terminologie de PAM est plut�t confuse. Ni la publication originale de Samar et Lai, ni la sp�cification XSSO n'ont essay� de d�finir formellement des termes pour les acteurs et les entit�s intervenant dans PAM, les termes qu'ils utilisent (mais ne d�finissent pas) sont parfois trompeurs et ambigus. Le premier essai d'�tablir une terminologie consistante et non ambigu� fut un papier �crit par Andrew G. Morgan (l'auteur de Linux-PAM) en 1999. Bien que les choix de Morgan furent un �norme pas en avant, ils ne sont pas parfait d'apr�s l'auteur de ce document. Ce qui suit, largement inspir� par Morgan, est un essai de d�finir pr�cis�ment et sans ambigu�t� des termes pour chaque acteur ou entit� utilis� dans PAM.</para> <glosslist> <glossentry> <glossterm>compte</glossterm> <glossdef> <para>L'ensemble de permissions que le demandeur demande a l'arbitre.</para> </glossdef> </glossentry> <glossentry> <glossterm>demandeur</glossterm> <glossdef> <para>L'utilisateur ou l'entit� demandant authentification.</para> </glossdef> </glossentry> <glossentry> <glossterm>arbitre</glossterm> <glossdef> <para>L'utilisateur ou l'entit� poss�dant les privil�ges n�cessaires pour v�rifier la requ�te du demandeur ainsi que l'autorit� d'accorder ou de rejeter la requ�te.</para> </glossdef> </glossentry> <glossentry> <glossterm>cha�ne</glossterm> <glossdef> <para>Une s�quence de modules qui sera invoqu�e pour r�pondre à une requ�te PAM. La cha�ne comprend les informations concernant l'ordre dans lequel invoquer les modules, les arguments à leur passer et la fa�on d'interpr�ter les r�sultats.</para> </glossdef> </glossentry> <glossentry> <glossterm>client</glossterm> <glossdef> <para>L'application responsable de la requ�te d'authentification au nom du demandeur et de recueillir l'information d'authentification n�cessaire.</para> </glossdef> </glossentry> <glossentry> <glossterm>m�canisme</glossterm> <glossdef> <para>Il s'agit de l'un des quatre groupes basiques de fonctionnalit�s fournit par PAM : authentification, gestion de compte, gestion de session et mise à jour du jeton d'authentification.</para> </glossdef> </glossentry> <glossentry> <glossterm>module</glossterm> <glossdef> <para>Une collection d'une ou plusieurs fonctions impl�mentant un service d'authentification particulier, rassembl�es dans un fichier binaire (normalement chargeable dynamiquement) et identifi� par un nom unique.</para> </glossdef> </glossentry> <glossentry> <glossterm>r�gles</glossterm> <glossdef> <para>Le jeu complet de configuration des r�gles d�crivant comment traiter les requ�tes PAM pour un service particulier. Une r�gle consiste normalement en quatre cha�nes, une pour chaque m�canisme, bien que quelques services n'utilisent pas les quatre m�canismes.</para> </glossdef> </glossentry> <glossentry> <glossterm>serveur</glossterm> <glossdef> <para>L'application agissant au nom de l'arbitre pour converser avec le client, r�cup�rer les informations d'authentification, v�rifier les droits du demandeur et autoriser ou rejeter la requ�te.</para> </glossdef> </glossentry> <glossentry> <glossterm>service</glossterm> <glossdef> <para>Un ensemble de serveurs fournissant des fonctionnalit�s similaires ou li�es et n�cessitant une authentification similaire. Les r�gles de PAM sont d�finies sur un le principe de par-service; ainsi tous les serveurs qui demandent le m�me nom de service seront soumis aux m�mes r�gles.</para> </glossdef> </glossentry> <glossentry> <glossterm>session</glossterm> <glossdef> <para>Le contexte dans lequel le service est d�livr� au demandeur par le serveur. L'un des quatre m�canismes de PAM, la gestion de session, s'en occupe exclusivement par la mise en place et le rel�chement de ce contexte.</para> </glossdef> </glossentry> <glossentry> <glossterm>jeton</glossterm> <glossdef> <para>Un morceau d'information associ� avec un compte tel qu'un mot de passe ou une passphrase que le demandeur doit fournir pour prouver son identit�.</para> </glossdef> </glossentry> <glossentry> <glossterm>transaction</glossterm> <glossdef> <para>Une s�quence de requ�tes depuis le m�me demandeur vers la m�me instance du m�me serveur, commen�ant avec l'authentification et la mise en place de la session et se terminant avec le d�montage de la session.</para> </glossdef> </glossentry> </glosslist> </section> <section id="pam-usage-examples"> <title id="pam-usage-examples.title"> Exemples d'utilisation</title> <para>Cette section a pour but d'illustrer quelques-uns des termes d�finis pr�c�demment à l'aide d'exemples basiques.</para> <section> <title>Client et serveurs ne font qu'un</title> <para>Cet exemple simple montre <literal>alice</literal> utilisant &man.su.1; pour devenir <literal>root</literal>.</para> <screen>&prompt.user; <userinput>whoami</userinput> alice &prompt.user; <userinput>ls -l `which su`</userinput> -r-sr-xr-x 1 root wheel 10744 Dec 6 19:06 /usr/bin/su &prompt.user; <userinput>su -</userinput> Password: <userinput>xi3kiune</userinput> &prompt.root; whoami root </screen> <itemizedlist> <listitem> <para>Le demandeur est <literal>alice</literal>.</para> </listitem> <listitem> <para>Le compte est <literal>root</literal>.</para> </listitem> <listitem> <para>Le processus &man.su.1; est à la fois client et serveur.</para> </listitem> <listitem> <para>Le jeton d'authentification est <literal>xi3kiune</literal>.</para> </listitem> <listitem> <para>L'arbitre est <literal>root</literal>, ce qui explique pourquoi &man.su.1; est setuid <literal>root</literal>.</para> </listitem> </itemizedlist> </section> <section> <title>Client et serveur sont distincts.</title> <para>L'exemple suivant montre <literal>eve</literal> essayant d'initier une connexion &man.ssh.1; vers <literal>login.exemple.com</literal>, en demandant à se logguer en tant que <literal>bob</literal>. La connexion r�ussit. Bob aurait du choisir un meilleur mot de passe !</para> <screen>&prompt.user; <userinput>whoami</userinput> eve &prompt.user; <userinput>ssh bob@login.example.com</userinput> bob@login.example.com's password: <userinput>god</userinput> Last login: Thu Oct 11 09:52:57 2001 from 192.168.0.1 Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD 4.4-STABLE (LOGIN) #4: Tue Nov 27 18:10:34 PST 2001 Welcome to FreeBSD! &prompt.user;</screen> <itemizedlist> <listitem> <para>Le demandeur est <literal>eve</literal>.</para> </listitem> <listitem> <para>Le client d'<literal>eve</literal> est repr�sent� par les processus &man.ssh.1; </para> </listitem> <listitem> <para>Le serveur est le processus &man.sshd.8; sur <literal>login.example.com</literal></para> </listitem> <listitem> <para>Le compte est <literal>bob</literal>.</para> </listitem> <listitem> <para>Le jeton d'identification est <literal>god</literal>.</para> </listitem> <listitem> <para>Bien que cela ne soit pas montr� dans cet exemple, l'arbitre est <literal>root</literal>.</para> </listitem> </itemizedlist> </section> <section> <title>Exemple de r�gles</title> <para>Les lignes qui suivent sont les r�gles par d�faut de <literal>sshd</literal>:</para> <programlisting> sshd auth required pam_nologin.so no_warn sshd auth required pam_unix.so no_warn try_first_pass sshd account required pam_login_access.so sshd account required pam_unix.so sshd session required pam_lastlog.so no_fail sshd password required pam_permit.so</programlisting> <itemizedlist> <listitem> <para>Cette politique s'applique au service <literal>sshd</literal> (qui n'est pas n�cessairement restreint au serveur &man.sshd.8;)</para> </listitem> <listitem> <para><literal>auth</literal>, <literal>account</literal>, <literal>session</literal> et <literal>password</literal> sont des m�canismes.</para> </listitem> <listitem> <para><filename>pam_nologin.so</filename>, <filename>pam_unix.so</filename>, <filename>pam_login_access.so</filename>, <filename>pam_lastlog.so</filename> et <filename>pam_permit.so</filename> sont des modules. Il est clair dans cet exemple que <filename>pam_unix.so</filename> fournit au moins deux m�canismes ( authentification et gestion de compte).</para> </listitem> </itemizedlist> </section> </section> <section id="pam-conventions"> <title id="pam-conventions.title">Conventions</title> <para><!--XXX-->Cette section n'a pas encore �t� �crite.</para> </section> </section> <section id="pam-essentials"> <title id="pam-essentials.title">Les bases de PAM</title> <section id="pam-facilities-primitives"> <title id="pam-facilities-primitives.title">M�canismes et primitives</title> <para>L'API PAM fournit six primitives d'authentification diff�rentes regroup�es dans quatre m�canismes qui seront d�crits dans la partie suivante.</para> <variablelist> <varlistentry> <term><literal>auth</literal></term> <listitem> <para><emphasis>Authentification.</emphasis> Ce m�canisme concerne l'authentification du demandeur et �tablit les droits du compte. Il fournit deux primitives :</para> <itemizedlist> <listitem> <para>&man.pam.authenticate.3; authentifie le demandeur, g�n�ralement en demandant un jeton d'identification et en le comparant a une valeur stock�e dans une base de donn�es ou obtenue par le biais d'un serveur d'authentification.</para> </listitem> <listitem> <para>&man.pam.setcred.3; �tabli les param�tres du compte tel que l'uid, les groupes dont le compte fait parti ou les limites sur l'utilisation des ressources.</para> </listitem> </itemizedlist> </listitem> </varlistentry> <varlistentry> <term><literal>account</literal></term> <listitem> <para><emphasis>Gestion de compte.</emphasis> Ce m�canisme concerne la disponibilit� du compte pour des raisons autres que l'authentification. Par exemple les restrictions bas�es sur l'heure courante ou la charge du serveur. Il fournit une seule primitive:</para> <itemizedlist> <listitem> <para>&man.pam.acct.mgmt.3; v�rifie que le compte demand� est disponible.</para> </listitem> </itemizedlist> </listitem> </varlistentry> <varlistentry> <term><literal>session</literal></term> <listitem> <para><emphasis>Gestion de session.</emphasis> Ce m�canisme concerne la mise en place de la session et sa terminaison, par exemple l'enregistrement de la session dans les journaux. Il fournit deux primitives:</para> <itemizedlist> <listitem> <para>&man.pam.open.session.3; accomplie les t�ches associ�es à la mise en place d'une session : ajouter une entr�e dans les bases <filename>utmp</filename> et <filename>wtmp</filename>, d�marrer un agent SSH...</para> </listitem> <listitem> <para>&man.pam.close.session.3; accomplie les t�ches associ�es à la terminaison d'une session : ajouter une entr�e dans les bases <filename>utmp</filename> et <filename>wtmp</filename>, arr�ter l'agent SSH...</para> </listitem> </itemizedlist> </listitem> </varlistentry> <varlistentry> <term><literal>password</literal></term> <listitem> <para><emphasis>Gestion des mots de passe.</emphasis> Ce m�canisme est utilis� pour modifier le jeton d'authentification associ� à un compte, soit parce qu'il a expir�, soit parce que l'utilisateur d�sire le changer. Il fournit une seule primitive:</para> <itemizedlist> <listitem> <para>&man.pam.chauthtok.3; modifie le jeton d'authentification, et �ventuellement v�rifie que celui-ci est assez robuste pour ne pas �tre devin� facilement ou qu'il n'a pas d�jà utilis�. </para> </listitem> </itemizedlist> </listitem> </varlistentry> </variablelist> </section> <section id="pam-modules"> <title id="pam-modules.title">Modules</title> <para>Les modules sont le concept clef de PAM; apr�s tout ils constituent le <quote>M</quote> de PAM. Un module PAM est lui-m�me un morceau de code qui impl�mente les primitives d'un ou plusieurs m�canismes pour une forme particuli�re d'authentification; par exemple, les bases de mots de passe UNIX que sont NIS, LDAP et Radius.</para> <section id="pam-module-naming"> <title id="pam-module-naming.title">Nom des modules</title> <para>FreeBSD impl�mente chaque m�canismes dans un module distinct nomm� <literal>pam_<replaceable>m�canisme</replaceable>.so</literal> (par exemple <literal>pam_unix.so</literal> pour le m�canisme Unix .) Les autres implementations poss�dent parfois des modules s�par�s pour des m�canismes s�par�s et incluent aussi bien le nom du service que celui du m�canisme dans le nom du module. Un exemple est le module <literal>pam_dial_auth.so.1</literal> de Solaris qui est utilis� pour authentifier les utilisateurs dialup.</para> </section> <section id="pam-module-versioning"> <title id="pam-module-versioning.title">Gestion des versions de module </title> <para>L'impl�mentation originale de PAM par FreeBSD, bas�e sur Linux-PAM, n'utilisait pas de num�ro de version pour les modules PAM. Ceci peut poser des probl�mes avec les applications tiers qui peuvent �tre li�es avec d'anciennes biblioth�ques syst�mes, puisqu'il n'y a pas possibilit� de charger la version correspondante du module d�sir�.</para> <para>Pour sa part, OpenPAM cherche les modules qui ont la m�me version que la biblioth�que PAM (pour le moment 2) et se rabat sur un module sans version si aucun module avec version n'a put �tre charg�. Ainsi les anciens modules peuvent �tre fournis pour les anciennes applications, tout en permettant aux nouvelles applications (ou bien nouvellement compil�es) de tirer parti des modules les plus r�cents.</para> <para>Bien que les modules PAM de Solaris poss�dent g�n�ralement un num�ro de version, ils ne sont pas r�ellement versionn�s car le num�ro correspond à une partie du nom du module et doit �tre inclus dans la configuration.</para> </section> </section> <section id="pam-chains-policies"> <title id="pam-chains-policies.title">Cha�nes et politiques</title> <para>Lorsqu'un <!--XXX-->serveur initie une transaction PAM, la biblioth�que PAM essaie de charger une politique pour le service sp�cifi� dans l'appel a &man.pam.start.3; . La politique indique comment la requ�te d'authentification doit �tre trait�e et est d�finie dans un fichier de configuration. Il s'agit de l'autre concept clef de PAM : la possibilit� pour l'administrateur de configurer la politique de s�curit� d'un syst�me en �ditant simplement une fichier texte.</para> <para>Une politique consiste en quatre cha�nes, une pour chacune des quatre m�canismes de PAM. Chaque cha�ne est une suite de r�gles de configuration, chacune sp�cifiant un module à invoquer, des param�tres, options, à passer au module et un drapeau de contr�le qui d�crit comment interpr�ter le code de retour du module.</para> <para>Comprendre le drapeau de contr�le est essentiel pour comprendre les fichiers de configuration de PAM. Il existe quatre drapeaux de contr�le diff�rents :</para> <variablelist> <varlistentry> <term><literal>binding</literal></term> <listitem> <para>Si le module r�ussit et qu'aucun module pr�c�dent de la cha�ne n'a �chou�, la cha�ne s'interrompt imm�diatement et la requ�te est autoris�e. Si le module �choue le reste de la cha�ne est ex�cut�, mais la requ�te est rejet�e au final.</para> <para>Ce drapeau de contr�le a �t� introduit par Sun Solaris dans la version 9 (SunOS 5.9); il est aussi support� par OpenPAM.</para> </listitem> </varlistentry> <varlistentry> <term><literal>required</literal></term> <listitem> <para>Si le module r�ussit, le reste de la cha�ne est ex�cut�, et la requ�te est autoris�e si aucun des autres modules n'�choue. Si le module �choue, le reste de la cha�ne est ex�cut�, mais au final la requ�te est rejet�e.</para> </listitem> </varlistentry> <varlistentry> <term><literal>requisite</literal></term> <listitem> <para>Si le module r�ussit le reste de la cha�ne est ex�cut�, et la requ�te est autoris�e sauf si d'autres modules �chou�s. Si le module �choue la cha�ne est imm�diatement termin�e et la requ�te est rejet�e.</para> </listitem> </varlistentry> <varlistentry> <term><literal>sufficient</literal></term> <listitem> <para>Si le module r�ussit et qu'aucun des modules pr�c�dent n'a �chou� la cha�ne est imm�diatement termin�e et la requ�te est allou�e. Si le module �choue il est ignore et le reste de la cha�ne est ex�cut�.</para> <para>Puisque la s�mantique de ce drapeau peut �tre un peu confuse, sp�cialement lorsqu'il s'agit de celui du dernier module de la cha�ne, il est recommand� d'utiliser le drapeau <literal>binding</literal> à la place de celui-ci sous la condition que l'impl�mentation le supporte.</para> </listitem> </varlistentry> <varlistentry> <term><literal>optional</literal></term> <listitem> <para>Le module est ex�cut� mais le r�sultat est ignor�. Si tout les modules de la cha�ne sont marqu�s <literal>optional</literal>, toutes les requ�tes seront toujours accept�es.</para> </listitem> </varlistentry> </variablelist> <para>Lorsqu'un serveur invoque l'une des six primitives PAM, PAM r�cup�re la cha�ne du m�canisme à laquelle la requ�te correspond et invoque chaque module de la cha�ne dans l'ordre indiqu�, jusqu'à ce que la fin soit atteinte ou qu'aucune ex�cution suppl�mentaire ne soit n�cessaire (soit à cause du succ�s d'un module en <literal>binding</literal> ou <literal>sufficient</literal>, soit à cause de l'�chec d'un module <literal>requisite</literal>). La requ�te est accept�e si et seulement si au moins un module a �t� invoqu�, et que tout les modules non optionnels ont r�ussi.</para> <para>Notez qu'il est possible, bien que peu courant, d'avoir le m�me module list� plusieurs fois dans la m�me cha�ne. Par exemple un module qui d�termine le nom utilisateur et le mot de passe à l'aide d'un serveur directory peut �tre invoqu� plusieurs fois avec des param�tres sp�cifiant diff�rents serveurs a contacter. PAM consid�re les diff�rentes occurrences d'un m�me module dans une m�me cha�ne comme des modules diff�rents et non li�s.</para> </section> <section id="pam-transactions"> <title id="pam-transactions.title">Transactions</title> <para>Le cycle de vie d'une transaction PAM typique est d�crit ci-dessous. Notez que si l'une de ces �tapes �choue, le serveur devrait reporter un message d'erreur au client et arr�ter la transaction.</para> <orderedlist> <listitem> <para>Si n�cessaire, le serveur obtient les privil�ges de l'arbitre par le biais d'un m�canisme ind�pendant de PAM — g�n�ralement en ayant �t� d�marr� par <literal>root</literal> ou en �tant setuid <literal>root</literal>.</para> </listitem> <listitem> <para>Le serveur appel &man.pam.start.3; afin d'initialiser la biblioth�que PAM et indique le service et le compte cible, et enregistre une fonction de conversation appropri�e.</para> </listitem> <listitem> <para>Le serveur obtient diverses informations concernant la transaction (tel que le nom d'utilisateur du demandeur et le nom d'h�te de la machine sur lequel le client tourne) et les soumet à PAM en utilisant la fonction &man.pam.set.item.3;.</para> </listitem> <listitem> <para>Le serveur appel &man.pam.authenticate.3; pour authentifier le demandeur.</para> </listitem> <listitem> <para>Le serveur appel la fonction &man.pam.acct.mgmt.3; qui v�rifie que le compte est valide et disponible. Si le mot de passe est correct mais a expir�, &man.pam.acct.mgmt.3; retournera <literal>PAM_NEW_AUTHTOK_REQD</literal> à la place de <literal>PAM_SUCCESS</literal>.</para> </listitem> <listitem> <para>Si l'�tape pr�c�dente a retourn� <literal>PAM_NEW_AUTHTOK_REQD</literal>, le serveur appel maintenant &man.pam.chauthtok.3; pour obliger l'utilisateur à changer le jeton d'authentification du compte d�sir�.</para> </listitem> <listitem> <para>Maintenant que le demandeur a �t� correctement authentifi�, le serveur appelle &man.pam.setcred.3; pour obtenir les privil�ges du compte d�sir�. Il lui est possible de faire ceci parce qu'il agit au nom de l'arbitre dont il poss�de les privil�ges.</para> </listitem> <listitem> <para>Lorsque les privil�ges corrects ont �t� �tabli le serveur appelle &man.pam.open.session.3; pour mettre en place la session.</para> </listitem> <listitem> <para>Maintenant le serveur effectue les services demand�s par le client — par exemple fournir un shell au demandeur.</para> </listitem> <listitem> <para>Lorsque le serveur a fini de servir le client, il appelle &man.pam.close.session.3; afin de terminer la session.</para> </listitem> <listitem> <para>Pour finir, le serveur appelle &man.pam.end.3; afin signaler à la biblioth�que PAM que la transaction se termine et qu'elle peut lib�rer les ressources qu'elle a allou� au cours de la transaction.</para> </listitem> </orderedlist> </section> </section> <section id="pam-config"> <title id="pam-config.title">Configuration de PAM</title> <section id="pam-config-file-locations"> <title id="pam-config-file-locations.title">Emplacement des fichiers de configuration</title> <para>Le fichier de configuration de PAM est traditionnellement <filename>/etc/pam.conf</filename>. Ce fichier contient toutes les politiques de PAM pour votre syst�me. Chaque ligne du fichier d�crit une �tape dans une cha�ne, tel que nous allons le voir ci-dessous:</para> <programlisting>login auth required pam_nologin.so no_warn</programlisting> <para>Les champs sont respectivement, le service, le nom du m�canisme, le drapeau de contr�le, le nom du module et les arguments du module. Tout champ additionnel est consid�r� comme argument du module.</para> <para>Une cha�ne diff�rente est construite pour chaque couple service/m�canisme; ainsi, alors que l'ordre des lignes est important lorsqu'il s'agit des m�mes services ou m�canismes, l'ordre dans lequel les diff�rents services et m�canismes apparaissent ne l'est pas — except� l'entr�e pour le service <literal>other</literal>, qui sert de r�f�rence par d�faut et doit �tre plac� à la fin. L'exemple du papier original sur PAM regroupait les lignes de configurations par m�canisme et le fichier <filename>pam.conf</filename> de Solaris le fait toujours, mais FreeBSD groupe les lignes de configuration par service. Toutefois il ne s'agit pas de la seule possibilit� et les autres poss�dent aussi un sens.</para> <para>OpenPAM et Linux-PAM offrent un m�canisme de configuration alternatif o� les politiques sont plac�es dans des fichiers s�par�s portant le nom du service auquel ils s'appliquent. Ces fichiers sont situ�s dans <filename>/etc/pam.d/</filename> et ne contiennent que quatre champs à la place de cinq — le champ contenant le nom du service est omis. Il s'agit du mode par d�faut dans FreeBSD 4.x. Notez que si le fichier <filename>/etc/pam.conf</filename> existe et contient des informations de configuration pour des services qui n'ont pas de politique sp�cifi�e dans <filename>/etc/pam.d</filename>, ils seront utilis�s pour ces services.</para> <para>Le gros avantage de <filename>/etc/pam.d/</filename> sur <filename>/etc/pam.conf</filename> est qu'il est possible d'utiliser la m�me politique pour plusieurs services en liant chaque nom de service à un fichier de configuration. Par exemple pour utiliser la m�me politique pour les services <literal>su</literal> et <literal>sudo</literal>, nous pouvons faire comme ceci :</para> <screen>&prompt.root; <userinput>cd /etc/pam.d</userinput> &prompt.root; <userinput>ln -s su sudo</userinput></screen> <para>Ceci fonctionne car le nom de service est d�termin� a partir du nom de fichier plut�t qu'indiqu� à l'int�rieur du fichier de configuration, ainsi le m�me fichier peut �tre utilis� pour des services nomm�s diff�remment.</para> <para>Un autre avantage est qu'un logiciel tiers peu facilement installer les politiques pour ses services sans avoir besoin d'�diter <filename>/etc/pam.conf</filename>. Pour continuer la tradition de FreeBSD, OpenPAM regardera dans <filename>/usr/local/etc/pam.d</filename> pour trouver les fichiers de configurations; puis si aucun n'est trouv� pour le service demand�, il cherchera dans <filename>/etc/pam.d/</filename> ou <filename>/etc/pam.conf</filename>.</para> <para>Finalement, quelque soit le m�canisme que vous choisissiez, la politique <quote>magique</quote> <literal>other</literal> est utilis�e par d�faut pour tous les services qui n'ont pas leur propre politique.</para> </section> <section id="pam-config-breakdown"> <title id="pam-config-breakdown.title">Breakdown of a configuration line</title> <para>Comme expliqu� dans la section <link linkend="pam-config-file-locations" endterm="pam-config-file-locations.title"></link>, chaque ligne de <filename>pam.conf</filename> consiste en quatre champs ou plus: le nom de service, le nom du m�canisme, le drapeau de contr�le, le nom du module et la pr�sence ou non d'arguments pour le module.</para> <para>Le nom du service est g�n�ralement, mais pas toujours, le nom de l'application auquelle les r�gles s'appliquent. Si vous n'�tes pas s�r, r�f�rez vous à la documentation de l'application pour d�terminer quel nom de service elle utilise.</para> <para>Notez que si vous utilisez <filename>/etc/pam.d/</filename> à la place de <filename>/etc/pam.conf</filename>, le nom du service est sp�cifi� par le nom du fichier de configuration et n'est pas indiqu� dans les lignes de configuration qui, d�s lors, commencent par le nom du m�canisme.</para> <para>Le m�canisme est l'un des quatre mots clef d�crit dans la section <link linkend="pam-facilities-primitives" endterm="pam-facilities-primitives.title"></link></para> <para>De m�me, le drapeau de contr�le est l'un des quatre mots clef d�crits dans la section <link linkend="pam-chains-policies" endterm="pam-chains-policies.title"></link> et d�crit comment le module doit interpr�ter le code de retour du module. Linux-PAM supporte une syntaxe alternative qui vous laisse sp�cifier l'action à associer à chaque code de retour possible; mais ceci devrait �tre �vit� puisque ce n'est pas standard et �troitement li� à la fa�on dont Linux-PAM appelle les services (qui diff�re grandement de la fa�on de Solaris et OpenPAM). C'est sans �tonnement que l'on apprend qu'OpenPAM ne supporte pas cette syntaxe.</para> </section> <section id="pam-policies"> <title id="pam-policies.title">Politiques</title> <para>Pour configurer PAM correctement, il est essentiel de comprendre comment les politiques sont interpr�t�es.</para> <para>Lorsqu'une application appelle &man.pam.start.3; la biblioth�que PAM charge la politique du service sp�cifi� et construit les quatre cha�nes de module (une pour chaque m�canisme). Si une ou plusieurs cha�nes sont vides, les cha�nes de la politique du service <literal>other</literal> sont utilis�es.</para> <para>Plus tard, lorsque l'application appelle l'une des six primitives PAM, la biblioth�que PAM r�cup�re la cha�ne du m�canisme correspondant et appelle la fonction appropri�e avec chaque module list� dans la cha�ne. Apr�s chaque appel d'une fonction de service, le type du module et le code d'erreur sont retourn�s par celle-ci pour d�terminer quoi faire. � quelques exceptions pr�s, dont nous parlerons plus tard, la table suivante s'applique:</para> <table> <title>R�sum� de la cha�ne d'ex�cution PAM </title> <tgroup cols="4"> <colspec colwidth="1*" colname="type"/> <colspec colwidth="1*" colname="success"/> <colspec colwidth="1*" colname="ignore"/> <colspec colwidth="1*" colname="other"/> <thead> <row> <entry colname="type"></entry> <entry colname="success"><literal>PAM_SUCCESS</literal></entry> <entry colname="ignore"><literal>PAM_IGNORE</literal></entry> <entry colname="other"><literal>other</literal></entry> </row> </thead> <tbody> <row> <entry colname="type">binding</entry> <entry colname="success">if (!fail) break;</entry> <entry colname="ignore">-</entry> <entry colname="other">fail = true;</entry> </row> <row> <entry colname="type">required</entry> <entry colname="success">-</entry> <entry colname="ignore">-</entry> <entry colname="other">fail = true;</entry> </row> <row> <entry colname="type">requisite</entry> <entry colname="success">-</entry> <entry colname="ignore">-</entry> <entry colname="other">fail = true; break;</entry> </row> <row> <entry colname="type">sufficient</entry> <entry colname="success">if (!fail) break;</entry> <entry colname="ignore">-</entry> <entry colname="other">-</entry> </row> <row> <entry colname="type">optional</entry> <entry colname="success">-</entry> <entry colname="ignore">-</entry> <entry colname="other">-</entry> </row> </tbody> </tgroup> </table> <para>Si <varname>fail</varname> est vrai à la fin de la cha�ne, ou lorsqu'un <quote>break</quote> est atteint, le dispatcheur retourne le code d'erreur renvoy� par le premier module qui a �chou�. Autrement <literal>PAM_SUCCESS</literal> est retourn�.</para> <para>La premi�re exception est que le code d'erreur <literal>PAM_NEW_AUTHOK_REQD</literal> soit consid�r� comme un succ�s, sauf si aucun module n'�choue et qu'au moins un module retourne <literal>PAM_NEW_AUTHOK_REQD</literal> le dispatcheur retournera <literal>PAM_NEW_AUTHOK_REQD</literal>.</para> <para>La seconde exception est que &man.pam.setcred.3; consid�re les modules <literal>binding</literal> et <literal>sufficient</literal> comme s'ils �taient <literal>required</literal>.</para> <para>La troisi�me et derni�re exception est que &man.pam.chauthtok.3; ex�cute la totalit� de la cha�ne deux fois (la premi�re pour des v�rifications pr�liminaires et la deuxi�me pour mettre le mot de passe) et lors de la premi�re ex�cution il consid�re les modules <literal>binding</literal> et <literal>sufficient</literal> comme s'ils �taient <literal>required</literal>.</para> </section> </section> <section id="pam-freebsd-modules"> <title id="pam-freebsd-modules.title">Les modules PAM de FreeBSD</title> <section id="pam-modules-deny"> <title id="pam-modules-deny.title">&man.pam.deny.8;</title> <para>Le module &man.pam.deny.8; est l'un des modules disponibles les plus simples; il r�pond à n'importe qu'elle requ�te par <literal>PAM_AUTH_ERR</literal>. Il est utile pour d�sactiver rapidement un service (ajoutez-le au d�but de chaque cha�ne), ou pour terminer les cha�nes de modules <literal>sufficient</literal>.</para> </section> <section id="pam-modules-echo"> <title id="pam-modules-echo.title">&man.pam.echo.8;</title> <para>Le module &man.pam.echo.8; passe simplement ses arguments à la fonction de conversation comme un message <literal>PAM_TEXT_INFO</literal>. Il est principalement utilis� pour le debogage mais il peut aussi servir à afficher un message tel que <quote>Les acc�s ill�gaux seront poursuivits</quote> avant de commencer la proc�dure d'authentification.</para> </section> <section id="pam-modules-exec"> <title id="pam-modules-exec.title">&man.pam.exec.8;</title> <para>Le module &man.pam.exec.8; prend comme premier argument le nom du programme à ex�cuter, les arguments restant �tant utilis�s comme arguments pour ce programme. L'une des applications possibles est d'utiliser un programme qui monte le r�pertoire de l'utilisateur lors du login.</para> </section> <section id="pam-modules-ftp"> <title id="pam-modules-ftp.title">pam_ftp(8)</title> <para>Le module pam_ftp(8)</para> </section> <section id="pam-modules-ftpusers"> <title id="pam-modules-ftpusers.title">&man.pam.ftpusers.8;</title> <para>Le module &man.pam.ftpusers.8;</para> </section> <section id="pam-modules-group"> <title id="pam-modules-group.title">&man.pam.group.8;</title> <para>Le module &man.pam.group.8; accepte ou rejette le demandeur à partir de son appartenance à un groupe particulier (g�n�ralement <literal>wheel</literal> pour &man.su.1;). Il a pour but premier de conserver le comportement traditionnel de &man.su.1; mais poss�de d'autres applications comme par exemple exclure un certain groupe d'utilisateurs d'un service particulier.</para> </section> <section id="pam-modules-krb5"> <title id="pam-modules-krb5.title">&man.pam.krb5.8;</title> <para>Le module &man.pam.krb5.8; </para> </section> <section id="pam-modules-ksu"> <title id="pam-modules-ksu.title">&man.pam.ksu.8;</title> <para>Le module &man.pam.ksu.8; </para> </section> <section id="pam-modules-lastlog"> <title id="pam-modules-lastlog.title">&man.pam.lastlog.8;</title> <para>Le module &man.pam.lastlog.8; </para> </section> <section id="pam-modules-login-access"> <title id="pam-modules-login-access.title">&man.pam.login.access.8;</title> <para>Le module &man.pam.login.access.8; </para> </section> <section id="pam-modules-nologin"> <title id="pam-modules-nologin.title">&man.pam.nologin.8;</title> <para>Le module &man.pam.nologin.8; </para> </section> <section id="pam-modules-opie"> <title id="pam-modules-opie.title">&man.pam.opie.8;</title> <para>Le module &man.pam.opie.8; impl�mente la m�thode d'authentification &man.opie.4;. Le syst�me &man.opie.4; est un m�canisme de challenge-response o� la r�ponse à chaque challenge est une fonction directe du challenge et une phrase de passe, ainsi la r�ponse peut facilement �tre calcul�e <quote>en temps voulu</quote> par n'importe qui poss�dant la phrase de passe ce qui �limine le besoin d'une liste de mots de passe. De plus, puisque &man.opie.4; ne r�utilise jamais un mot de passe qui a re�u une r�ponse correcte, il n'est pas vuln�rable aux attaques bas�e sur le rejouage.</para> </section> <section id="pam-modules-opieaccess"> <title id="pam-modules-opieaccess.title">&man.pam.opieaccess.8;</title> <para>Le module &man.pam.opieaccess.8; est un compagnon du module &man.pam.opie.8;. Son but est de renforcer les restrictions codifi�es dans &man.opieaccess.5;, il r�gule les conditions sous lesquelles un utilisateur qui normalement devrait s'authentifier par &man.opie.4; est amen� à utiliser d'autres m�thodes. Ceci est g�n�ralement utilis� pour interdire l'authentification par mot de passe depuis des h�tes non digne de confiance.</para> <para>Pour �tre r�ellement effectif, le module &man.pam.opieaccess.8; doit �tre list� comme <literal>requisite</literal> imm�diatement apr�s une entr�e <literal>sufficient</literal> pour &man.pam.opie.8; et avant tout autre module, dans la cha�ne <literal>auth</literal>.</para> </section> <section id="pam-modules-passwdqc"> <title id="pam-modules-passwdqc.title">&man.pam.passwdqc.8;</title> <para>Le module &man.pam.passwdqc.8; </para> </section> <section id="pam-modules-permit"> <title id="pam-modules-permit.title">&man.pam.permit.8;</title> <para>Le module &man.pam.permit.8; est l'un des modules disponibles les plus simples; il r�pond à n'importe quelle requ�te par <literal>PAM_SUCCESS</literal>. Il est utile pour les services o� une ou plusieurs cha�nes auraient autrement �t� vides.</para> </section> <section id="pam-modules-radius"> <title id="pam-modules-radius.title">&man.pam.radius.8;</title> <para>Le module &man.pam.radius.8; </para> </section> <section id="pam-modules-rhosts"> <title id="pam-modules-rhosts.title">&man.pam.rhosts.8;</title> <para>Le module &man.pam.rhosts.8; </para> </section> <section id="pam-modules-rootok"> <title id="pam-modules-rootok.title">&man.pam.rootok.8;</title> <para>Le module &man.pam.rootok.8; retourne un succ�s si et seulement si l'identifiant d'utilisateur r�el du processus appelant est 0. Ceci est utile pour les services non bas�s sur le r�seau tel que &man.su.1; ou &man.passwd.1; o� l'utilisateur <literal>root</literal> doit avoir un acc�s automatique.</para> </section> <section id="pam-modules-securetty"> <title id="pam-modules-securetty.title">&man.pam.securetty.8;</title> <para>Le module &man.pam.securetty.8; </para> </section> <section id="pam-modules-self"> <title id="pam-modules-self.title">&man.pam.self.8;</title> <para>Le module &man.pam.self.8; retourne un succ�s si et seulement si le nom du demandeur correspond au nom du compte d�sir�. Il est utile pour les services non bas�s sur le r�seau tel que &man.su.1; o� l'identit� du demandeur peut �tre v�rifi�e facilement .</para> </section> <section id="pam-modules-ssh"> <title id="pam-modules-ssh.title">&man.pam.ssh.8;</title> <para>Le module &man.pam.ssh.8; </para> </section> <section id="pam-modules-tacplus"> <title id="pam-modules-tacplus.title">&man.pam.tacplus.8;</title> <para>Le module &man.pam.tacplus.8; </para> </section> <section id="pam-modules-unix"> <title id="pam-modules-unix.title">&man.pam.unix.8;</title> <para>Le module &man.pam.unix.8; impl�mente l'authentification Unix traditionnelle par mot de passe, il utilise &man.getpwnam.3; pour obtenir le mot de passe du compte vis� et le compare avec celui fournit par le demandeur. Il fournit aussi des services de gestion de compte (d�sactivation du compte et date d'expiration) ainsi que des services pour le changement de mot de passe. Il s'agit certainement du module le plus utile car la plupart des administrateurs d�sirent garder le comportement historique pour quelques services.</para> </section> </section> <section id="pam-appl-prog"> <title id="pam-appl-prog.title">Programmation d'applications PAM </title> <para><!--XXX-->Cette section n'a pas encore �t� �crite.</para> <!-- Note that while the original PAM paper includes a sample PAM application that calls pam_open_session() before pam_setcred(), the Linux-PAM documentation states that pam_setcred() must be called first, which makes more sense. Also note that the example in the paper calls setgid(), initgroups() and setuid() itself rather than rely on pam_setcred() to do it. --> </section> <section id="pam-module-prog"> <title id="pam-module-prog.title">Programmation de modules PAM</title> <para><!--XXX-->Cette section n'a pas �t� encore �crite.</para> </section> <appendix id="pam-sample-appl"> <title id="pam-sample-appl.title">Exemples d'application PAM </title> <para>Ce qui suit est une impl�mentation minimale de &man.su.1; en utilisant PAM. Notez qu'elle utilise la fonction de conversation &man.openpam.ttyconv.3; sp�cifique à OpenPAM qui est prototyp�e dans <filename class="headerfile">security/openpam.h</filename>. Si vous d�sirez construire cette application sur un syst�me utilisant une biblioth�que PAM diff�rente vous devrez fournir votre propre fonction de conversation. Une fonction de conversation robuste est �tonnamment difficile à impl�menter; celle pr�sent�e dans l'appendice<link linkend="pam-sample-conv" endterm="pam-sample-conv.title"></link> est un bon point de d�part, mais ne devrait pas �tre utilis�e dans des applications r�elles.</para> <programlisting> <xi:include href="su.c" parse="text"/> </programlisting> </appendix> <appendix id="pam-sample-module"> <title id="pam-sample-module.title">Exemple d'un module PAM</title> <para>Ce qui suit est une impl�mentation minimale de &man.pam.unix.8; offrant uniquement les services d'authentification. Elle devrait compiler et tourner avec la plupart des impl�mentations PAM, mais tire parti des extensions d'OpenPAM si elles sont disponibles : notez l'utilisation de &man.pam.get.authtok.3; qui simplifie �norm�ment l'affichage de l'invite pour demander le mot de passe à l'utilisateur.</para> <programlisting> <xi:include href="pam_unix.c" parse="text"/> </programlisting> </appendix> <appendix id="pam-sample-conv"> <title id="pam-sample-conv.title">Exemple d'une fonction de conversation PAM</title> <para>La fonction de conversation pr�sent�e ci-dessous est une version grandement simplifi�e de la fonction &man.openpam.ttyconv.3; d'OpenPAM. Elle est pleinement fonctionnelle et devrait donner au lecteur une bonne id�e de comment doit se comporter une fonction de conversation, mais elle est trop simple pour une utilisation r�elle. M�me si vous n'utilisez pas OpenPAM, N'h�sitez pas à t�l�charger le code source et d'adapter &man.openpam.ttyconv.3; à vos besoins, nous pensons qu'elle est raisonnablement aussi robuste qu'une fonction de conversation orient�e tty peut l'�tre.</para> <programlisting> <xi:include href="converse.c" parse="text"/> </programlisting> </appendix> <bibliography id="pam-further"> <title id="pam-further.title">Lectures compl�mentaires</title> <abstract> <para>Ceci est une liste de documents concernant PAM et les domaines gravitant autours. Elle n'a pas la pr�tention d'�tre compl�te.</para> </abstract> <bibliodiv> <title>Publications</title> <biblioentry> <title><ulink url="http://www.sun.com/software/solaris/pam/pam.external.pdf"> Rendre les services de connexion ind�pendants des technologies d'authentification </ulink></title> <authorgroup> <author> <surname>Samar</surname> <firstname>Vipin</firstname> </author> <author> <surname>Lai</surname> <firstname>Charlie</firstname> </author> </authorgroup> <orgname>Sun Microsystems</orgname> </biblioentry> <biblioentry> <title><ulink url="http://www.opengroup.org/pubs/catalog/p702.htm">X/Open Single Sign-on Preliminary Specification</ulink></title> <orgname>The Open Group</orgname> <isbn>1-85912-144-6</isbn> <pubdate>June 1997</pubdate> </biblioentry> <biblioentry> <title><ulink url="http://www.kernel.org/pub/linux/libs/pam/pre/doc/current-draft.txt"> Pluggable Authentication Modules</ulink></title> <author> <surname>Morgan</surname> <firstname>Andrew</firstname> <othername role="mi">G.</othername> </author> <pubdate>October 6, 1999</pubdate> </biblioentry> </bibliodiv> <bibliodiv> <title>Guides utilisateur</title> <biblioentry> <title><ulink url="http://www.sun.com/software/solaris/pam/pam.admin.pdf">Administration de PAM </ulink></title> <orgname>Sun Microsystems</orgname> </biblioentry> </bibliodiv> <bibliodiv> <title>Page internet li�es</title> <biblioentry> <title><ulink url="http://openpam.sourceforge.net/">La page d'OpenPAM</ulink></title> <author> <surname>Smørgrav</surname> <firstname>Dag-Erling</firstname> </author> <orgname>ThinkSec AS</orgname> </biblioentry> <biblioentry> <title><ulink url="http://www.kernel.org/pub/linux/libs/pam/">La page de Linux-PAM</ulink></title> <author> <surname>Morgan</surname> <firstname>Andrew</firstname> <othername role="mi">G.</othername> </author> </biblioentry> <biblioentry> <title><ulink url="http://wwws.sun.com/software/solaris/pam/">La page de Solaris PAM</ulink></title> <orgname>Sun Microsystems</orgname> </biblioentry> </bibliodiv> </bibliography> </article>