1321 lines
53 KiB
XML
1321 lines
53 KiB
XML
<?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ø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 à 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>) "sign-on". 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 à FreeBSD 4.x qui utilise Linux-PAM, ainsi qu'à 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 à
|
||
une requ<71>te PAM. La cha<68>ne comprend les informations concernant
|
||
l'ordre dans lequel invoquer les modules, les arguments à 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 à 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 à l'aide
|
||
d'exemples basiques.</para>
|
||
|
||
<section>
|
||
<title>Client et serveurs ne font qu'un</title>
|
||
|
||
<para>Cet exemple simple montre <literal>alice</literal> utilisant
|
||
&man.su.1; pour devenir <literal>root</literal>.</para>
|
||
|
||
|
||
<screen>&prompt.user; <userinput>whoami</userinput>
|
||
alice
|
||
&prompt.user; <userinput>ls -l `which su`</userinput>
|
||
-r-sr-xr-x 1 root wheel 10744 Dec 6 19:06 /usr/bin/su
|
||
&prompt.user; <userinput>su -</userinput>
|
||
Password: <userinput>xi3kiune</userinput>
|
||
&prompt.root; whoami
|
||
root
|
||
</screen>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Le demandeur est <literal>alice</literal>.</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>Le compte est <literal>root</literal>.</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>Le processus &man.su.1; est à la fois client et serveur.</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>Le jeton d'authentification est
|
||
<literal>xi3kiune</literal>.</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>L'arbitre est <literal>root</literal>, ce qui explique
|
||
pourquoi &man.su.1; est setuid
|
||
<literal>root</literal>.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</section>
|
||
|
||
<section>
|
||
<title>Client et serveur sont distincts.</title>
|
||
|
||
<para>L'exemple suivant montre <literal>eve</literal> essayant
|
||
d'initier une connexion &man.ssh.1; vers
|
||
<literal>login.exemple.com</literal>, en demandant à se logguer en
|
||
tant que <literal>bob</literal>. La connexion r<>ussit. Bob aurait du choisir
|
||
un meilleur mot de passe !</para>
|
||
|
||
<screen>&prompt.user; <userinput>whoami</userinput>
|
||
eve
|
||
&prompt.user; <userinput>ssh bob@login.example.com</userinput>
|
||
bob@login.example.com's password: <userinput>god</userinput>
|
||
Last login: Thu Oct 11 09:52:57 2001 from 192.168.0.1
|
||
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
|
||
The Regents of the University of California. All rights reserved.
|
||
FreeBSD 4.4-STABLE (LOGIN) #4: Tue Nov 27 18:10:34 PST 2001
|
||
|
||
Welcome to FreeBSD!
|
||
&prompt.user;</screen>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Le demandeur est <literal>eve</literal>.</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>Le client d'<literal>eve</literal> est repr<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 à
|
||
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 à
|
||
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> à 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à 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 à 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 à
|
||
invoquer, des param<61>tres, options, à 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> à 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 à laquelle la requ<71>te
|
||
correspond et invoque chaque module de la cha<68>ne dans l'ordre
|
||
indiqu<71>, jusqu'à ce que la fin soit atteinte ou qu'aucune
|
||
ex<65>cution suppl<70>mentaire ne soit n<>cessaire (soit à cause du
|
||
succ<63>s d'un module en <literal>binding</literal> ou
|
||
<literal>sufficient</literal>, soit à 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 à 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 —
|
||
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
|
||
à 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> à 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 à
|
||
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 — par exemple fournir un shell au demandeur.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Lorsque le serveur a fini de servir le client, il appelle
|
||
&man.pam.close.session.3; afin de terminer la session.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Pour finir, le serveur appelle &man.pam.end.3; afin signaler
|
||
à la biblioth<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 — 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> à 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 à la place de cinq — le
|
||
champ contenant le nom du service est omis. Il s'agit du mode
|
||
par d<>faut dans FreeBSD 4.x. Notez que si le fichier
|
||
<filename>/etc/pam.conf</filename> existe et contient des
|
||
informations de configuration pour des services qui n'ont pas de
|
||
politique sp<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 à 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> à 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 à la documentation de l'application
|
||
pour d<>terminer quel nom de service elle utilise.</para>
|
||
|
||
|
||
<para>Notez que si vous utilisez
|
||
<filename>/etc/pam.d/</filename> à la place de
|
||
<filename>/etc/pam.conf</filename>, le nom du service est
|
||
sp<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 à associer à chaque code de retour
|
||
possible; mais ceci devrait <20>tre <20>vit<69> puisque ce n'est pas
|
||
standard et <20>troitement li<6C> à 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 à 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 à 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
|
||
à 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 à 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 à 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 à partir de son appartenance à 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 à 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> à 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 à 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 à 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 à 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 à 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 à t<>l<EFBFBD>charger le code source et d'adapter
|
||
&man.openpam.ttyconv.3; à vos besoins, nous pensons qu'elle est
|
||
raisonnablement aussi robuste qu'une fonction de conversation
|
||
orient<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ø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>
|