doc/fr_FR.ISO8859-1/articles/pam/article.sgml
Marc Fonvieille c9174baef4 - Typos hunting
- Use of SGML entities where needed
2007-01-20 12:25:44 +00:00

1363 lines
58 KiB
Text
Raw Blame History

<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN"> %man;
<!ENTITY % urls PUBLIC "-//FreeBSD//ENTITIES Common Document URL Entities//FR"> %urls;
<!ENTITY % abstract PUBLIC "-//FreeBSD//ENTITIES DocBook Abstract Entities//FR"> %abstract;
<!ENTITY % artheader PUBLIC "-//FreeBSD//ENTITIES DocBook ArtHeader Entities//FR"> %artheader;
<!ENTITY % translators PUBLIC "-//FreeBSD//ENTITIES DocBook Translator Entities//FR"> %translators;
<!ENTITY % authors PUBLIC "-//FreeBSD//ENTITIES DocBook Author Entities//EN"> %authors;
<!ENTITY % mailing-lists PUBLIC "-//FreeBSD//ENTITIES DocBook Mailing List Entities//FR"> %mailing-lists;
<!ENTITY rel.current CDATA "3.2">
]>
<!--
- 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>
<articleinfo>
<title>Pluggable Authentication Modules</title>
<pubdate>$FreeBSD$</pubdate>
<abstract>
<para>Cet article d&eacute;crit les principes sous-jacent et les
m&eacute;canismes de la biblioth&egrave;que PAM, il explique comment
configurer PAM, l'int&eacute;grer dans les applications, et
&eacute;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&oslash;rgrav</surname>
<contrib>Contributed by </contrib>
</author>
</authorgroup>
<legalnotice>
<para>Cet article a &eacute;t&eacute; &eacute;crit pour le Projet FreeBSD par
ThinkSec AS et les laboratoires de Networks Associates, la
division de recherche en s&eacute;curit&eacute; 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>
</articleinfo>
<section id="pam-intro">
<title id="pam-intro.title">Introduction</title>
<para>La biblioth&egrave;que PAM est une API g&eacute;n&eacute;ralis&eacute;e pour les
services relevant de l'authentification permettant &agrave; un
administrateur syst&egrave;me d'ajouter une nouvelle m&eacute;thode
d'authentification en ajoutant simplement un nouveau module PAM,
ainsi que de modifier les r&egrave;gles d'authentification en &eacute;ditant les
fichiers de configuration.</para>
<para>PAM a &eacute;t&eacute; con&ccedil;u et d&eacute;velopp&eacute; en 1995 par Vipin Samar et
Charlie Lai de Sun Microsystems, et n'a pas beaucoup &eacute;volu&eacute;
depuis. En 1997 l'Open Group publie les premi&egrave;res sp&eacute;cifications
XSSO qui standardisent l'API PAM et ajoute des extensions pour
un simple (ou plutot int&eacute;gr&eacute;) &quot;sign-on&quot;. Lors de l'&eacute;criture de cet article, la sp&eacute;cification n'a
toujours pas &eacute;t&eacute; adopt&eacute;e comme standard.</para>
<para>Bien que cet article se concentre principalement sur
FreeBSD 5.x, qui utilise OpenPAM, il devrait &eacute;galement &ecirc;tre
applicable &agrave; FreeBSD 4.x qui utilise Linux-PAM, ainsi qu'&agrave; d'autres
syst&egrave;mes d'exploitations tels que Linux ou Solaris.</para>
<section id="pam-trademarks">
<title id="pam-trademarks.title">Marques d&eacute;pos&eacute;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&eacute;finitions</title>
<para>La terminologie de PAM est plut&ocirc;t confuse. Ni la
publication originale de Samar et Lai, ni la sp&eacute;cification XSSO
n'ont essay&eacute; de d&eacute;finir formellement des termes pour les acteurs
et les entit&eacute;s intervenant dans PAM, les termes qu'ils
utilisent (mais ne d&eacute;finissent pas) sont parfois trompeurs et
ambigus. Le premier essai d'&eacute;tablir une terminologie
consistante et non ambigu&euml; fut un papier &eacute;crit par Andrew
G. Morgan (l'auteur de Linux-PAM) en 1999. Bien que les choix de
Morgan furent un &eacute;norme pas en avant, ils ne sont pas parfait
d'apr&egrave;s l'auteur de ce document. Ce qui suit,
largement inspir&eacute; par Morgan, est un essai de d&eacute;finir pr&eacute;cis&eacute;ment et sans
ambigu&iuml;t&eacute; des termes pour chaque acteur ou entit&eacute; utilis&eacute; 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&eacute; demandant
authentification.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>arbitre</glossterm>
<glossdef>
<para>L'utilisateur ou l'entit&eacute; poss&eacute;dant les privil&egrave;ges n&eacute;cessaires
pour v&eacute;rifier la requ&ecirc;te du demandeur ainsi que l'autorit&eacute;
d'accorder ou de rejeter la requ&ecirc;te.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>cha&icirc;ne</glossterm>
<glossdef>
<para>Une s&eacute;quence de modules qui sera invoqu&eacute;e pour r&eacute;pondre &agrave;
une requ&ecirc;te PAM. La cha&icirc;ne comprend les informations concernant
l'ordre dans lequel invoquer les modules, les arguments &agrave; leur
passer et la fa&ccedil;on d'interpr&eacute;ter les r&eacute;sultats.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>client</glossterm>
<glossdef>
<para>L'application responsable de la requ&ecirc;te
d'authentification au nom du demandeur et de recueillir
l'information d'authentification n&eacute;cessaire.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>m&eacute;canisme</glossterm>
<glossdef>
<para>Il s'agit de l'un des quatre groupes basiques de
fonctionnalit&eacute;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&eacute;mentant
un service d'authentification particulier, rassembl&eacute;es dans un
fichier binaire (normalement chargeable dynamiquement)
et identifi&eacute; par un nom unique.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>r&egrave;gles</glossterm>
<glossdef>
<para>Le jeu complet de configuration des r&egrave;gles d&eacute;crivant
comment traiter les requ&ecirc;tes PAM pour un service
particulier. Une r&egrave;gle consiste normalement en quatre cha&icirc;nes,
une pour chaque m&eacute;canisme, bien que quelques services
n'utilisent pas les quatre m&eacute;canismes.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>serveur</glossterm>
<glossdef>
<para>L'application agissant au nom de l'arbitre pour converser
avec le client, r&eacute;cup&eacute;rer les informations d'authentification,
v&eacute;rifier les droits du demandeur et autoriser ou rejeter
la requ&ecirc;te.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>service</glossterm>
<glossdef>
<para>Un ensemble de serveurs fournissant des fonctionnalit&eacute;s
similaires ou li&eacute;es et n&eacute;cessitant une authentification
similaire. Les r&egrave;gles de PAM sont d&eacute;finies sur un le principe
de par-service; ainsi tous les serveurs qui demandent le m&ecirc;me
nom de service seront soumis aux m&ecirc;mes r&egrave;gles.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>session</glossterm>
<glossdef>
<para>Le contexte dans lequel le service est d&eacute;livr&eacute; au
demandeur par le serveur. L'un des quatre m&eacute;canismes de PAM, la
gestion de session, s'en occupe exclusivement par la
mise en place et le rel&acirc;chement de ce contexte.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>jeton</glossterm>
<glossdef>
<para>Un morceau d'information associ&eacute; avec un compte tel qu'un
mot de passe ou une passphrase que le demandeur doit fournir
pour prouver son identit&eacute;.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>transaction</glossterm>
<glossdef>
<para>Une s&eacute;quence de requ&ecirc;tes depuis le m&ecirc;me demandeur vers la
m&ecirc;me instance du m&ecirc;me serveur, commen&ccedil;ant avec
l'authentification et la mise en place de la session et se
terminant avec le d&eacute;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&eacute;finis pr&eacute;c&eacute;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&eacute;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&eacute;sent&eacute; 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&eacute; dans cet exemple,
l'arbitre est <literal>root</literal>.</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Exemple de r&egrave;gles</title>
<para>Les lignes qui suivent sont les r&egrave;gles par d&eacute;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&eacute;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&eacute;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&eacute;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 &eacute;t&eacute; &eacute;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&eacute;canismes et primitives</title>
<para>L'API PAM fournit six primitives d'authentification
diff&eacute;rentes regroup&eacute;es dans quatre m&eacute;canismes qui seront d&eacute;crits
dans la partie suivante.</para>
<variablelist>
<varlistentry>
<term><literal>auth</literal></term>
<listitem>
<para><emphasis>Authentification.</emphasis> Ce m&eacute;canisme
concerne l'authentification du demandeur et &eacute;tablit les
droits du compte. Il fournit deux primitives :</para>
<itemizedlist>
<listitem>
<para>&man.pam.authenticate.3; authentifie le demandeur,
g&eacute;n&eacute;ralement en demandant un jeton d'identification et en le
comparant a une valeur stock&eacute;e dans une base de donn&eacute;es ou
obtenue par le biais d'un serveur d'authentification.</para>
</listitem>
<listitem>
<para>&man.pam.setcred.3; &eacute;tabli les param&egrave;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&eacute;canisme
concerne la disponibilit&eacute; du compte pour des raisons autres que
l'authentification. Par exemple les restrictions bas&eacute;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&eacute;rifie que le compte demand&eacute; est
disponible.</para>
</listitem>
</itemizedlist>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>session</literal></term>
<listitem>
<para><emphasis>Gestion de session.</emphasis> Ce m&eacute;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&acirc;ches associ&eacute;es &agrave;
la mise en place d'une session : ajouter une entr&eacute;e dans les
bases <filename>utmp</filename> et <filename>wtmp</filename>,
d&eacute;marrer un agent SSH...</para>
</listitem>
<listitem>
<para>&man.pam.close.session.3; accomplie les t&acirc;ches associ&eacute;es &agrave;
la terminaison d'une session : ajouter une entr&eacute;e dans les bases
<filename>utmp</filename> et <filename>wtmp</filename>, arr&ecirc;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&eacute;canisme est utilis&eacute; pour modifier le jeton d'authentification
associ&eacute; &agrave; un compte, soit parce qu'il a expir&eacute;, soit parce que
l'utilisateur d&eacute;sire le changer. Il fournit une seule
primitive:</para>
<itemizedlist>
<listitem>
<para>&man.pam.chauthtok.3; modifie le jeton d'authentification,
et &eacute;ventuellement v&eacute;rifie que celui-ci est assez robuste pour ne
pas &ecirc;tre devin&eacute; facilement ou qu'il n'a pas d&eacute;j&agrave; utilis&eacute;.
</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&egrave;s tout ils
constituent le <quote>M</quote> de PAM. Un module PAM est
lui-m&ecirc;me un morceau de code qui impl&eacute;mente les primitives d'un
ou plusieurs m&eacute;canismes pour une forme particuli&egrave;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&eacute;mente chaque m&eacute;canismes dans un module distinct
nomm&eacute;
<literal>pam_<replaceable>m&eacute;canisme</replaceable>.so</literal>
(par exemple <literal>pam_unix.so</literal> pour le m&eacute;canisme
Unix .) Les autres implementations poss&egrave;dent parfois des modules
s&eacute;par&eacute;s pour des m&eacute;canismes s&eacute;par&eacute;s et incluent aussi bien le
nom du service que celui du m&eacute;canisme dans le nom du module. Un
exemple est le module <literal>pam_dial_auth.so.1</literal> de
Solaris qui est utilis&eacute; 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&eacute;mentation originale de PAM par FreeBSD, bas&eacute;e sur
Linux-PAM, n'utilisait pas de num&eacute;ro de version pour les modules
PAM. Ceci peut poser des probl&egrave;mes avec les applications tiers qui
peuvent &ecirc;tre li&eacute;es avec d'anciennes biblioth&egrave;ques syst&egrave;mes, puisqu'il
n'y a pas possibilit&eacute; de charger la version correspondante du
module d&eacute;sir&eacute;.</para>
<para>Pour sa part, OpenPAM cherche les modules qui ont la m&ecirc;me
version que la biblioth&egrave;que PAM (pour le moment 2) et se rabat sur
un module sans version si aucun module avec version n'a put &ecirc;tre
charg&eacute;. Ainsi les anciens modules peuvent &ecirc;tre fournis pour les
anciennes applications, tout en permettant aux nouvelles applications
(ou bien nouvellement compil&eacute;es) de tirer parti des
modules les plus r&eacute;cents.</para>
<para>Bien que les modules PAM de Solaris poss&egrave;dent g&eacute;n&eacute;ralement un
num&eacute;ro de version, ils ne sont pas r&eacute;ellement versionn&eacute;s car
le num&eacute;ro correspond &agrave; une partie du nom du module et doit &ecirc;tre
inclus dans la configuration.</para>
</section>
</section>
<section id="pam-chains-policies">
<title id="pam-chains-policies.title">Cha&icirc;nes et politiques</title>
<para>Lorsqu'un <!--XXX-->serveur initie une transaction PAM, la
biblioth&egrave;que PAM essaie de charger une politique pour le service
sp&eacute;cifi&eacute; dans l'appel a &man.pam.start.3; . La politique
indique comment la requ&ecirc;te d'authentification doit &ecirc;tre trait&eacute;e
et est d&eacute;finie dans un fichier de configuration. Il s'agit de
l'autre concept clef de PAM : la possibilit&eacute; pour
l'administrateur de configurer la politique de s&eacute;curit&eacute; d'un
syst&egrave;me en &eacute;ditant simplement une fichier texte.</para>
<para>Une politique consiste en quatre cha&icirc;nes, une pour chacune
des quatre m&eacute;canismes de PAM. Chaque cha&icirc;ne est une suite de
r&egrave;gles de configuration, chacune sp&eacute;cifiant un module &agrave;
invoquer, des param&egrave;tres, options, &agrave; passer au module et un
drapeau de contr&ocirc;le qui d&eacute;crit comment interpr&eacute;ter le code de
retour du module.</para>
<para>Comprendre le drapeau de contr&ocirc;le est essentiel pour
comprendre les fichiers de configuration de PAM. Il existe
quatre drapeaux de contr&ocirc;le diff&eacute;rents :</para>
<variablelist>
<varlistentry>
<term><literal>binding</literal></term>
<listitem>
<para>Si le module r&eacute;ussit et qu'aucun module pr&eacute;c&eacute;dent de la
cha&icirc;ne n'a &eacute;chou&eacute;, la cha&icirc;ne s'interrompt imm&eacute;diatement et la
requ&ecirc;te est autoris&eacute;e. Si le module &eacute;choue le reste de la
cha&icirc;ne est ex&eacute;cut&eacute;, mais la requ&ecirc;te est rejet&eacute;e au
final.</para>
<para>Ce drapeau de contr&ocirc;le a &eacute;t&eacute; introduit par Sun Solaris
dans la version 9 (SunOS 5.9); il est aussi support&eacute; par
OpenPAM.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>required</literal></term>
<listitem>
<para>Si le module r&eacute;ussit, le reste de la cha&icirc;ne est ex&eacute;cut&eacute;,
et la requ&ecirc;te est autoris&eacute;e si aucun des autres modules
n'&eacute;choue. Si le module &eacute;choue, le reste de la cha&icirc;ne est
ex&eacute;cut&eacute;, mais au final la requ&ecirc;te est rejet&eacute;e.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>requisite</literal></term>
<listitem>
<para>Si le module r&eacute;ussit le reste de la cha&icirc;ne est ex&eacute;cut&eacute;,
et la requ&ecirc;te est autoris&eacute;e sauf si d'autres modules
&eacute;chou&eacute;s. Si le module &eacute;choue la cha&icirc;ne est imm&eacute;diatement
termin&eacute;e et la requ&ecirc;te est rejet&eacute;e.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>sufficient</literal></term>
<listitem>
<para>Si le module r&eacute;ussit et qu'aucun des modules pr&eacute;c&eacute;dent
n'a &eacute;chou&eacute; la cha&icirc;ne est imm&eacute;diatement termin&eacute;e et la requ&ecirc;te
est allou&eacute;e. Si le module &eacute;choue il est ignore et le reste de
la cha&icirc;ne est ex&eacute;cut&eacute;.</para>
<para>Puisque la s&eacute;mantique de ce drapeau peut &ecirc;tre un peu
confuse, sp&eacute;cialement lorsqu'il s'agit de celui du dernier
module de la cha&icirc;ne, il est recommand&eacute; d'utiliser le drapeau
<literal>binding</literal> &agrave; la place de celui-ci sous la condition que
l'impl&eacute;mentation le supporte.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>optional</literal></term>
<listitem>
<para>Le module est ex&eacute;cut&eacute; mais le r&eacute;sultat est ignor&eacute;. Si
tout les modules de la cha&icirc;ne sont marqu&eacute;s
<literal>optional</literal>, toutes les requ&ecirc;tes seront
toujours accept&eacute;es.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Lorsqu'un serveur invoque l'une des six primitives PAM,
PAM r&eacute;cup&egrave;re la cha&icirc;ne du m&eacute;canisme &agrave; laquelle la requ&ecirc;te
correspond et invoque chaque module de la cha&icirc;ne dans l'ordre
indiqu&eacute;, jusqu'&agrave; ce que la fin soit atteinte ou qu'aucune
ex&eacute;cution suppl&eacute;mentaire ne soit n&eacute;cessaire (soit &agrave; cause du
succ&egrave;s d'un module en <literal>binding</literal> ou
<literal>sufficient</literal>, soit &agrave; cause de l'&eacute;chec d'un
module <literal>requisite</literal>). La requ&ecirc;te est accept&eacute;e si
et seulement si au moins un module a &eacute;t&eacute; invoqu&eacute;, et que tout
les modules non optionnels ont r&eacute;ussi.</para>
<para>Notez qu'il est possible, bien que peu courant, d'avoir le
m&ecirc;me module list&eacute; plusieurs fois dans la m&ecirc;me cha&icirc;ne. Par
exemple un module qui d&eacute;termine le nom utilisateur et le mot de
passe &agrave; l'aide d'un serveur directory peut &ecirc;tre invoqu&eacute;
plusieurs fois avec des param&egrave;tres sp&eacute;cifiant diff&eacute;rents
serveurs a contacter. PAM consid&egrave;re les diff&eacute;rentes occurrences
d'un m&ecirc;me module dans une m&ecirc;me cha&icirc;ne comme des modules
diff&eacute;rents et non li&eacute;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&eacute;crit
ci-dessous. Notez que si l'une de ces &eacute;tapes &eacute;choue, le serveur
devrait reporter un message d'erreur au client et arr&ecirc;ter la
transaction.</para>
<orderedlist>
<listitem>
<para>Si n&eacute;cessaire, le serveur obtient les privil&egrave;ges de
l'arbitre par le biais d'un m&eacute;canisme ind&eacute;pendant de PAM &mdash;
g&eacute;n&eacute;ralement en ayant &eacute;t&eacute; d&eacute;marr&eacute; par <literal>root</literal> ou
en &eacute;tant setuid <literal>root</literal>.</para>
</listitem>
<listitem>
<para>Le serveur appel &man.pam.start.3; afin d'initialiser la
biblioth&egrave;que PAM et indique le service et le compte cible, et
enregistre une fonction de conversation appropri&eacute;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&ocirc;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&eacute;rifie que le compte est valide et disponible. Si le mot de
passe est correct mais a expir&eacute;, &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'&eacute;tape pr&eacute;c&eacute;dente a retourn&eacute;
<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&eacute;sir&eacute;.</para>
</listitem>
<listitem>
<para>Maintenant que le demandeur a &eacute;t&eacute; correctement authentifi&eacute;,
le serveur appelle &man.pam.setcred.3; pour obtenir les privil&egrave;ges
du compte d&eacute;sir&eacute;. Il lui est possible de faire ceci parce qu'il
agit au nom de l'arbitre dont il poss&egrave;de les privil&egrave;ges.</para>
</listitem>
<listitem>
<para>Lorsque les privil&egrave;ges corrects ont &eacute;t&eacute; &eacute;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&eacute;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&egrave;que PAM que la transaction se termine et qu'elle peut lib&eacute;rer
les ressources qu'elle a allou&eacute; 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&egrave;me. Chaque ligne du
fichier d&eacute;crit une &eacute;tape dans une cha&icirc;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&eacute;canisme, le
drapeau de contr&ocirc;le, le nom du module et les arguments du
module. Tout champ additionnel est consid&eacute;r&eacute; comme argument du
module.</para>
<para>Une cha&icirc;ne diff&eacute;rente est construite pour chaque couple
service/m&eacute;canisme; ainsi, alors que l'ordre des lignes est
important lorsqu'il s'agit des m&ecirc;mes services ou m&eacute;canismes,
l'ordre dans lequel les diff&eacute;rents services et m&eacute;canismes
apparaissent ne l'est pas &mdash; except&eacute; l'entr&eacute;e pour le
service <literal>other</literal>, qui sert de r&eacute;f&eacute;rence par d&eacute;faut et doit
&ecirc;tre plac&eacute; &agrave; la fin. L'exemple du papier original sur PAM
regroupait les lignes de configurations par m&eacute;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&eacute; et les autres poss&egrave;dent
aussi un sens.</para>
<para>OpenPAM et Linux-PAM offrent un m&eacute;canisme de configuration
alternatif o&ugrave; les politiques sont plac&eacute;es dans des fichiers
s&eacute;par&eacute;s portant le nom du service auquel ils s'appliquent. Ces
fichiers sont situ&eacute;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&eacute;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&eacute;cifi&eacute;e dans <filename>/etc/pam.d</filename>, ils
seront utilis&eacute;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&ecirc;me politique pour plusieurs services en liant
chaque nom de service &agrave; un fichier de configuration. Par
exemple pour utiliser la m&ecirc;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&eacute;termin&eacute; a
partir du nom de fichier plut&ocirc;t qu'indiqu&eacute; &agrave; l'int&eacute;rieur du
fichier de configuration, ainsi le m&ecirc;me fichier peut &ecirc;tre utilis&eacute;
pour des services nomm&eacute;s diff&eacute;remment.</para>
<para>Un autre avantage est qu'un logiciel tiers peu facilement
installer les politiques pour ses services sans avoir besoin
d'&eacute;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&eacute; pour le
service demand&eacute;, il cherchera dans <filename>/etc/pam.d/</filename> ou
<filename>/etc/pam.conf</filename>.</para>
<para>Finalement, quelque soit le m&eacute;canisme que vous
choisissiez, la politique <quote>magique</quote>
<literal>other</literal> est utilis&eacute;e par d&eacute;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&eacute; 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&eacute;canisme, le drapeau de contr&ocirc;le, le nom
du module et la pr&eacute;sence ou non d'arguments pour le module.</para>
<para>Le nom du service est g&eacute;n&eacute;ralement, mais pas toujours, le
nom de l'application auquelle les r&egrave;gles s'appliquent. Si vous
n'&ecirc;tes pas s&ucirc;r, r&eacute;f&eacute;rez vous &agrave; la documentation de l'application
pour d&eacute;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&eacute;cifi&eacute; par le nom du fichier de configuration et n'est pas
indiqu&eacute; dans les lignes de configuration qui, d&egrave;s lors,
commencent par le nom du m&eacute;canisme.</para>
<para>Le m&eacute;canisme est l'un des quatre mots clef d&eacute;crit dans la
section <link linkend="pam-facilities-primitives"
endterm="pam-facilities-primitives.title"></link></para>
<para>De m&ecirc;me, le drapeau de contr&ocirc;le est l'un des quatre mots
clef d&eacute;crits dans la section <link linkend="pam-chains-policies"
endterm="pam-chains-policies.title"></link> et d&eacute;crit comment
le module doit interpr&eacute;ter le code de retour du
module. Linux-PAM supporte une syntaxe alternative qui vous
laisse sp&eacute;cifier l'action &agrave; associer &agrave; chaque code de retour
possible; mais ceci devrait &ecirc;tre &eacute;vit&eacute; puisque ce n'est pas
standard et &eacute;troitement li&eacute; &agrave; la fa&ccedil;on dont Linux-PAM appelle les
services (qui diff&egrave;re grandement de la fa&ccedil;on de Solaris et
OpenPAM). C'est sans &eacute;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&eacute;t&eacute;es.</para>
<para>Lorsqu'une application appelle &man.pam.start.3; la
biblioth&egrave;que PAM charge la politique du service sp&eacute;cifi&eacute; et
construit les quatre cha&icirc;nes de module (une pour chaque
m&eacute;canisme). Si une ou plusieurs cha&icirc;nes sont vides, les cha&icirc;nes
de la politique du service <literal>other</literal> sont
utilis&eacute;es.</para>
<para>Plus tard, lorsque l'application appelle l'une des six
primitives PAM, la biblioth&egrave;que PAM r&eacute;cup&egrave;re la cha&icirc;ne du
m&eacute;canisme correspondant et appelle la fonction appropri&eacute;e avec
chaque module list&eacute; dans la cha&icirc;ne. Apr&egrave;s chaque appel d'une
fonction de service, le type du module et le code d'erreur
sont retourn&eacute;s par celle-ci pour d&eacute;terminer quoi faire. <20> quelques
exceptions pr&egrave;s, dont nous parlerons plus tard, la table
suivante s'applique:</para>
<table>
<title>R&eacute;sum&eacute; de la cha&icirc;ne d'ex&eacute;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 &agrave; la fin de la cha&icirc;ne,
ou lorsqu'un <quote>break</quote> est atteint, le dispatcheur
retourne le code d'erreur renvoy&eacute; par le premier module qui a
&eacute;chou&eacute;. Autrement <literal>PAM_SUCCESS</literal> est
retourn&eacute;.</para>
<para>La premi&egrave;re exception est que le code d'erreur
<literal>PAM_NEW_AUTHOK_REQD</literal> soit consid&eacute;r&eacute; comme un
succ&egrave;s, sauf si aucun module n'&eacute;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&egrave;re
les modules <literal>binding</literal> et
<literal>sufficient</literal> comme s'ils &eacute;taient
<literal>required</literal>.</para>
<para>La troisi&egrave;me et derni&egrave;re exception est que
&man.pam.chauthtok.3; ex&eacute;cute la totalit&eacute; de la cha&icirc;ne deux fois
(la premi&egrave;re pour des v&eacute;rifications pr&eacute;liminaires et la deuxi&egrave;me
pour mettre le mot de passe) et lors de la premi&egrave;re ex&eacute;cution
il consid&egrave;re les modules <literal>binding</literal> et
<literal>sufficient</literal> comme s'ils &eacute;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&eacute;pond &agrave; n'importe qu'elle requ&ecirc;te par
<literal>PAM_AUTH_ERR</literal>. Il est utile pour d&eacute;sactiver
rapidement un service (ajoutez-le au d&eacute;but de chaque cha&icirc;ne), ou
pour terminer les cha&icirc;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
&agrave; la fonction de conversation comme un message
<literal>PAM_TEXT_INFO</literal>. Il est principalement utilis&eacute;
pour le debogage mais il peut aussi servir &agrave; afficher un
message tel que <quote>Les acc&egrave;s ill&eacute;gaux seront
poursuivits</quote> avant de commencer la proc&eacute;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 &agrave; ex&eacute;cuter, les arguments restant &eacute;tant
utilis&eacute;s comme arguments pour ce programme. L'une des
applications possibles est d'utiliser un programme qui monte le
r&eacute;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 &agrave; partir de son appartenance &agrave; un groupe particulier
(g&eacute;n&eacute;ralement <literal>wheel</literal> pour &man.su.1;). Il a
pour but premier de conserver le comportement traditionnel de
&man.su.1; mais poss&egrave;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&eacute;mente la m&eacute;thode
d'authentification &man.opie.4;. Le syst&egrave;me &man.opie.4; est un
m&eacute;canisme de challenge-response o&ugrave; la r&eacute;ponse &agrave; chaque
challenge est une fonction directe du challenge et une phrase de
passe, ainsi la r&eacute;ponse peut facilement &ecirc;tre calcul&eacute;e <quote>en
temps voulu</quote> par n'importe qui poss&eacute;dant la phrase de
passe ce qui &eacute;limine le besoin d'une liste de mots de passe. De
plus, puisque &man.opie.4; ne r&eacute;utilise jamais un mot de passe
qui a re&ccedil;u une r&eacute;ponse correcte, il n'est pas vuln&eacute;rable aux
attaques bas&eacute;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&eacute;es dans &man.opieaccess.5;, il r&eacute;gule les
conditions sous lesquelles un utilisateur qui normalement
devrait s'authentifier par &man.opie.4; est amen&eacute; &agrave; utiliser
d'autres m&eacute;thodes. Ceci est g&eacute;n&eacute;ralement utilis&eacute; pour interdire
l'authentification par mot de passe depuis des h&ocirc;tes non digne
de confiance.</para>
<para>Pour &ecirc;tre r&eacute;ellement effectif, le module
&man.pam.opieaccess.8; doit &ecirc;tre list&eacute; comme
<literal>requisite</literal> imm&eacute;diatement apr&egrave;s une entr&eacute;e
<literal>sufficient</literal> pour &man.pam.opie.8; et avant
tout autre module, dans la cha&icirc;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&eacute;pond &agrave; n'importe quelle
requ&ecirc;te par <literal>PAM_SUCCESS</literal>. Il est utile pour
les services o&ugrave; une ou plusieurs cha&icirc;nes auraient
autrement &eacute;t&eacute; 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&egrave;s si et
seulement si l'identifiant d'utilisateur r&eacute;el du processus
appelant est 0. Ceci est utile pour les services non bas&eacute;s sur
le r&eacute;seau tel que &man.su.1; ou &man.passwd.1; o&ugrave;
l'utilisateur <literal>root</literal> doit avoir un acc&egrave;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&egrave;s si et
seulement si le nom du demandeur correspond au nom du compte
d&eacute;sir&eacute;. Il est utile pour les services non bas&eacute;s sur le r&eacute;seau
tel que &man.su.1; o&ugrave; l'identit&eacute; du demandeur peut &ecirc;tre
v&eacute;rifi&eacute;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&eacute;mente l'authentification
Unix traditionnelle par mot de passe, il utilise
&man.getpwnam.3; pour obtenir le mot de passe du compte vis&eacute; et
le compare avec celui fournit par le demandeur. Il fournit aussi
des services de gestion de compte (d&eacute;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&eacute;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 &eacute;t&eacute; &eacute;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 &eacute;t&eacute; encore &eacute;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&eacute;mentation minimale de &man.su.1; en
utilisant PAM. Notez qu'elle utilise la fonction de conversation
&man.openpam.ttyconv.3; sp&eacute;cifique &agrave; OpenPAM qui est prototyp&eacute;e
dans <filename
class="headerfile">security/openpam.h</filename>. Si vous d&eacute;sirez
construire cette application sur un syst&egrave;me utilisant une
biblioth&egrave;que PAM diff&eacute;rente vous devrez fournir votre propre
fonction de conversation. Une fonction de conversation robuste est
&eacute;tonnamment difficile &agrave; impl&eacute;menter; celle pr&eacute;sent&eacute;e dans
l'appendice<link linkend="pam-sample-conv"
endterm="pam-sample-conv.title"></link> est un bon point de
d&eacute;part, mais ne devrait pas &ecirc;tre utilis&eacute;e dans des applications
r&eacute;elles.</para>
<programlisting>
<inlinegraphic fileref="pam_app.c"
format="linespecific">
</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&eacute;mentation minimale de
&man.pam.unix.8; offrant uniquement les services
d'authentification. Elle devrait compiler et tourner avec la
plupart des impl&eacute;mentations PAM, mais tire parti des extensions
d'OpenPAM si elles sont disponibles : notez l'utilisation de
&man.pam.get.authtok.3; qui simplifie &eacute;norm&eacute;ment l'affichage de
l'invite pour demander le mot de passe &agrave; l'utilisateur.</para>
<programlisting>
<inlinegraphic fileref="pam_module.c"
format="linespecific">
</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&eacute;sent&eacute;e ci-dessous est une
version grandement simplifi&eacute;e de la fonction
&man.openpam.ttyconv.3; d'OpenPAM. Elle est pleinement fonctionnelle
et devrait donner au lecteur une bonne id&eacute;e de comment doit se
comporter une fonction de conversation, mais elle est trop simple
pour une utilisation r&eacute;elle. M&ecirc;me si vous n'utilisez pas OpenPAM,
N'h&eacute;sitez pas &agrave; t&eacute;l&eacute;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&eacute;e tty peut l'&ecirc;tre.</para>
<programlisting>
<inlinegraphic fileref="pam_conv.c"
format="linespecific">
</programlisting>
</appendix>
<bibliography id="pam-further">
<title id="pam-further.title">Lectures compl&eacute;mentaires</title>
<abstract>
<para>Ceci est une liste de documents concernant PAM et les
domaines gravitant autours. Elle n'a pas la pr&eacute;tention d'&ecirc;tre
compl&egrave;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&eacute;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&eacute;es</title>
<biblioentry>
<title><ulink url="http://openpam.sourceforge.net/">La page d'OpenPAM</ulink></title>
<author>
<surname>Sm&oslash;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>