doc/fr_FR.ISO8859-1/articles/pam/article.xml
2013-11-13 07:52:45 +00:00

1321 lines
53 KiB
XML
Raw Blame History

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.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="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="fr">
<info><title>Pluggable Authentication Modules</title>
<abstract>
<para>Cet article d<>crit les principes sous-jacent et les
m<>canismes de la biblioth<74>que PAM, il explique comment
configurer PAM, l'int<6E>grer dans les applications, et
<20>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><personname><firstname>Dag-Erling</firstname><surname>Sm&oslash;rgrav</surname></personname><contrib>Contributed by </contrib></author>
</authorgroup>
<legalnotice xml:id="pam-legalnotice">
<para>Cet article a <20>t<EFBFBD> <20>crit pour le Projet FreeBSD par
ThinkSec AS et les laboratoires de Networks Associates, la
division de recherche en s<>curit<69> 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>
</info>
<section xml:id="pam-intro">
<title xml:id="pam-intro.title">Introduction</title>
<para>La biblioth<74>que PAM est une API g<>n<EFBFBD>ralis<69>e pour les
services relevant de l'authentification permettant &agrave; un
administrateur syst<73>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 <20>ditant les
fichiers de configuration.</para>
<para>PAM a <20>t<EFBFBD> con<6F>u et d<>velopp<70> en 1995 par Vipin Samar et
Charlie Lai de Sun Microsystems, et n'a pas beaucoup <20>volu<6C>
depuis. En 1997 l'Open Group publie les premi<6D>res sp<73>cifications
XSSO qui standardisent l'API PAM et ajoute des extensions pour
un simple (ou plutot int<6E>gr<67>) &quot;sign-on&quot;. Lors de l'<27>criture de cet article, la sp<73>cification n'a
toujours pas <20>t<EFBFBD> adopt<70>e comme standard.</para>
<para>Bien que cet article se concentre principalement sur
FreeBSD 5.x, qui utilise OpenPAM, il devrait <20>galement <20>tre
applicable &agrave; FreeBSD 4.x qui utilise Linux-PAM, ainsi qu'&agrave; d'autres
syst<73>mes d'exploitations tels que Linux ou Solaris.</para>
<section xml:id="pam-trademarks">
<title xml:id="pam-trademarks.title">Marques d<>pos<6F>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 xml:id="pam-terms">
<title xml:id="pam-terms.title">Termes et conventions</title>
<section xml:id="pam-definitions">
<title xml:id="pam-definitions.title">D<EFBFBD>finitions</title>
<para>La terminologie de PAM est plut<75>t confuse. Ni la
publication originale de Samar et Lai, ni la sp<73>cification XSSO
n'ont essay<61> de d<>finir formellement des termes pour les acteurs
et les entit<69>s intervenant dans PAM, les termes qu'ils
utilisent (mais ne d<>finissent pas) sont parfois trompeurs et
ambigus. Le premier essai d'<27>tablir une terminologie
consistante et non ambigu<67> fut un papier <20>crit par Andrew
G. Morgan (l'auteur de Linux-PAM) en 1999. Bien que les choix de
Morgan furent un <20>norme pas en avant, ils ne sont pas parfait
d'apr<70>s l'auteur de ce document. Ce qui suit,
largement inspir<69> par Morgan, est un essai de d<>finir pr<70>cis<69>ment et sans
ambigu<67>t<EFBFBD> des termes pour chaque acteur ou entit<69> utilis<69> 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<69> demandant
authentification.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>arbitre</glossterm>
<glossdef>
<para>L'utilisateur ou l'entit<69> poss<73>dant les privil<69>ges n<>cessaires
pour v<>rifier la requ<71>te du demandeur ainsi que l'autorit<69>
d'accorder ou de rejeter la requ<71>te.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>cha<EFBFBD>ne</glossterm>
<glossdef>
<para>Une s<>quence de modules qui sera invoqu<71>e pour r<>pondre &agrave;
une requ<71>te PAM. La cha<68>ne comprend les informations concernant
l'ordre dans lequel invoquer les modules, les arguments &agrave; leur
passer et la fa<66>on d'interpr<70>ter les r<>sultats.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>client</glossterm>
<glossdef>
<para>L'application responsable de la requ<71>te
d'authentification au nom du demandeur et de recueillir
l'information d'authentification n<>cessaire.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>m<EFBFBD>canisme</glossterm>
<glossdef>
<para>Il s'agit de l'un des quatre groupes basiques de
fonctionnalit<69>s fournit par PAM : authentification, gestion de
compte, gestion de session et mise &agrave; jour du jeton
d'authentification.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>module</glossterm>
<glossdef>
<para>Une collection d'une ou plusieurs fonctions impl<70>mentant
un service d'authentification particulier, rassembl<62>es dans un
fichier binaire (normalement chargeable dynamiquement)
et identifi<66> par un nom unique.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>r<EFBFBD>gles</glossterm>
<glossdef>
<para>Le jeu complet de configuration des r<>gles d<>crivant
comment traiter les requ<71>tes PAM pour un service
particulier. Une r<>gle consiste normalement en quatre cha<68>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<75>rer les informations d'authentification,
v<>rifier les droits du demandeur et autoriser ou rejeter
la requ<71>te.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>service</glossterm>
<glossdef>
<para>Un ensemble de serveurs fournissant des fonctionnalit<69>s
similaires ou li<6C>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<76> 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<65>chement de ce contexte.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>jeton</glossterm>
<glossdef>
<para>Un morceau d'information associ<63> avec un compte tel qu'un
mot de passe ou une passphrase que le demandeur doit fournir
pour prouver son identit<69>.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>transaction</glossterm>
<glossdef>
<para>Une s<>quence de requ<71>tes depuis le m<>me demandeur vers la
m<>me instance du m<>me serveur, commen<65>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 xml:id="pam-usage-examples">
<title xml:id="pam-usage-examples.title"> Exemples d'utilisation</title>
<para>Cette section a pour but d'illustrer
quelques-uns des termes d<>finis pr<70>c<EFBFBD>demment &agrave; 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 &agrave; 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 &agrave; 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<70>sent<6E> 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<74> 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 xml:id="pam-conventions">
<title xml:id="pam-conventions.title">Conventions</title>
<para><!--XXX-->Cette section n'a pas encore <20>t<EFBFBD> <20>crite.</para>
</section>
</section>
<section xml:id="pam-essentials">
<title xml:id="pam-essentials.title">Les bases de PAM</title>
<section xml:id="pam-facilities-primitives">
<title xml:id="pam-facilities-primitives.title">M<EFBFBD>canismes et primitives</title>
<para>L'API PAM fournit six primitives d'authentification
diff<66>rentes regroup<75>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 <20>tablit les
droits du compte. Il fournit deux primitives :</para>
<itemizedlist>
<listitem>
<para>&man.pam.authenticate.3; authentifie le demandeur,
g<>n<EFBFBD>ralement en demandant un jeton d'identification et en le
comparant a une valeur stock<63>e dans une base de donn<6E>es ou
obtenue par le biais d'un serveur d'authentification.</para>
</listitem>
<listitem>
<para>&man.pam.setcred.3; <20>tabli les param<61>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<69> du compte pour des raisons autres que
l'authentification. Par exemple les restrictions bas<61>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<6E> 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<63>es &agrave;
la mise en place d'une session : ajouter une entr<74>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<63>es &agrave;
la terminaison d'une session : ajouter une entr<74>e dans les bases
<filename>utmp</filename> et <filename>wtmp</filename>, arr<72>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<69> pour modifier le jeton d'authentification
associ<63> &agrave; un compte, soit parce qu'il a expir<69>, 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 <20>ventuellement v<>rifie que celui-ci est assez robuste pour ne
pas <20>tre devin<69> facilement ou qu'il n'a pas d<>j&agrave; utilis<69>.
</para>
</listitem>
</itemizedlist>
</listitem>
</varlistentry>
</variablelist>
</section>
<section xml:id="pam-modules">
<title xml:id="pam-modules.title">Modules</title>
<para>Les modules sont le concept clef de PAM; apr<70>s tout ils
constituent le <quote>M</quote> de PAM. Un module PAM est
lui-m<>me un morceau de code qui impl<70>mente les primitives d'un
ou plusieurs m<>canismes pour une forme particuli<6C>re
d'authentification; par exemple, les bases de mots de passe UNIX
que sont NIS, LDAP et Radius.</para>
<section xml:id="pam-module-naming">
<title xml:id="pam-module-naming.title">Nom des modules</title>
<para>FreeBSD impl<70>mente chaque m<>canismes dans un module distinct
nomm<6D>
<literal>pam_m<EFBFBD>canisme.so</literal>
(par exemple <literal>pam_unix.so</literal> pour le m<>canisme
Unix .) Les autres implementations poss<73>dent parfois des modules
s<>par<61>s pour des m<>canismes s<>par<61>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<69> pour authentifier les utilisateurs
dialup.</para>
</section>
<section xml:id="pam-module-versioning">
<title xml:id="pam-module-versioning.title">Gestion des versions de module </title>
<para>L'impl<70>mentation originale de PAM par FreeBSD, bas<61>e sur
Linux-PAM, n'utilisait pas de num<75>ro de version pour les modules
PAM. Ceci peut poser des probl<62>mes avec les applications tiers qui
peuvent <20>tre li<6C>es avec d'anciennes biblioth<74>ques syst<73>mes, puisqu'il
n'y a pas possibilit<69> de charger la version correspondante du
module d<>sir<69>.</para>
<para>Pour sa part, OpenPAM cherche les modules qui ont la m<>me
version que la biblioth<74>que PAM (pour le moment 2) et se rabat sur
un module sans version si aucun module avec version n'a put <20>tre
charg<72>. Ainsi les anciens modules peuvent <20>tre fournis pour les
anciennes applications, tout en permettant aux nouvelles applications
(ou bien nouvellement compil<69>es) de tirer parti des
modules les plus r<>cents.</para>
<para>Bien que les modules PAM de Solaris poss<73>dent g<>n<EFBFBD>ralement un
num<75>ro de version, ils ne sont pas r<>ellement versionn<6E>s car
le num<75>ro correspond &agrave; une partie du nom du module et doit <20>tre
inclus dans la configuration.</para>
</section>
</section>
<section xml:id="pam-chains-policies">
<title xml:id="pam-chains-policies.title">Cha<EFBFBD>nes et politiques</title>
<para>Lorsqu'un <!--XXX-->serveur initie une transaction PAM, la
biblioth<74>que PAM essaie de charger une politique pour le service
sp<73>cifi<66> dans l'appel a &man.pam.start.3; . La politique
indique comment la requ<71>te d'authentification doit <20>tre trait<69>e
et est d<>finie dans un fichier de configuration. Il s'agit de
l'autre concept clef de PAM : la possibilit<69> pour
l'administrateur de configurer la politique de s<>curit<69> d'un
syst<73>me en <20>ditant simplement une fichier texte.</para>
<para>Une politique consiste en quatre cha<68>nes, une pour chacune
des quatre m<>canismes de PAM. Chaque cha<68>ne est une suite de
r<>gles de configuration, chacune sp<73>cifiant un module &agrave;
invoquer, des param<61>tres, options, &agrave; passer au module et un
drapeau de contr<74>le qui d<>crit comment interpr<70>ter le code de
retour du module.</para>
<para>Comprendre le drapeau de contr<74>le est essentiel pour
comprendre les fichiers de configuration de PAM. Il existe
quatre drapeaux de contr<74>le diff<66>rents :</para>
<variablelist>
<varlistentry>
<term><literal>binding</literal></term>
<listitem>
<para>Si le module r<>ussit et qu'aucun module pr<70>c<EFBFBD>dent de la
cha<68>ne n'a <20>chou<6F>, la cha<68>ne s'interrompt imm<6D>diatement et la
requ<71>te est autoris<69>e. Si le module <20>choue le reste de la
cha<68>ne est ex<65>cut<75>, mais la requ<71>te est rejet<65>e au
final.</para>
<para>Ce drapeau de contr<74>le a <20>t<EFBFBD> introduit par Sun Solaris
dans la version 9 (SunOS 5.9); il est aussi support<72> par
OpenPAM.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>required</literal></term>
<listitem>
<para>Si le module r<>ussit, le reste de la cha<68>ne est ex<65>cut<75>,
et la requ<71>te est autoris<69>e si aucun des autres modules
n'<27>choue. Si le module <20>choue, le reste de la cha<68>ne est
ex<65>cut<75>, mais au final la requ<71>te est rejet<65>e.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>requisite</literal></term>
<listitem>
<para>Si le module r<>ussit le reste de la cha<68>ne est ex<65>cut<75>,
et la requ<71>te est autoris<69>e sauf si d'autres modules
<20>chou<6F>s. Si le module <20>choue la cha<68>ne est imm<6D>diatement
termin<69>e et la requ<71>te est rejet<65>e.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>sufficient</literal></term>
<listitem>
<para>Si le module r<>ussit et qu'aucun des modules pr<70>c<EFBFBD>dent
n'a <20>chou<6F> la cha<68>ne est imm<6D>diatement termin<69>e et la requ<71>te
est allou<6F>e. Si le module <20>choue il est ignore et le reste de
la cha<68>ne est ex<65>cut<75>.</para>
<para>Puisque la s<>mantique de ce drapeau peut <20>tre un peu
confuse, sp<73>cialement lorsqu'il s'agit de celui du dernier
module de la cha<68>ne, il est recommand<6E> d'utiliser le drapeau
<literal>binding</literal> &agrave; la place de celui-ci sous la condition que
l'impl<70>mentation le supporte.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>optional</literal></term>
<listitem>
<para>Le module est ex<65>cut<75> mais le r<>sultat est ignor<6F>. Si
tout les modules de la cha<68>ne sont marqu<71>s
<literal>optional</literal>, toutes les requ<71>tes seront
toujours accept<70>es.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Lorsqu'un serveur invoque l'une des six primitives PAM,
PAM r<>cup<75>re la cha<68>ne du m<>canisme &agrave; laquelle la requ<71>te
correspond et invoque chaque module de la cha<68>ne dans l'ordre
indiqu<71>, jusqu'&agrave; ce que la fin soit atteinte ou qu'aucune
ex<65>cution suppl<70>mentaire ne soit n<>cessaire (soit &agrave; cause du
succ<63>s d'un module en <literal>binding</literal> ou
<literal>sufficient</literal>, soit &agrave; cause de l'<27>chec d'un
module <literal>requisite</literal>). La requ<71>te est accept<70>e si
et seulement si au moins un module a <20>t<EFBFBD> invoqu<71>, 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<73> plusieurs fois dans la m<>me cha<68>ne. Par
exemple un module qui d<>termine le nom utilisateur et le mot de
passe &agrave; l'aide d'un serveur directory peut <20>tre invoqu<71>
plusieurs fois avec des param<61>tres sp<73>cifiant diff<66>rents
serveurs a contacter. PAM consid<69>re les diff<66>rentes occurrences
d'un m<>me module dans une m<>me cha<68>ne comme des modules
diff<66>rents et non li<6C>s.</para>
</section>
<section xml:id="pam-transactions">
<title xml: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 <20>tapes <20>choue, le serveur
devrait reporter un message d'erreur au client et arr<72>ter la
transaction.</para>
<orderedlist>
<listitem>
<para>Si n<>cessaire, le serveur obtient les privil<69>ges de
l'arbitre par le biais d'un m<>canisme ind<6E>pendant de PAM &mdash;
g<>n<EFBFBD>ralement en ayant <20>t<EFBFBD> d<>marr<72> par <literal>root</literal> ou
en <20>tant setuid <literal>root</literal>.</para>
</listitem>
<listitem>
<para>Le serveur appel &man.pam.start.3; afin d'initialiser la
biblioth<74>que PAM et indique le service et le compte cible, et
enregistre une fonction de conversation appropri<72>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
&agrave; 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<69>, &man.pam.acct.mgmt.3; retournera
<literal>PAM_NEW_AUTHTOK_REQD</literal> &agrave; la place de
<literal>PAM_SUCCESS</literal>.</para>
</listitem>
<listitem>
<para>Si l'<27>tape pr<70>c<EFBFBD>dente a retourn<72>
<literal>PAM_NEW_AUTHTOK_REQD</literal>, le serveur appel
maintenant &man.pam.chauthtok.3; pour obliger l'utilisateur &agrave;
changer le jeton d'authentification du compte d<>sir<69>.</para>
</listitem>
<listitem>
<para>Maintenant que le demandeur a <20>t<EFBFBD> correctement authentifi<66>,
le serveur appelle &man.pam.setcred.3; pour obtenir les privil<69>ges
du compte d<>sir<69>. Il lui est possible de faire ceci parce qu'il
agit au nom de l'arbitre dont il poss<73>de les privil<69>ges.</para>
</listitem>
<listitem>
<para>Lorsque les privil<69>ges corrects ont <20>t<EFBFBD> <20>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<6E>s par le
client &mdash; 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
&agrave; la biblioth<74>que PAM que la transaction se termine et qu'elle peut lib<69>rer
les ressources qu'elle a allou<6F> au cours de la
transaction.</para>
</listitem>
</orderedlist>
</section>
</section>
<section xml:id="pam-config">
<title xml:id="pam-config.title">Configuration de PAM</title>
<section xml:id="pam-config-file-locations">
<title xml: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<73>me. Chaque ligne du
fichier d<>crit une <20>tape dans une cha<68>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<74>le, le nom du module et les arguments du
module. Tout champ additionnel est consid<69>r<EFBFBD> comme argument du
module.</para>
<para>Une cha<68>ne diff<66>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<66>rents services et m<>canismes
apparaissent ne l'est pas &mdash; except<70> l'entr<74>e pour le
service <literal>other</literal>, qui sert de r<>f<EFBFBD>rence par d<>faut et doit
<20>tre plac<61> &agrave; 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<69> et les autres poss<73>dent
aussi un sens.</para>
<para>OpenPAM et Linux-PAM offrent un m<>canisme de configuration
alternatif o<> les politiques sont plac<61>es dans des fichiers
s<>par<61>s portant le nom du service auquel ils s'appliquent. Ces
fichiers sont situ<74>s dans <filename>/etc/pam.d/</filename> et
ne contiennent que quatre champs &agrave; la place de cinq &mdash; 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<73>cifi<66>e dans <filename>/etc/pam.d</filename>, ils
seront utilis<69>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 &agrave; 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<69> a
partir du nom de fichier plut<75>t qu'indiqu<71> &agrave; l'int<6E>rieur du
fichier de configuration, ainsi le m<>me fichier peut <20>tre utilis<69>
pour des services nomm<6D>s diff<66>remment.</para>
<para>Un autre avantage est qu'un logiciel tiers peu facilement
installer les politiques pour ses services sans avoir besoin
d'<27>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<75> pour le
service demand<6E>, 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<69>e par d<>faut pour tous les
services qui n'ont pas leur propre politique.</para>
</section>
<section xml:id="pam-config-breakdown">
<title xml:id="pam-config-breakdown.title">Breakdown of a
configuration line</title>
<para>Comme expliqu<71> dans <xref linkend="pam-config-file-locations"/>, 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<74>le, le nom
du module et la pr<70>sence ou non d'arguments pour le module.</para>
<para>Le nom du service est g<>n<EFBFBD>ralement, mais pas toujours, le
nom de l'application auquelle les r<>gles s'appliquent. Si vous
n'<27>tes pas s<>r, r<>f<EFBFBD>rez vous &agrave; 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> &agrave; la place de
<filename>/etc/pam.conf</filename>, le nom du service est
sp<73>cifi<66> par le nom du fichier de configuration et n'est pas
indiqu<71> 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
<xref linkend="pam-facilities-primitives"/>.</para>
<para>De m<>me, le drapeau de contr<74>le est l'un des quatre mots
clef d<>crits dans <xref linkend="pam-chains-policies"/> et d<>crit comment
le module doit interpr<70>ter le code de retour du
module. Linux-PAM supporte une syntaxe alternative qui vous
laisse sp<73>cifier l'action &agrave; associer &agrave; chaque code de retour
possible; mais ceci devrait <20>tre <20>vit<69> puisque ce n'est pas
standard et <20>troitement li<6C> &agrave; la fa<66>on dont Linux-PAM appelle les
services (qui diff<66>re grandement de la fa<66>on de Solaris et
OpenPAM). C'est sans <20>tonnement que l'on apprend qu'OpenPAM ne
supporte pas cette syntaxe.</para>
</section>
<section xml:id="pam-policies">
<title xml:id="pam-policies.title">Politiques</title>
<para>Pour configurer PAM correctement, il est essentiel de
comprendre comment les politiques sont interpr<70>t<EFBFBD>es.</para>
<para>Lorsqu'une application appelle &man.pam.start.3; la
biblioth<74>que PAM charge la politique du service sp<73>cifi<66> et
construit les quatre cha<68>nes de module (une pour chaque
m<>canisme). Si une ou plusieurs cha<68>nes sont vides, les cha<68>nes
de la politique du service <literal>other</literal> sont
utilis<69>es.</para>
<para>Plus tard, lorsque l'application appelle l'une des six
primitives PAM, la biblioth<74>que PAM r<>cup<75>re la cha<68>ne du
m<>canisme correspondant et appelle la fonction appropri<72>e avec
chaque module list<73> dans la cha<68>ne. Apr<70>s chaque appel d'une
fonction de service, le type du module et le code d'erreur
sont retourn<72>s par celle-ci pour d<>terminer quoi faire. <20> quelques
exceptions pr<70>s, dont nous parlerons plus tard, la table
suivante s'applique:</para>
<table>
<title>R<EFBFBD>sum<EFBFBD> de la cha<68>ne d'ex<65>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 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 &agrave; la fin de la cha<68>ne,
ou lorsqu'un <quote>break</quote> est atteint, le dispatcheur
retourne le code d'erreur renvoy<6F> par le premier module qui a
<20>chou<6F>. Autrement <literal>PAM_SUCCESS</literal> est
retourn<72>.</para>
<para>La premi<6D>re exception est que le code d'erreur
<literal>PAM_NEW_AUTHOK_REQD</literal> soit consid<69>r<EFBFBD> comme un
succ<63>s, sauf si aucun module n'<27>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<69>re
les modules <literal>binding</literal> et
<literal>sufficient</literal> comme s'ils <20>taient
<literal>required</literal>.</para>
<para>La troisi<73>me et derni<6E>re exception est que
&man.pam.chauthtok.3; ex<65>cute la totalit<69> de la cha<68>ne deux fois
(la premi<6D>re pour des v<>rifications pr<70>liminaires et la deuxi<78>me
pour mettre le mot de passe) et lors de la premi<6D>re ex<65>cution
il consid<69>re les modules <literal>binding</literal> et
<literal>sufficient</literal> comme s'ils <20>taient
<literal>required</literal>.</para>
</section>
</section>
<section xml:id="pam-freebsd-modules">
<title xml:id="pam-freebsd-modules.title">Les modules PAM de FreeBSD</title>
<section xml:id="pam-modules-deny">
<title xml: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 &agrave; n'importe qu'elle requ<71>te par
<literal>PAM_AUTH_ERR</literal>. Il est utile pour d<>sactiver
rapidement un service (ajoutez-le au d<>but de chaque cha<68>ne), ou
pour terminer les cha<68>nes de modules
<literal>sufficient</literal>.</para>
</section>
<section xml:id="pam-modules-echo">
<title xml:id="pam-modules-echo.title">&man.pam.echo.8;</title>
<para>Le module &man.pam.echo.8; passe simplement ses arguments
&agrave; la fonction de conversation comme un message
<literal>PAM_TEXT_INFO</literal>. Il est principalement utilis<69>
pour le debogage mais il peut aussi servir &agrave; afficher un
message tel que <quote>Les acc<63>s ill<6C>gaux seront
poursuivits</quote> avant de commencer la proc<6F>dure
d'authentification.</para>
</section>
<section xml:id="pam-modules-exec">
<title xml: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 &agrave; ex<65>cuter, les arguments restant <20>tant
utilis<69>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 xml:id="pam-modules-ftp">
<title xml:id="pam-modules-ftp.title">pam_ftp(8)</title>
<para>Le module pam_ftp(8)</para>
</section>
<section xml:id="pam-modules-ftpusers">
<title xml:id="pam-modules-ftpusers.title">&man.pam.ftpusers.8;</title>
<para>Le module &man.pam.ftpusers.8;</para>
</section>
<section xml:id="pam-modules-group">
<title xml:id="pam-modules-group.title">&man.pam.group.8;</title>
<para>Le module &man.pam.group.8; accepte ou rejette le
demandeur &agrave; partir de son appartenance &agrave; un groupe particulier
(g<>n<EFBFBD>ralement <literal>wheel</literal> pour &man.su.1;). Il a
pour but premier de conserver le comportement traditionnel de
&man.su.1; mais poss<73>de d'autres applications comme par exemple
exclure un certain groupe d'utilisateurs d'un service
particulier.</para>
</section>
<section xml:id="pam-modules-krb5">
<title xml:id="pam-modules-krb5.title">&man.pam.krb5.8;</title>
<para>Le module &man.pam.krb5.8; </para>
</section>
<section xml:id="pam-modules-ksu">
<title xml:id="pam-modules-ksu.title">&man.pam.ksu.8;</title>
<para>Le module &man.pam.ksu.8; </para>
</section>
<section xml:id="pam-modules-lastlog">
<title xml:id="pam-modules-lastlog.title">&man.pam.lastlog.8;</title>
<para>Le module &man.pam.lastlog.8; </para>
</section>
<section xml:id="pam-modules-login-access">
<title xml:id="pam-modules-login-access.title">&man.pam.login.access.8;</title>
<para>Le module &man.pam.login.access.8; </para>
</section>
<section xml:id="pam-modules-nologin">
<title xml:id="pam-modules-nologin.title">&man.pam.nologin.8;</title>
<para>Le module &man.pam.nologin.8; </para>
</section>
<section xml:id="pam-modules-opie">
<title xml:id="pam-modules-opie.title">&man.pam.opie.8;</title>
<para>Le module &man.pam.opie.8; impl<70>mente la m<>thode
d'authentification &man.opie.4;. Le syst<73>me &man.opie.4; est un
m<>canisme de challenge-response o<> la r<>ponse &agrave; chaque
challenge est une fonction directe du challenge et une phrase de
passe, ainsi la r<>ponse peut facilement <20>tre calcul<75>e <quote>en
temps voulu</quote> par n'importe qui poss<73>dant la phrase de
passe ce qui <20>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<72>u une r<>ponse correcte, il n'est pas vuln<6C>rable aux
attaques bas<61>e sur le rejouage.</para>
</section>
<section xml:id="pam-modules-opieaccess">
<title xml: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<66>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<65> &agrave; utiliser
d'autres m<>thodes. Ceci est g<>n<EFBFBD>ralement utilis<69> pour interdire
l'authentification par mot de passe depuis des h<>tes non digne
de confiance.</para>
<para>Pour <20>tre r<>ellement effectif, le module
&man.pam.opieaccess.8; doit <20>tre list<73> comme
<literal>requisite</literal> imm<6D>diatement apr<70>s une entr<74>e
<literal>sufficient</literal> pour &man.pam.opie.8; et avant
tout autre module, dans la cha<68>ne
<literal>auth</literal>.</para>
</section>
<section xml:id="pam-modules-passwdqc">
<title xml:id="pam-modules-passwdqc.title">&man.pam.passwdqc.8;</title>
<para>Le module &man.pam.passwdqc.8; </para>
</section>
<section xml:id="pam-modules-permit">
<title xml: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 &agrave; n'importe quelle
requ<71>te par <literal>PAM_SUCCESS</literal>. Il est utile pour
les services o<> une ou plusieurs cha<68>nes auraient
autrement <20>t<EFBFBD> vides.</para>
</section>
<section xml:id="pam-modules-radius">
<title xml:id="pam-modules-radius.title">&man.pam.radius.8;</title>
<para>Le module &man.pam.radius.8; </para>
</section>
<section xml:id="pam-modules-rhosts">
<title xml:id="pam-modules-rhosts.title">&man.pam.rhosts.8;</title>
<para>Le module &man.pam.rhosts.8; </para>
</section>
<section xml:id="pam-modules-rootok">
<title xml:id="pam-modules-rootok.title">&man.pam.rootok.8;</title>
<para>Le module &man.pam.rootok.8; retourne un succ<63>s si et
seulement si l'identifiant d'utilisateur r<>el du processus
appelant est 0. Ceci est utile pour les services non bas<61>s sur
le r<>seau tel que &man.su.1; ou &man.passwd.1; o<>
l'utilisateur <literal>root</literal> doit avoir un acc<63>s
automatique.</para>
</section>
<section xml:id="pam-modules-securetty">
<title xml:id="pam-modules-securetty.title">&man.pam.securetty.8;</title>
<para>Le module &man.pam.securetty.8; </para>
</section>
<section xml:id="pam-modules-self">
<title xml:id="pam-modules-self.title">&man.pam.self.8;</title>
<para>Le module &man.pam.self.8; retourne un succ<63>s si et
seulement si le nom du demandeur correspond au nom du compte
d<>sir<69>. Il est utile pour les services non bas<61>s sur le r<>seau
tel que &man.su.1; o<> l'identit<69> du demandeur peut <20>tre
v<>rifi<66>e facilement .</para>
</section>
<section xml:id="pam-modules-ssh">
<title xml:id="pam-modules-ssh.title">&man.pam.ssh.8;</title>
<para>Le module &man.pam.ssh.8; </para>
</section>
<section xml:id="pam-modules-tacplus">
<title xml:id="pam-modules-tacplus.title">&man.pam.tacplus.8;</title>
<para>Le module &man.pam.tacplus.8; </para>
</section>
<section xml:id="pam-modules-unix">
<title xml:id="pam-modules-unix.title">&man.pam.unix.8;</title>
<para>Le module &man.pam.unix.8; impl<70>mente l'authentification
Unix traditionnelle par mot de passe, il utilise
&man.getpwnam.3; pour obtenir le mot de passe du compte vis<69> 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 xml:id="pam-appl-prog">
<title xml:id="pam-appl-prog.title">Programmation d'applications PAM </title>
<para><!--XXX-->Cette section n'a pas encore <20>t<EFBFBD> <20>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 xml:id="pam-module-prog">
<title xml:id="pam-module-prog.title">Programmation de modules PAM</title>
<para><!--XXX-->Cette section n'a pas <20>t<EFBFBD> encore <20>crite.</para>
</section>
<appendix xml:id="pam-sample-appl">
<title xml:id="pam-sample-appl.title">Exemples d'application PAM </title>
<para>Ce qui suit est une impl<70>mentation minimale de &man.su.1; en
utilisant PAM. Notez qu'elle utilise la fonction de conversation
&man.openpam.ttyconv.3; sp<73>cifique &agrave; OpenPAM qui est prototyp<79>e
dans <filename>security/openpam.h</filename>. Si vous d<>sirez
construire cette application sur un syst<73>me utilisant une
biblioth<74>que PAM diff<66>rente vous devrez fournir votre propre
fonction de conversation. Une fonction de conversation robuste est
<20>tonnamment difficile &agrave; impl<70>menter; celle pr<70>sent<6E>e dans
<xref linkend="pam-sample-conv"/>
est un bon point de
d<>part, mais ne devrait pas <20>tre utilis<69>e dans des applications
r<>elles.</para>
<programlisting>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="su.c" parse="text"/>
</programlisting>
</appendix>
<appendix xml:id="pam-sample-module">
<title xml:id="pam-sample-module.title">Exemple d'un module PAM</title>
<para>Ce qui suit est une impl<70>mentation minimale de
&man.pam.unix.8; offrant uniquement les services
d'authentification. Elle devrait compiler et tourner avec la
plupart des impl<70>mentations PAM, mais tire parti des extensions
d'OpenPAM si elles sont disponibles : notez l'utilisation de
&man.pam.get.authtok.3; qui simplifie <20>norm<72>ment l'affichage de
l'invite pour demander le mot de passe &agrave; l'utilisateur.</para>
<programlisting>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="pam_unix.c" parse="text"/>
</programlisting>
</appendix>
<appendix xml:id="pam-sample-conv">
<title xml:id="pam-sample-conv.title">Exemple d'une fonction de conversation PAM</title>
<para>La fonction de conversation pr<70>sent<6E>e ci-dessous est une
version grandement simplifi<66>e de la fonction
&man.openpam.ttyconv.3; d'OpenPAM. Elle est pleinement fonctionnelle
et devrait donner au lecteur une bonne id<69>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 &agrave; t<>l<EFBFBD>charger le code source et d'adapter
&man.openpam.ttyconv.3; &agrave; vos besoins, nous pensons qu'elle est
raisonnablement aussi robuste qu'une fonction de conversation
orient<6E>e tty peut l'<27>tre.</para>
<programlisting>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="converse.c" parse="text"/>
</programlisting>
</appendix>
<bibliography xml:id="pam-further">
<info><title xml:id="pam-further.title">Lectures compl<70>mentaires</title>
<abstract>
<para>Ceci est une liste de documents concernant PAM et les
domaines gravitant autours. Elle n'a pas la pr<70>tention d'<27>tre
compl<70>te.</para>
</abstract>
</info>
<bibliodiv>
<title>Publications</title>
<biblioentry>
<citetitle><link xlink:href="http://www.sun.com/software/solaris/pam/pam.external.pdf">
Rendre les services de connexion ind<6E>pendants des technologies d'authentification
</link></citetitle>
<authorgroup>
<author><personname><surname>Samar</surname><firstname>Vipin</firstname></personname></author>
<author><personname><surname>Lai</surname><firstname>Charlie</firstname></personname></author>
</authorgroup>
<orgname>Sun Microsystems</orgname>
</biblioentry>
<biblioentry>
<citetitle><link xlink:href="http://www.opengroup.org/pubs/catalog/p702.htm">X/Open
Single Sign-on Preliminary Specification</link></citetitle>
<orgname>The Open Group</orgname>
<biblioid class="isbn">1-85912-144-6</biblioid>
<pubdate>June 1997</pubdate>
</biblioentry>
<biblioentry>
<citetitle><link xlink:href="http://www.kernel.org/pub/linux/libs/pam/pre/doc/current-draft.txt">
Pluggable Authentication Modules</link></citetitle>
<author><personname><surname>Morgan</surname><firstname>Andrew</firstname><othername role="mi">G.</othername></personname></author>
<pubdate>1999-10-06</pubdate>
</biblioentry>
</bibliodiv>
<bibliodiv>
<title>Guides utilisateur</title>
<biblioentry>
<citetitle><link xlink:href="http://www.sun.com/software/solaris/pam/pam.admin.pdf">Administration de PAM
</link></citetitle>
<orgname>Sun Microsystems</orgname>
</biblioentry>
</bibliodiv>
<bibliodiv>
<title>Page internet li<6C>es</title>
<biblioentry>
<citetitle><link xlink:href="http://openpam.sourceforge.net/">La page d'OpenPAM</link></citetitle>
<author><personname><surname>Sm&oslash;rgrav</surname><firstname>Dag-Erling</firstname></personname></author>
<orgname>ThinkSec AS</orgname>
</biblioentry>
<biblioentry>
<citetitle><link xlink:href="http://www.kernel.org/pub/linux/libs/pam/">La page de Linux-PAM</link></citetitle>
<author><personname><surname>Morgan</surname><firstname>Andrew</firstname><othername role="mi">G.</othername></personname></author>
</biblioentry>
<biblioentry>
<citetitle><link xlink:href="http://wwws.sun.com/software/solaris/pam/">La page de Solaris PAM</link></citetitle>
<orgname>Sun Microsystems</orgname>
</biblioentry>
</bibliodiv>
</bibliography>
</article>