root/traduc/branches/bv803/manuel/client-auth.sgml

Revision 101, 41.8 kB (checked in by gleu, 3 years ago)

Relecture de plusieurs chapitres.

Line 
1 <!--
2 $Header: /var/lib/cvs/pgsql-fr/sgml/client-auth.sgml,v 1.10 2005/07/15 06:14:20 guillaume Exp $
3 -->
4
5 <chapter id="client-authentication"> <title>Authentification du client</title>
6
7  <indexterm zone="client-authentication"> <primary>authentification
8 client</primary> </indexterm>
9
10  <para>Quand une application client se connecte au serveur de base de données,
11   elle indique le nom de l'utilisateur <productname>PostgreSQL</productname> sous
12   lequel elle désire se connecter, comme lorsqu'on se connecte sur un ordinateur
13   Unix sous un nom d'utilisateur particulier. Au sein de l'environnement SQL, le
14   nom d'utilisateur de la base de données active détermine les droits
15   régissant l'accès aux objets de la base de données &mdash; voir le <xref
16   linkend="user-manag"> pour plus d'informations. Ainsi, il est essentiel de
17   limiter le nombre des bases de données auxquelles les utilisateurs peuvent se
18   connecter.</para>
19
20  <para>L'<firstterm>authentification</firstterm> est le processus par lequel le
21   serveur de bases de données établit l'identité du client et, par extension, par
22   lequel il détermine si l'application cliente (ou l'utilisateur sous le nom de
23   laquelle elle tourne) est autorisée à se connecter sous le nom d'utilisateur
24   demandé.</para>
25
26  <para><productname>PostgreSQL</productname> offre quantité de méthodes
27   d'authentification différentes. La méthode d'authentification d'une connection
28   client particulière peut être sélectionnée d'après l'adresse, la base de données
29   et l'utilisateur de l'hôte client.</para>
30
31  <para>Les noms d'utilisateurs <productname>PostgreSQL</productname> sont
32   séparés de façon logique des noms d'utilisateurs du système d'exploitation sur
33   lequel tourne le serveur. Si tous les utilisateurs d'un serveur donné ont aussi
34   des comptes sur la machine serveur, il peut être pertinent d'attribuer des noms
35   d'utilisateurs de la base de données qui correspondent aux noms d'utilisateurs
36   du système d'exploitation.  Cependant, un serveur qui accepte les connexions
37   distantes peut avoir plusieurs utilisateurs de base de données dépourvus de
38   compte correspondant sur le système d'exploitation, dans de tels cas il n'y a
39   pas besoin de correspondance entre noms d'utilisateurs de bases de données et
40   noms d'utilisateurs du système d'exploitation.</para>
41
42  <sect1 id="auth-pg-hba-conf"> <title>Le fichier <filename>pg_hba.conf</filename></title>
43
44   <indexterm zone="auth-pg-hba-conf"> <primary>pg_hba.conf</primary>
45 </indexterm>
46
47   <para>L'authentification du client est contrôlée par un fichier,
48    traditionnellement nommé <filename>pg_hba.conf</filename> et situé dans le
49    répertoire data du groupe de bases de données, par exemple
50    <filename>/usr/local/pgsql/data/pg_hba.conf</filename> (<acronym>HBA</>
51    signifie <quote>host-based authentication</quote>&nbsp;: authentification
52    fondée sur l'hôte.) Un
53    fichier <filename>pg_hba.conf</filename> par défaut est installé lorsque le
54    répertoire data est initialisé par <command>initdb</command>. Néanmoins, il
55    est possible de placer le fichier de configuration de l'authentification
56    ailleurs&nbsp;; voir le paramètre de configuration <xref linkend="guc-hba-file">.
57   </para>
58
59   <para>Le format général du fichier <filename>pg_hba.conf</filename> est un
60    ensemble d'enregistrements, un par ligne. Les lignes vides sont ignorées tout
61    comme n'importe quel texte placé après le caractère de commentaire
62    <literal>#</literal>. Un enregistrement est constitué d'un certain nombre de
63    champs séparés par des espace et/ou des tabulations. Les champs peuvent contenir
64    des espaces si la valeur du champ est mise entre guillemets. Un enregistrement
65    ne peut pas être  continué sur plusieurs lignes.</para>
66
67   <para>Chaque enregistrement détermine un type de connexion, une plage
68    d'adresses IP (si approprié au type de connexion), un nom de base de données, un
69    nom d'utilisateur et la méthode d'authentification à utiliser pour les
70    connexions correspondant à ces paramètres. Le premier enregistrement
71    correspondant au type de connexion, à l'adresse client, à la base de données
72    demandée et au nom d'utilisateur est utilisé pour effectuer l'authentification.
73    Il n'y a pas de suite après erreur (<quote>fall-through</> ou
74    <quote>backup</>)&nbsp;: si un enregistrement est choisi et que l'authentification
75    échoue, les enregistrements suivants ne sont pas considérés. Si aucun
76    enregistrement ne correspond, l'accès est refusé.</para>
77
78   <para>Un enregistrement peut avoir l'un des formats suivants.
79 <synopsis>
80 local      <replaceable>database</replaceable>  <replaceable>user</replaceable>  <replaceable>authentication-method</replaceable>  <optional><replaceable>authentication-option</replaceable></optional>
81 host       <replaceable>database</replaceable>  <replaceable>user</replaceable>  <replaceable>CIDR-address</replaceable>  <replaceable>authentication-method</replaceable>  <optional><replaceable>authentication-option</replaceable></optional>
82 hostssl    <replaceable>database</replaceable>  <replaceable>user</replaceable>  <replaceable>CIDR-address</replaceable>  <replaceable>authentication-method</replaceable>  <optional><replaceable>authentication-option</replaceable></optional>
83 hostnossl  <replaceable>database</replaceable>  <replaceable>user</replaceable>  <replaceable>CIDR-address</replaceable>  <replaceable>authentication-method</replaceable>  <optional><replaceable>authentication-option</replaceable></optional>
84 host       <replaceable>database</replaceable>  <replaceable>user</replaceable>  <replaceable>IP-address</replaceable>  <replaceable>IP-mask</replaceable>  <replaceable>authentication-method</replaceable>  <optional><replaceable>authentication-option</replaceable></optional>
85 hostssl    <replaceable>database</replaceable>  <replaceable>user</replaceable>  <replaceable>IP-address</replaceable>  <replaceable>IP-mask</replaceable>  <replaceable>authentication-method</replaceable>  <optional><replaceable>authentication-option</replaceable></optional>
86 hostnossl  <replaceable>database</replaceable>  <replaceable>user</replaceable>  <replaceable>IP-address</replaceable>  <replaceable>IP-mask</replaceable>  <replaceable>authentication-method</replaceable>  <optional><replaceable>authentication-option</replaceable></optional>
87 </synopsis>
88
89
90    La signification des champs est la suivante&nbsp;:
91
92    <variablelist>
93     <varlistentry> <term><literal>local</literal></term>
94      <listitem> <para>Cet enregistrement intercepte les tentatives de connexion
95      utilisant les sockets du domaine Unix. Sans un enregistrement de ce type, les
96      connections de sockets du domaine Unix ne sont pas permises.  </para>
97      </listitem></varlistentry>
98
99     <varlistentry>
100      <term><literal>host</literal></term>
101      <listitem>
102       <para>
103        Cet enregistrement intercepte les tentatives de connexion utilisant les
104        réseaux TCP/IP. Les lignes <literal>host</literal> enregistrent des
105        tentatives de connexion soit <acronym>SSL</acronym> soit non
106        <acronym>SSL</acronym>.
107       </para>
108
109       <note>
110        <para>
111         Supprimer les connexions TCP/IP ne sera pas possible si le serveur
112         est lancé avec la valeur appropriée pour le paramètre de configuration
113         <xref linkend="guc-listen-addresses"> car le comportement par défaut
114         est d'écouter les connexions TCP/IP provenant seulement de l'adresse
115         local <literal>localhost</>.
116        </para>
117       </note>
118      </listitem>
119     </varlistentry>
120
121     <varlistentry>
122      <term><literal>hostssl</literal></term>
123      <listitem>
124       <para>
125        Cet enregistrement intercepte les tentatives de connexions utilisant TCP/IP
126        mais seulement quand ces connexions utilisent le chiffrement <acronym>SSL</acronym>.
127       </para>
128
129       <para>
130        Pour être en mesure de faire usage de cette fonction, le serveur
131        doit être compilé avec le support de <acronym>SSL</acronym>. De plus,
132        <acronym>SSL</acronym> doit être activé au lancement du serveur en
133        positionnant le paramètre de configuration <xref linkend="guc-ssl">
134        (voir la <xref linkend="ssl-tcp"> pour plus d'informations).
135       </para>
136      </listitem>
137     </varlistentry>
138
139     <varlistentry>
140      <term><literal>hostnossl</literal></term>
141      <listitem>
142       <para>
143        Cet enregistrement a une logique opposée à <literal>hostssl</>&nbsp;: il
144        n'intercepte que les tentatives de connexion n'utilisant pas
145        <acronym>SSL</acronym>.
146       </para>
147      </listitem>
148     </varlistentry>
149
150     <varlistentry>
151      <term><replaceable>database</replaceable></term>
152      <listitem>
153       <para>
154        Indique quelles bases de données l'enregistrement concerne. La valeur
155        <literal>all</literal> indique qu'il concerne toutes les bases de données.
156        La valeur <literal>sameuser</> spécifie que l'enregistrement n'intercepte
157        que si la base de données demandée a le même nom que l'utilisateur demandé.
158        La valeur <literal>samegroup</> spécifie que l'utilisateur demandé doit être
159        membre du groupe portant le même nom que la base de données demandée. Sinon,
160        c'est le nom d'une base de données <productname>PostgreSQL</productname>
161        particulière. Des noms de bases de données multiples peuvent être fournis en
162        les séparant par des virgules. Un fichier contenant des noms de bases de
163        données peut être indiqué en faisant précéder le nom de fichier de
164        <literal>@</>.
165       </para>
166      </listitem>
167     </varlistentry>
168
169     <varlistentry>
170      <term><replaceable>user</replaceable></term>
171      <listitem>
172       <para>
173        Indique à quels utilisateurs <productname>PostgreSQL</> cet enregistrement
174        correspond. La valeur <literal>all</literal> indique qu'il concerne tous
175        les utilisateurs. Autrement, c'est le nom d'un utilisateur
176        <productname>PostgreSQL</productname> particulier. Plusieurs noms
177        d'utilisateurs peuvent être fournis en les séparant avec des virgules.
178        Les noms de groupes peuvent être spécifiés en précédant le nom de groupe
179        du signe <literal>+</>. Un fichier contenant des noms d'utilisateurs peut
180        être indiqué en faisant précéder le nom de fichier du signe <literal>@</>.
181       </para>
182      </listitem>
183     </varlistentry>
184
185     <varlistentry>
186      <term><replaceable>CIDR-address</replaceable></term>
187      <listitem>
188       <para>
189       Spécifie l'échelle d'adresses IP du client auquel correspond cet
190       enregistrement. Il contient une adresse IP dans la notation décimale
191       standard et une longueur de masque CIDR (les adresses IP
192       peuvent seulement être spécifiées numériquement, mais pas en tant que
193       nom d'hôte ou de domaine). La longueur du masque indique le nombre de
194       bits pour lequel une correspondance doit être apportée avec l'adresse
195       IP du client. Les bits à droite doivent valoir zéro dans l'adresse IP
196       indiquée. Il ne doit y avoir aucun espace blanc entre l'adresse IP, le
197       <literal>/</literal> et la longueur du masque CIDR.
198       </para>
199
200       <para>
201       Une adresse CIDR (<replaceable>CIDR-address</replaceable>) est typiquement
202       <literal>172.20.143.89/32</literal> pour un hôte seul ou
203       <literal>172.20.143.0/24</literal> pour un réseau. Pour spécifier un seul
204       hôte, utilisez un masque de 32 pour IPv4 ou 128 pour IPv6.
205       </para>
206
207       <para>
208        Une adresse IP au format IPv4 correspondra aux connexions IPv6 qui auront
209        l'adresse correspondante. Par exemple, <literal>127.0.0.1</> correspondra
210        à l'adresse IPv6 <literal>::ffff:127.0.0.1</>. Une entrée donnée au
211        format IPv6 correspondra uniquement aux connexions IPv6 même si l'adresse
212        représentée est dans le domaine IPv4-vers-IPv6. Notez que les adresses au
213        format IPv6 seront rejetées si la bibliothèque système C ne supporte pas
214        les adresses IPv6.
215       </para>
216
217       <para>Ce champ ne concerne que les enregistrements
218        <literal>host</literal>, <literal>hostssl</literal> et <literal>hostnossl</>.
219       </para>
220      </listitem>
221     </varlistentry>
222
223     <varlistentry>
224      <term><replaceable>IP-address</replaceable></term>
225      <term><replaceable>IP-mask</replaceable></term>
226      <listitem>
227       <para>
228        Ces champs pourraient être utilisés comme alternative à la notation
229        <replaceable>CIDR-address</replaceable>. Au lieu de spécifier la longueur
230        du masque, le masque actuel est spécifié comme une colonne séparée. Par
231        exemple, <literal>255.0.0.0</> représente une longueur de masque CIDR
232        IPv4 de 8, et <literal>255.255.255.255</> représente une longueur de masque
233        de 32.
234       </para>
235
236       <para>Ces champ ne concernent que les enregistrements
237 <literal>host</literal>, <literal>hostssl</literal> et <literal>hostnossl</>.
238 </para> </listitem> </varlistentry> 
239
240     <varlistentry> <term><replaceable>authentication-method</replaceable></term>
241 <listitem> <para>Détermine la méthode d'authentification à utiliser lors d'une
242 connexion via cet enregistrement. Les choix possibles sont résumés ici&nbsp;; les
243 détails se trouvent dans la <xref linkend="auth-methods">.
244
245        <variablelist> <varlistentry> <term><literal>trust</></term> <listitem>
246 <para>Autorise la connexion sans conditions. Cette méthode permet à
247 n'importe qui de se connecter au serveur de bases de données
248 <productname>PostgreSQL</productname>, de s'enregistrer comme n'importe quel
249 utilisateur <productname>PostgreSQL</productname> de son choix sans nécessiter
250 de mot de passe. Voir la <xref linkend="auth-trust"> pour les détails.  </para>
251 </listitem> </varlistentry>
252
253        <varlistentry> <term><literal>reject</></term> <listitem> <para>Rejette
254 la connexion sans conditions. Ce cas est utile pour <quote>filtrer</>
255 certains hôtes d'un groupe.  </para> </listitem> </varlistentry>
256
257        <varlistentry> <term><literal>md5</></term> <listitem> <para>Demande au
258 client de fournir un mot de passe chiffré MD5 pour son authentification. Voir
259 la <xref linkend="auth-password"> pour
260 les détails.  </para> </listitem> </varlistentry>
261
262        <varlistentry>
263         <term><literal>crypt</></term>
264         <listitem>
265          <para>
266           Requiert que le client fournisse un mot de passe crypté avec
267           <function>crypt()</> pour l'authentification. <literal>md5</literal>
268           est préféré pour les clients 7.2 et suivants mais les versions
269           antérieures ne supportent que <literal>crypt</literal>. Voir <xref
270           linkend="auth-password"> pour les détails.
271          </para>
272         </listitem>
273        </varlistentry>
274
275        <varlistentry>
276         <term><literal>password</></term>
277         <listitem>
278          <para>
279           Requiert que le client fournisse un mot de passe non crypté pour
280           l'authentification. <literal>md5</> est préféré sur les clients 7.2
281           et ultérieures mais les versions antérieures ne supportent que
282           <literal>crypt</literal>. Voir <xref linkend="auth-password"> pour
283           les détails.
284          </para>
285         </listitem>
286        </varlistentry>
287
288        <varlistentry> <term><literal>krb4</></term> <listitem> <para>Utilise Kerberos
289 V4 pour authentifier l'utilisateur. Ceci n'est disponible que pour
290 les connexions TCP/IP. Voir <xref linkend="kerberos-auth"> pour les détails.
291 </para> </listitem> </varlistentry>
292
293        <varlistentry> <term><literal>krb5</></term> <listitem> <para>Utilise Kerberos
294 V5 pour authentifier l'utilisateur. Ceci n'est disponible que pour
295 les connexions TCP/IP. Voir <xref linkend="kerberos-auth"> pour les détails.
296 </para> </listitem> </varlistentry>
297
298        <varlistentry>
299         <term><literal>ident</></term>
300         <listitem>
301          <para>
302           Récupère le nom de l'utilisateur du système d'exploitation du client
303           (pour les connexions TCP/IP en contactant le serveur d'identification
304           sur le client, pour les connexions locales, en l'obtenant du système
305           d'exploitation) et vérifie si l'utilisateur est autorisé à se
306           connecter en tant qu'utilisateur de la base de données demandé en
307           consultant la correspondance indiquée après le mot clé
308           <literal>ident</literal>. Voir la <xref linkend="auth-ident">
309           ci-dessous pour les détails.
310          </para>
311         </listitem>
312        </varlistentry>
313
314        <varlistentry>
315         <term><literal>pam</></term>
316         <listitem>
317          <para>
318           Authentifie en utilisant les Pluggable Authentification Modules (PAM)
319           fournis par le système d'exploitation. Voir la <xref linkend="auth-pam">
320           pour les détails.
321          </para>
322         </listitem>
323        </varlistentry>
324       </variablelist>
325      </para>
326     </listitem>
327    </varlistentry>
328
329    <varlistentry>
330     <term><replaceable>authentication-option</replaceable></term>
331      <listitem>
332       <para>
333        La signification de ce champ optionnel dépend de la méthode
334        d'authentification choisie. Des détails sont disponibles ci-dessous.
335       </para>
336      </listitem>
337     </varlistentry>
338    </variablelist>
339   </para>
340
341   <para>
342    Les fichiers inclus par les constructions <literal>@</> sont lus comme des
343    listes de noms, qui peuvent être séparés par soit des espaces blancs soit
344    des virgules. Les commentaires sont introduits par le caractère
345    <literal>#</literal> comme dans <filename>pg_hba.conf</filename>, et les
346    constructions <literal>@</> imbriquées sont autorisées. Sauf si le nom du
347    fichier suivant <literal>@</> est un chemin absolu, il est supposé relatif
348    au répertoire contenant le fichier le référençant.
349   </para>
350
351   <para>Les enregistrements du fichier <filename>pg_hba.conf</filename> sont
352 examinés séquentiellement pour chaque tentative de connexion, l'ordre des
353 enregistrements est significatif. Généralement, les premiers enregistrements
354 auront des paramètres d'interception de connexions plus stricts alors que les
355 enregistrements suivants auront des paramètres plus larges et des méthodes
356 d'authentification plus fortes. Par exemple, on pourrait souhaiter utiliser
357 l'authentification <literal>trust</> pour les connexions TCP/IP locales mais
358 demander un mot de passe pour les connexion TCP/IP distantes. Dans ce cas, un
359 enregistrement spécifiant une authentification <literal>trust</> pour les
360 connexions issues de 127.0.0.1 apparaîtrait avant un enregistrement spécifiant
361 une authentifications par mot de passe pour une plage plus étendue d'adresses IP
362 client autorisées.  </para>
363
364   <para>Le fichier <filename>pg_hba.conf</filename> est lu au démarrage et
365 quand le processus serveur principal (<command>postmaster</>) reçoit un signal
366 <systemitem>SIGHUP</systemitem><indexterm><primary>SIGHUP</primary></indexterm>.
367 Si vous éditez le fichier sur un système actif, vous aurez à signaler au
368 <command>postmaster</> (en utilisant <literal>pg_ctl reload</> ou <literal>kill
369 -HUP</>) de relire le fichier.  </para>
370
371   <para>Quelques exemples des entrées de <filename>pg_hba.conf</filename> sont décrit
372 ci-dessous dans l'<xref linkend="example-pg-hba.conf">. Voir la section suivante pour
373 les détails des méthodes d'authentification.  </para>
374
375    <example id="example-pg-hba.conf"> <title>Exemple d'entrées de
376 <filename>pg_hba.conf</filename></title> <programlisting>
377 # Permet à n'importe quel utilisateur du système local de se connecter à la base
378 # de données sous n'importe quel nom d'utilisateur en utilisant les sockets du
379 # domaine Unix. (par défaut pour les connexions locales)
380 #
381 # TYPE  DATABASE    USER        CIDR-ADDRESS        METHOD
382 local   all         all                             trust
383
384 # Identique à ci-dessus mais utilise les connexions TCP/IP locales loopback.
385 #
386 # TYPE  DATABASE    USER        CIDR-ADDRESS        METHOD
387 host    all         all         127.0.0.1/32        trust
388
389 # Identique à la dernière ligne mais en utilisant une colonne netmask séparée CDIR.
390 #
391 # TYPE  DATABASE    USER        IP-ADDRESS          IP-mask              METHOD
392 host    all         all         127.0.0.1           255.255.255.255      trust
393
394 # Permet à n'importe que utilisateur de n'importe quel hôte avec l'adresse IP
395 # 192.168.93.x de se connecter à la base de données "template1" sous le même nom
396 # d'utilisateur que l'identification le signale à la connexion (généralement le
397 # nom utilisateur Unix).
398 #
399 # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
400 host    template1   all         192.168.93.0/24       ident sameuser
401
402 # Permet à un utilisateur de l'hôte 192.168.12.10 de se connecter à la base de
403 # données "template1" si le mot de passe de l'utilisateur est fourni sans
404 # erreur.
405 #
406 # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
407 host    template1   all         192.168.12.10/32      md5
408
409 # En l'absence de lignes "host" antérieures, ces deux lignes rejetteront toutes
410 # les connexions en provenance de 192.168.54.1 (puisque cette entrée déclenchera
411 # en premier), mais autorisera les connexions Kerberos 5 de n'importe où
412 # ailleurs sur l'Internet. Le masque zéro signifie qu'aucun bit sur l'ip de
413 # l'hôte n'est considéré, de sorte à correspondre à tous les hôtes.
414 #
415 # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
416 host    all         all         192.168.54.1/32       reject
417 host    all         all         0.0.0.0/0             krb5
418
419 # Permet à tous les utilisateurs de se connecter depuis 192.168.x.x à n'importe
420 # quelle base de données si ils passent la verification d'identification. Si,
421 # par exemple, l'identification indique que l'utilisateur est "bryanh" et qu'il
422 # demande à se connecter en tant qu'utilisateur PostgreSQL "guest1", la
423 # connexion n'est permise que s'il existe une entrée dans pg_ident.conf pour la
424 # correspondance "omicron" disant que "bryanh" est autorisé à se connecter en
425 # tant que "guest1".
426 #
427 # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
428 host    all         all         192.168.0.0/16        ident omicron
429
430 # Si ce sont les trois seules lignes traitant les connexions locales, elles
431 # autoriseront les utilisateurs locaux à se connecter uniquement à leur propre
432 # base de données (bases de données ayant le même nom que leur nom
433 # d'utilisateur) exception faite pour les administrateurs et les membres du
434 # groupe "support" qui peuvent se connecter à toutes les bases de données.  Le
435 # fichier $PGDATA/admins contient une liste de noms d'utilisateurs. Un mot de
436 # passe est requis dans tous les cas.
437 #
438 # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
439 local   sameuser    all                               md5
440 local   all         @admins                           md5
441 local   all         +support                          md5
442
443 # Les deux dernières lignes ci-dessus peuvent être combinées en une seule ligne:
444 local   all         @admins,+support                                md5
445
446 # La colonne database peut aussi utiliser des listes et des noms de fichiers
447 # mais pas de groupes:
448 local   db1,db2,@demodbs  all                                       md5
449 </programlisting> </example> </sect1>
450
451  <sect1 id="auth-methods">
452  <title>Méthodes d'authentification</title>
453  <para>
454   Les sous-sections suivantes décrivent les méthodes d'authentification plus en détail.  </para>
455
456   <sect2 id="auth-trust">
457   <title>Authentification Trust</title>
458
459    <para>
460     Quand l'authentification <literal>trust</> est spécifiée,
461     <productname>PostgreSQL</productname> suppose que n'importe qui pouvant se
462     connecter au serveur est autorisé à accéder à la base de données quel que
463     soit le nom d'utilisateur de base de données qu'il fournisse (incluant le
464     super-utilisateur de la base de données). Bien sûr, les restrictions
465     apportées dans les colonnes <literal>database</> et <literal>user</>
466     s'appliquent toujours. Cette méthode ne devrait être utilisée que s'il
467     existe des protections au niveau système portant sur les connexions au
468     serveur.
469    </para>
470
471    <para>L'authentification <literal>trust</> est appropriée et très pratique
472 lors de connexions locales sur une station de travail mono-utilisateur. Elle
473 n'est généralement <emphasis>pas</> appropriée en soi sur une machine
474 multi-utilisateur. Cependant, vous pouvez utiliser <literal>trust</> même sur
475 une machine multi-utilisateur, si vous restreignez l'accès au fichier socket du
476 domaine Unix en utilisant les permissions du système de fichiers. Pour ce faire,
477 positionnez les paramètres de configuration
478 <varname>unix_socket_permissions</varname> (et si besoin
479 <varname>unix_socket_group</varname>) comme décrit dans la <xref
480 linkend="runtime-config-connection">.  Vous pouvez aussi positionner le
481 paramètre de configuration <varname>unix_socket_directory</varname> de façon à
482 placer le fichier de socket dans un répertoire à l'accès convenablement
483 restreint.  </para>
484
485    <para>Utiliser les droits du système de fichiers n'est utile que dans
486 le cas de connexions utilisant des sockets Unix. Cela ne restreint pas les
487 connexions TCP/IP locales&nbsp;; ainsi, si vous voulez utiliser les droits du
488 système de fichiers pour assurer la sécurité locale, supprimez la ligne
489 <literal>host ...127.0.0.1 ...</> de <filename>pg_hba.conf</> ou changez-la
490 - indiquer une méthode d'authentification différente de <literal>trust</>.
491 </para>
492
493    <para>L'authentification <literal>trust</> n'est utile pour les connexions
494 TCP/IP que si chaque utilisateur de chaque machine autorisée à se connecter au
495 serveur par les lignes <filename>pg_hba.conf</> indiquant <literal>trust</> est
496 digne de confiance. Il est rarement raisonnable d'utiliser <literal>trust</>
497 pour une connexion autre que celles issues de <systemitem>localhost</>
498 (127.0.0.1).  </para>
499
500   </sect2>
501
502   <sect2 id="auth-password"> <title>Authentification par mot de passe</title>
503
504    <indexterm>
505     <primary>MD5</>
506    </indexterm>
507
508    <indexterm>
509      <primary>crypt</>
510    </indexterm>
511    <indexterm>
512      <primary>mot de passe</primary>
513      <secondary>authentification</secondary>
514    </indexterm>
515
516    <para>
517     Les méthodes basées sur une authentification par mot de passe sont
518     <literal>md5</>, <literal>crypt</> et <literal>password</>. Ces méthodes
519     fonctionnent de façon analogue, sauf pour le mode d'envoi du mot de passe
520     au travers de la connexion. Néanmoins, <literal>crypt</> n'autorise pas
521     le stockage des mots de passe cryptées dans <structname>pg_shadow</structname>.
522    </para>
523
524    <para>
525     Si vous êtes préoccupé par les attaques par <quote>interception
526     (sniffing)</> de mot de passe, alors <literal>md5</> est préférable, avec
527     <literal>crypt</> en second choix si vous devez supporter les client pré
528     7.2. Le simple <literal>password</> devrait particulièrement être
529     évité pour les connexion sur l'Internet ouvert (à moins d'utiliser
530     <acronym>SSL</acronym>, SSH ou d'autres systèmes de sécurité par
531     encapsulation de connexion).
532    </para>
533
534    <para>
535     Les mots de passe de bases de données <productname>PostgreSQL</productname>
536     sont distincts des mots de passe du système d'exploitation. Le mot de passe
537     de chaque utilisateur est enregistré dans la table catalogue système
538     <literal>pg_shadow</>. Les mots de passes peuvent être  gérés avec les
539     commandes SQL <xref linkend="sql-createuser" endterm="sql-createuser-title">
540     et <xref linkend="sql-alteruser" endterm="sql-alteruser-title">, par
541     exemple <userinput>CREATE USER foo WITH PASSWORD 'secret';</userinput>. Par
542     défaut, si aucun mot de passe n'a été fixé, le mot de passe enregistré sera
543     nul et l'authentification par mot de passe échouera systématiquement pour
544     cet utilisateur.
545    </para>
546
547   </sect2>
548
549   <sect2 id="kerberos-auth"> <title>Authentification Kerberos</title>
550
551    <indexterm zone="kerberos-auth"> <primary>Kerberos</primary> </indexterm>
552
553    <para><productname>Kerberos</productname> est un système d'authentification
554 sécurisé de standard industriel destiné à l'informatique distribuée sur un
555 réseau public. Une description du système <productname>Kerberos</productname>
556 est bien au-delà des objectifs de ce document&nbsp; c'est généralement assez complexe
557 (bien que puissant). La <ulink
558 url="http://www.nrl.navy.mil/CCS/people/kenh/kerberos-faq.html"> <acronym>FAQ</>
559 Kerberos</ulink> ou <ulink url="ftp://athena-dist.mit.edu">le projet Athena du
560 MIT</ulink> peuvent être un bon point de départ pour une exploration. Il existe
561 plusieurs sources de distribution <productname>Kerberos</>.  </para>
562
563    <para>Bien que <productname>PostgreSQL</> supporte Kerberos 4 et 5, seul
564 Kerberos 5 est recommandé. Kerberos 4 est considéré peu sûr et n'est plus
565 recommandé pour un usage classique.    </para>
566
567    <para>Pour utiliser <productname>Kerberos</>, son support doit être activé
568 au moment de la compilation.  Voir le <xref linkend="installation"> pour plus
569 d'informations. Kerberos 4 et 5 sont supportés mais une seule version peut être
570 activée lors d'une compilation.</para>
571
572    <para><productname>PostgreSQL</> fonctionne comme un service Kerberos
573 normal.  Le nom du service principal est
574 <literal><replaceable>nom_service</>/<replaceable>nom_hote</>@<replaceable>domaine</></literal>,
575 où <replaceable>servicename</> est <literal>postgres</literal> (à moins qu'un
576 nom de service différent soit sélectionné lors de la configuration avec
577 <literal>./configure --with-krb-srvnam=quelquechose</>). <replaceable>nom_hote</>
578 est le nom de l'hôte pleinement qualifié (fully qualified host name) de la
579 machine serveur. Le domaine principal du service est le domaine préféré du
580 serveur.</para>
581
582    <para>Les principaux clients doivent avoir leur nom d'utilisateur
583 <productname>PostgreSQL</> comme premier composant, par exemple
584 <literal>nomutilisateurpg/autreschoses@domaine</>. Actuellement, le domaine du client
585 n'est pas vérifié par <productname>PostgreSQL</>&nbsp;; ainsi si vous avez activé
586 l'authentification "cross-realm", chaque "principal" de chaque domaine qui peut
587 communiquer avec le vôtre sera accepté.  </para>
588
589    <para>Assurez-vous que le fichier de clés du serveur est en lecture (et de
590 préférence en lecture seule) pour le compte serveur
591 <productname>PostgreSQL</productname> (voir aussi la <xref
592 linkend="postgres-user">). L'emplacement du fichier de clés est indiqué grâce au
593 paramètre de configuration <xref linkend="guc-krb-server-keyfile"> fourni à l'exécution.
594 (Voir aussi <xref linkend="runtime-config">.) Par défaut le fichier est
595 <filename>/etc/srvtab</> si vous utilisez Kerberos 4 et
596 <filename>/usr/local/pgsql/etc/krb5.keytab</> (ou le
597 répertoire spécifié par <varname>sysconfdir</> à la compilation) avec Kerberos
598 5.  </para>
599
600    <para>Pour générer le fichier keytab, utilisez par exemple (avec la version
601 5)&nbsp;: <screen> <prompt>kadmin% </><userinput>ank -randkey
602 postgres/server.my.domain.org</> <prompt>kadmin% </><userinput>ktadd -k
603 krb5.keytab postgres/server.my.domain.org</> </screen> Lisez la documentation
604 <productname>Kerberos</> pour les détails.  </para>
605
606    <para>Lors de la connexion à la base de données, assurez-vous que vous avez
607 un ticket pour un "principal" correspondant au nom d'utilisateur de la base de
608 données demandé. Exemple : pour le nom d'utilisateur de la base
609 <literal>fred</>, les "principal" <literal>fred@EXAMPLE.COM</> et
610 <literal>fred/users.exemple.com@EXAMPLE.COM</> peuvent être utilisés pour
611 authentifier le serveur de bases de données.  </para>
612
613    <para>Si vous utilisez <application>mod_auth_kerb</application> de <ulink
614 url="http://modauthkerb.sf.net">http://modauthkerb.sf.net</ulink> et
615 <application>mod_perl</application> sur votre serveur web
616 <productname>Apache</productname>, vous pouvez utiliser <literal>AuthType
617 KerberosV5SaveCredentials</literal> avec un script
618 <application>mod_perl</application>. Cela fournit un accès sûr aux bases de
619 données, sans demander de mots de passe supplémentaires.  </para>
620
621   </sect2>
622
623   <sect2 id="auth-ident"> <title>Authentification basée sur
624 l'identification</title>
625
626    <indexterm> <primary>ident</primary> </indexterm>
627
628    <para>La méthode d'authentification par identification fonctionne en
629 obtenant les noms d'utilisateurs du système d'exploitation, puis en déterminant
630 les noms d'utilisateurs de bases de données autorisés, en utilisant un fichier
631 de correspondance qui liste les paires d'utilisateurs correspondants.
632 Déterminer le nom d'utilisateur du client est le point critique en matière de
633 sécurité, et il fonctionne différemment selon le type de connexion.  </para>
634
635    <sect3> <title>Authentification par identification sur TCP/IP</title>
636
637    <para>Le <quote>protocole d'identification</quote> est décrit dans la
638 <citetitle>RFC 1413</citetitle>. Théoriquement, chaque système d'exploitation de
639 type Unix contient un serveur d'identification qui écoute par défaut le port TCP
640 113. La fonctionnalité basique d'un serveur d'identification est la réponse aux
641 questions telles que <quote>Quel utilisateur a initié la connexion qui sort de
642 votre port <replaceable>X</replaceable> et se connecte à mon port
643 <replaceable>Y</replaceable>?</quote>. <productname>PostgreSQL</> connaissant
644 <replaceable>X</> et <replaceable>Y</> quand une connexion physique est établie,
645 il peut interroger le serveur d'identification de l'hôte du client qui se
646 connecte et peut ainsi théoriquement déterminer quel est l'utilisateur du
647 système d'exploitation pour n'importe quelle connexion.  </para>
648
649    <para>Le défaut de cette procédure est qu'elle dépend de l'intégrité du
650 client&nbsp;: si la machine client est douteuse ou compromise, un attaquant peut
651 lancer n'importe quel programme sur le port 113 et renvoyer un nom d'utilisateur
652 de son choix. Cette méthode d'authentification n'est par conséquent appropriée
653 que dans le cas de réseaux fermés dans lesquels chaque machine client est
654 soumise à un contrôle strict et dans lesquels les administrateurs du système et
655 des bases de données opèrent en proche collaboration. En d'autres mots, vous
656 devez pouvoir faire confiance à la machine hébergeant le serveur
657 d'identification.  Considérez cet avertissement: <blockquote> <attribution>RFC
658 1413</attribution> <para>Le protocole d'identification n'a pas vocation à être
659 un protocole d'autorisation ou de contrôle d'accès.  </para> </blockquote>
660 </para>
661
662    <para>
663     Quelques serveurs ident ont une option non standard qui font que le nom de
664     l'utilisateur est renvoyé crypté en utilisant une clé que seul
665     l'administrateur de la machine d'origine connaît. Cette option <emphasis>ne
666     doit pas</> être utilisée lors de l'utilisation du serveur ident avec
667     <productname>PostgreSQL</> car <productname>PostgreSQL</> n'a aucun moyen
668     de décrire la chaîne renvoyée pour déterminer le réel nom de l'utilisateur.
669    </para>
670
671 </sect3>
672
673    <sect3> <title>Authentification par l'identification sur sockets
674 locaux</title>
675
676    <para>Sur les systèmes supportant les requêtes <symbol>SO_PEERCRED</symbol>
677 pour les sockets du domaine Unix (actuellement <systemitem
678 class="osname">Linux</>, <systemitem class="osname">FreeBSD</>, <systemitem
679 class="osname">NetBSD</>, <systemitem class=osname>OpenBSD</> et <systemitem
680 class="osname">BSD/OS</>), l'authentification par identification peut aussi être
681 appliquée aux connexions locales. Dans ce cas, l'utilisation de
682 l'authentification par identification n'ajoute aucun risque lié à la sécurité.
683 </para>
684
685     <para>
686      Sur les systèmes sans requêtes <symbol>SO_PEERCRED</>, l'authentification
687      par identification n'est disponible que pour les connexions TCP/IP. En
688      complément, il est possible de préciser  <systemitem
689      class="systemname">l'adresse localhost</> <systemitem
690      class="systemname">127.0.0.1</> et d'établir une connexion à cette
691      adresse. Vous pouvez avoir confiance en cette méthode si vous avez
692      confiance dans le serveur ident local.
693     </para>
694    </sect3>
695
696    <sect3 id="auth-ident-maps">
697     <title>Correspondance d'identité</title>
698
699    <para>Lorsque vous utilisez l'authentification basée sur l'identification,
700 après avoir déterminé le nom de l'utilisateur du système d'exploitation qui a
701 initié la connexion, <productname>PostgreSQL</productname> vérifie si cet
702 utilisateur est autorisé à se connecter par le nom d'utilisateur de base de
703 données qu'il demande. Ceci est contrôlé par l'argument ident map qui suit le
704 mot clé <literal>ident</> dans le fichier <filename>pg_hba.conf</filename>. Il
705 existe une correspondance d'identité prédéfinie, <literal>sameuser</literal>,
706 qui permet à n'importe quel utilisateur du système d'exploitation de se
707 connecter en tant qu'utilisateur de base de données du même nom (si ce dernier
708 existe). Les autres correspondances doivent être créées manuellement.  </para>
709
710    <para>
711     Les correspondances d'identité autres que <literal>sameuser</literal>
712     sont définies dans le fichier de correspondance d'identité, qui est nommé
713     par défaut <filename>pg_ident.conf</filename>
714     <indexterm><primary>pg_ident.conf</primary></indexterm> et qui est stocké
715     par défaut dans le répertoire data (il est possible de placer le fichier
716     de correspondance ailleurs&nbsp;; voir le paramètre de configuration
717     <xref linkend="guc-ident-file">). Ce fichier contient des lignes de la forme
718     suivante&nbsp;:
719 <synopsis>
720 <replaceable>nom-correspondance</> <replaceable>nomutilisateur-ident</> <replaceable>base-donnee-utilisateur</>
721 </synopsis>
722     Les commentaires et les espaces sont gérés de la façon habituelle dans le
723     fichier <filename>pg_hba.conf</>. Le <replaceable>map-name</> est un
724 nom arbitraire qui sera utilisé pour se référer à cette correspondance dans
725 <filename>pg_hba.conf</filename>. Les deux autres champs spécifient quel
726 utilisateur du système d'exploitation est autorisé à se connecter sous quel nom
727 d'utilisateur de base de données. Le même <replaceable>nom-correspondance</>
728 peut être répété pour spécifier plusieurs correspondances d'utilisateurs au sein
729 d'une même table de correspondance. Il n'y a pas de restriction sur le nombre
730 d'utilisateurs de bases de données auxquels un utilisateur de système
731 d'exploitation donné peut correspondre et vice-versa.  </para>
732
733   <para>Le fichier <filename>pg_ident.conf</filename> est lu au démarrage et
734 quand le processus serveur principal (<command>postmaster</>) reçoit un signal
735 <systemitem>SIGHUP</systemitem><indexterm><primary>SIGHUP</primary></indexterm>.
736 Si vous éditez le fichier sur un système actif, vous aurez besoin de signaler au
737 <command>postmaster</> (en utilisant <literal>pg_ctl reload</> ou <literal>kill
738 -HUP</>) qu'il doit relire le fichier.  </para>
739
740    <para>L'<xref linkend="example-pg-ident.conf"> montre un fichier
741 <filename>pg_ident.conf</filename> pouvant être utilisé conjointement avec le
742 fichier <filename>pg_hba.conf</> de l'<xref linkend="example-pg-hba.conf">. Dans
743 cette configuration d'exemple, n'importe qui connecté sur une machine du réseau
744 192.168 qui n'a pas de nom utilisateur Unix <literal>bryanh</>, <literal>ann</>,
745 ou <literal>robert</> ne pourrait obtenir d'accès. L'utilisateur Unix
746 <literal>robert</> ne serait autorisé à se connecter que lorsqu'il se connecte
747 sous l'utilisateur <productname>PostgreSQL</> <literal>bob</> et non
748 <literal>robert</> ni n'importe qui d'autre. <literal>ann</> ne serait autorisée
749 à se connecter qu'en tant que <literal>ann</>. L'utilisateur <literal>bryanh</>
750 ne serait autorisé à se connecter qu'en tant que <literal>bryanh</> lui-même ou
751 comme <literal>guest1</>.  </para>
752
753    <example id="example-pg-ident.conf"> <title>Un fichier d'exemple
754 <filename>pg_ident.conf</></title> <programlisting>
755 # CORRESPONDANCE     NOMUTILISATEUR-IDENT    NOMUTILISATEUR-PG
756
757 omicron              bryanh                  bryanh
758 omicron              ann                     ann
759 # bob a le nom d'utilisateur robert sur ces machines
760 omicron              robert                  bob
761 # bryanh peut aussi se connecter en tant que guest1
762 omicron              bryanh                  guest1
763 </programlisting> </example>
764 </sect3> </sect2>
765
766   <sect2 id="auth-pam"> <title>Authentification PAM</title>
767
768    <indexterm zone="auth-pam">
769     <primary>PAM</primary>
770    </indexterm>
771
772    <para>Cette méthode d'authentification fonctionne de façon similaire à
773     <literal>password</literal> à ceci près qu'elle utilise PAM (Pluggable
774     Authentication Modules) comme mécanisme d'authentification. Le nom du
775     service PAM par défaut est <literal>postgresql</literal>. Vous pouvez
776     éventuellement fournir votre nom de service grâce au mot clé <literal>pam</>
777     du <filename>pg_hba.conf</filename>. PAM est seulement utilisé pour valider
778     des paires nom utilisateur/mot de passe. Du coup, l'utilisateur doit déjà
779     exister dans la base de données avant que PAM ne puisse être utilisé pour
780     l'authentification. Pour plus d'informations sur PAM, merci de lire la
781     <ulink url="http://www.kernel.org/pub/linux/libs/pam/">page
782     <productname>Linux-PAM</></ulink> et la <ulink
783     url="http://www.sun.com/software/solaris/pam/">page PAM <systemitem
784     class="osname">Solaris</></ulink>.</para>
785   </sect2>
786  </sect1>
787
788   <sect1 id="client-authentication-problems"> <title>Problèmes
789 d'authentification</title>
790
791    <para>Les erreurs et problèmes d'authentification se manifestent
792 généralement par des messages d'erreurs tels que ceux qui suivent.  </para>
793
794    <para>
795 <ProgramListing>
796 FATAL:  no pg_hba.conf entry for host "123.123.123.123", user "andym", database "testdb"
797 </ProgramListing>
798     C'est ce que vous risquez le plus d'obtenir si vous parvenez à contacter
799     le serveur mais qu'il refuse de vous parler. Comme le suggère le message,
800     le serveur a refusé la demande de connexion parce qu'il n'a trouvé aucune
801     entrée l'y autorisant dans son fichier de configuration
802     <filename>pg_hba.conf</filename>.</para>
803
804    <para>
805 <ProgramListing>
806 FATAL:  Password authentication failed for user "andym"
807 </ProgramListing>
808     Les messages de ce type indiquent que vous avez contacté le serveur et
809     qu'il veut vous parler mais pas avant que vous n'ayez franchi la méthode
810     d'authentification spécifiée dans le fichier
811     <filename>pg_hba.conf</filename>.  Vérifiez le mot de passe que vous avez
812     fourni ou vérifiez votre logiciel d'identification ou votre logiciel Kerberos
813     si les plaintes mentionnent l'un de ces types d'authentification.</para>
814
815    <para>
816 <ProgramListing>
817 FATAL:  user "andym" does not exist
818 </ProgramListing>
819     Le nom d'utilisateur indiqué n'a pas été trouvé.  </para>
820
821    <para>
822 <ProgramListing>
823 FATAL:  database "testdb" does not exist
824 </ProgramListing>
825     La base de données à laquelle vous essayez de vous connecter n'existe pas.
826     Notez que si vous ne spécifiez pas un nom de base de données, le nom de la
827     base par défaut est le nom de l'utilisateur de la base de données, ce qui
828     peut être ou pas une bonne chose.</para>
829
830    <tip>
831     <para>Les traces du serveur contiennent plus d'informations sur une erreur
832      d'authentification que ce qui est rapporté au client. Si vous avez des
833      doutes sur les raisons d'un échec, vérifiez les traces.</para>
834    </tip>
835
836 </sect1>
837
838 </chapter>
839
Note: See TracBrowser for help on using the browser.