root/traduc/trunk/postgresql/client-auth.xml

Revision 988, 52.4 kB (checked in by sas, 7 months ago)

close #279
close #172

  • Property svn:keywords set to Date Author Revision
Line 
1 <?xml version="1.0" encoding="ISO-8859-15"?>
2 <!-- Dernière modification
3      le       $Date$
4      par      $Author$
5      révision $Revision$ -->
6 <!-- SAS : 20070320, PG8.2.3 -->
7
8 <chapter id="client-authentication">
9 <title>Authentification du client</title>
10
11  <indexterm zone="client-authentication">
12  <primary>authentification client</primary> </indexterm>
13
14  <para>Quand une application client se connecte au serveur de bases de données,
15   elle indique le nom de l'utilisateur de base de données
16   à utiliser pour la connexion, de la même façon qu'on se connecte à un ordinateur
17   Unix sous un nom d'utilisateur particulier. Au sein de l'environnement SQL, le
18   nom d'utilisateur de la base de données active détermine les droits
19   régissant l'accès aux objets de la base de données &mdash; voir le
20   <xref linkend="user-manag"/> pour plus d'informations. Ainsi, il est essentiel de
21   limiter le nombre de bases de données auxquelles les utilisateurs peuvent se
22   connecter.</para>
23
24  <note>
25   <para>
26    Comme expliqué dans le <xref linkend="user-manag"/>,
27    <productname>PostgreSQL</productname> gère les droits par l'intermédiaire
28    des <quote>rôles</quote>. Dans ce chapitre, le terme
29    <firstterm>utilisateur de bases de données</firstterm> est utilisé pour
30    signifier <quote>rôle disposant du droit <literal>LOGIN</literal></quote>.
31   </para>
32  </note>
33
34  <para>L'<firstterm>authentification</firstterm> est le processus par lequel le
35   serveur de bases de données établit l'identité du client et, par extension,
36   détermine si l'application client (ou l'utilisateur qui l'utilise) est
37   autorisée à se connecter avec le nom d'utilisateur de bases de données
38   indiqué.</para>
39
40  <para><productname>PostgreSQL</productname> offre quantité de méthodes
41   d'authentification différentes. La méthode utilisée pour authentifier une connexion
42   client particulière peut être sélectionnée d'après l'adresse (du client), la base de
43   données et l'utilisateur.</para>
44
45  <para>Les noms d'utilisateur de bases de données sont
46   séparés de façon logique des noms d'utilisateur du système d'exploitation sur
47   lequel tourne le serveur. Si tous les utilisateurs d'un serveur donné ont
48   aussi des comptes sur la machine serveur, il peut être pertinent d'attribuer
49   aux utilisateurs de bases de données des noms qui correspondent à ceux
50   des utilisateurs du système d'exploitation. Cependant, un serveur qui
51   accepte des connexions
52   distantes peut avoir des utilisateurs de bases de données dépourvus de
53   compte correspondant sur le système d'exploitation. Dans ce cas, aucune
54   correspondance entre les noms n'est nécessaire.</para>
55
56  <sect1 id="auth-pg-hba-conf"> <title>Le fichier <filename>pg_hba.conf</filename></title>
57
58   <indexterm zone="auth-pg-hba-conf"> <primary>pg_hba.conf</primary>
59 </indexterm>
60
61   <para>L'authentification du client est contrôlée par un fichier,
62    traditionnellement nommé <filename>pg_hba.conf</filename> et situé dans le
63    répertoire data du groupe de bases de données, par exemple
64    <filename>/usr/local/pgsql/data/pg_hba.conf</filename> (<acronym>HBA</acronym>
65    signifie <quote>host-based authentication</quote>&nbsp;: authentification
66    fondée sur l'hôte.) Un
67    fichier <filename>pg_hba.conf</filename> par défaut est installé lorsque le
68    répertoire data est initialisé par <command>initdb</command>. Néanmoins, il
69    est possible de placer le fichier de configuration de l'authentification
70    ailleurs&nbsp;; voir le paramètre de configuration <xref linkend="guc-hba-file"/>.
71   </para>
72
73   <para>
74    Le format général du fichier <filename>pg_hba.conf</filename> est un
75    ensemble d'enregistrements, un par ligne. Les lignes vides sont ignorées tout
76    comme n'importe quel texte placé après le caractère de commentaire
77    <literal>#</literal>. Un enregistrement est constitué d'un certain nombre de
78    champs séparés par des espace et/ou des tabulations. Les champs peuvent contenir
79    des espaces si la valeur du champ est mise entre guillemets. Un enregistrement
80    ne peut pas s'étendre sur plusieurs lignes.</para>
81
82   <para>
83    Chaque enregistrement précise un type de connexion, une plage
84    d'adresses IP (si approprié au type de connexion), un nom de base de données, un
85    nom d'utilisateur et la méthode d'authentification à utiliser pour les
86    connexions correspondant à ces paramètres. Le premier enregistrement
87    qui correspond au type de connexion, à l'adresse client, à la base de données
88    demandée et au nom d'utilisateur est utilisé pour effectuer l'authentification.
89    Il n'y a pas de suite après une erreur (<quote>fall-through</quote> ou
90    <quote>backup</quote>)&nbsp;: si un enregistrement est choisi et que l'authentification
91    échoue, les enregistrements suivants ne sont pas considérés. Si aucun
92    enregistrement ne correspond, l'accès est refusé.</para>
93
94   <para>Un enregistrement peut avoir l'un des sept formats suivants.
95 <synopsis>local      <replaceable>database</replaceable>  <replaceable>user</replaceable>  <replaceable>auth-method</replaceable>  <optional><replaceable>auth-option</replaceable></optional>
96 host       <replaceable>database</replaceable>  <replaceable>user</replaceable>  <replaceable>CIDR-address</replaceable>  <replaceable>auth-method</replaceable>  <optional><replaceable>auth-option</replaceable></optional>
97 hostssl    <replaceable>database</replaceable>  <replaceable>user</replaceable>  <replaceable>CIDR-address</replaceable>  <replaceable>auth-method</replaceable>  <optional><replaceable>auth-option</replaceable></optional>
98 hostnossl  <replaceable>database</replaceable>  <replaceable>user</replaceable>  <replaceable>CIDR-address</replaceable>  <replaceable>auth-method</replaceable>  <optional><replaceable>auth-option</replaceable></optional>
99 host       <replaceable>database</replaceable>  <replaceable>user</replaceable>  <replaceable>IP-address</replaceable>  <replaceable>IP-mask</replaceable>  <replaceable>auth-method</replaceable>  <optional><replaceable>auth-option</replaceable></optional>
100 hostssl    <replaceable>database</replaceable>  <replaceable>user</replaceable>  <replaceable>IP-address</replaceable>  <replaceable>IP-mask</replaceable>  <replaceable>auth-method</replaceable>  <optional><replaceable>auth-option</replaceable></optional>
101 hostnossl  <replaceable>database</replaceable>  <replaceable>user</replaceable>  <replaceable>IP-address</replaceable>  <replaceable>IP-mask</replaceable>  <replaceable>auth-method</replaceable>  <optional><replaceable>auth-option</replaceable></optional></synopsis>
102
103
104    La signification des champs est la suivante&nbsp;:
105
106    <variablelist>
107     <varlistentry> <term><literal>local</literal></term>
108      <listitem><para>Cet enregistrement intercepte les tentatives de connexion
109      qui utilise les sockets du domaine Unix. Sans enregistrement de ce type, les
110      connexions de sockets du domaine Unix ne sont pas autorisées.</para>
111      </listitem></varlistentry>
112
113     <varlistentry>
114      <term><literal>host</literal></term>
115      <listitem>
116       <para>
117        Cet enregistrement intercepte les tentatives de connexion par TCP/IP.
118        Les lignes <literal>host</literal> s'appliquent à toute tentative de
119        connexion, <acronym>SSL</acronym> ou non.
120       </para>
121
122       <note>
123        <para>
124         Les connexions TCP/IP ne sont pas autorisées si le serveur
125         n'est pas démarré avec la valeur appropriée du paramètre de configuration
126         <xref linkend="guc-listen-addresses"/>. En effet, par défaut, le
127         serveur n'écoute que les connexions TCP/IP en provenance de
128         l'adresse <literal>loopback</literal> locale, <literal>localhost</literal>.
129        </para>
130       </note>
131      </listitem>
132     </varlistentry>
133
134     <varlistentry>
135      <term><literal>hostssl</literal></term>
136      <listitem>
137       <para>
138        Cet enregistrement intercepte les seules tentatives de connexions par TCP/IP
139        qui utilisent le chiffrement <acronym>SSL</acronym>.
140       </para>
141
142       <para>
143        Pour utiliser cette fonction, le serveur
144        doit être compilé avec le support de <acronym>SSL</acronym>. De plus,
145        <acronym>SSL</acronym> doit être activé au démarrage du serveur en
146        positionnant le paramètre de configuration <xref linkend="guc-ssl"/>
147        (voir la <xref linkend="ssl-tcp"/> pour plus d'informations).
148       </para>
149      </listitem>
150     </varlistentry>
151
152     <varlistentry>
153      <term><literal>hostnossl</literal></term>
154      <listitem>
155       <para>
156        Cet enregistrement a une logique opposée à <literal>hostssl</literal>&nbsp;: il
157        n'intercepte que les tentatives de connexion qui n'utilisent pas
158        <acronym>SSL</acronym>.
159       </para>
160      </listitem>
161     </varlistentry>
162
163     <varlistentry>
164      <term><replaceable>database</replaceable></term>
165      <listitem>
166       <para>
167        Indique les noms des bases de données concernées par l'enregistrement. La
168        valeur <literal>all</literal> indique qu'il concerne toutes les bases
169        de données.
170        Le terme <literal>sameuser</literal> indique que l'enregistrement
171        coïncide si la base de données demandée a le même nom que l'utilisateur
172        demandé.
173        Le terme <literal>samerole</literal> indique que l'utilisateur demandé doit
174        être membre du rôle portant le même nom que la base de données demandée
175        (<literal>samegroup</literal> est obsolète bien qu'il soit toujours accepté
176        comme écriture alternative de <literal>samerole</literal>.). Dans
177        tous les autres cas,
178        c'est le nom d'une base de données particulière. Plusieurs noms de base de
179        données peuvent être fournis en les séparant par des virgules. Un fichier contenant
180        des noms de base de données peut être indiqué en faisant précéder le
181        nom du fichier de <literal>@</literal>.
182       </para>
183      </listitem>
184     </varlistentry>
185
186     <varlistentry>
187      <term><replaceable>user</replaceable></term>
188      <listitem>
189       <para>
190        Indique les utilisateurs de bases de données auxquels cet enregistrement
191        correspond. La valeur <literal>all</literal> indique qu'il concerne tous
192        les utilisateurs. Dans le cas contraire, il s'agit soit du nom d'un utilisateur
193        spécifique de bases de données ou d'un nom de groupe précédé par un
194        <literal>+</literal> (il n'existe pas de véritable distinction
195        entre les utilisateurs et les groupes dans
196        <productname>PostgreSQL</productname>&nbsp;; un <literal>+</literal>
197        signifie exactement
198        <quote>établit une correspondance pour tous les rôles faisant parti
199        directement ou indirectement de ce rôle</quote> alors qu'un nom sans
200        <literal>+</literal> établit une correspondance avec ce rôle spécifique).
201        Plusieurs noms d'utilisateurs peuvent être fournis en les séparant
202        par des virgules. Un fichier contenant des noms d'utilisateurs peut
203        être indiqué en faisant précéder le nom du fichier de <literal>@</literal>.
204       </para>
205      </listitem>
206     </varlistentry>
207
208     <varlistentry>
209      <term><replaceable>CIDR-address</replaceable></term>
210      <listitem>
211       <para>
212       Indique la plage d'adresses IP client à laquelle correspond cet
213       enregistrement. Il contient une adresse IP dans la notation décimale
214       standard et une longueur de masque CIDR (les adresses IP
215       ne peuvent qu'être indiquées numériquement, pas en tant que
216       nom d'hôte ou de domaine). La longueur du masque indique le nombre de
217       bits forts pour lesquels une correspondance doit être trouvée avec l'adresse
218       IP du client. Les bits de droite doivent valoir zéro dans l'adresse IP
219       indiquée. Il ne doit y avoir aucune espace entre l'adresse IP, le
220       <literal>/</literal> et la longueur du masque CIDR.
221       </para>
222
223       <para>
224       Une adresse CIDR (<replaceable>CIDR-address</replaceable>) est typiquement
225       <literal>172.20.143.89/32</literal> pour un hôte seul,
226       <literal>172.20.143.0/24</literal> pour un petit réseau ou
227       <literal>10.6.0.0/16</literal> pour un réseau plus grand. Pour
228       n'indiquer qu'un seul hôte, on utilise un masque de 32 pour IPv4 ou 128 pour
229       IPv6. Dans une adresse réseau, ne pas oublier les zéros finaux.
230       </para>
231
232       <para>
233        Une adresse IP indiquée au format IPv4 coïncide avec les connexions IPv6
234        d'adresse correspondante. Par exemple, <literal>127.0.0.1</literal> correspond
235        à l'adresse IPv6 <literal>::ffff:127.0.0.1</literal>. Une entrée donnée au
236        format IPv6 correspond uniquement aux connexions IPv6 même si l'adresse
237        représentée est dans le domaine IPv4-vers-IPv6. Les adresses au
238        format IPv6 sont rejetées si la bibliothèque système C ne supporte pas
239        les adresses IPv6.
240       </para>
241
242       <para>Ce champ ne concerne que les enregistrements
243        <literal>host</literal>, <literal>hostssl</literal> et
244        <literal>hostnossl</literal>.
245       </para>
246      </listitem>
247     </varlistentry>
248
249     <varlistentry>
250      <term><replaceable>IP-address</replaceable></term>
251      <term><replaceable>IP-mask</replaceable></term>
252      <listitem>
253       <para>
254        Ces champs peuvent être utilisés comme alternative à la notation
255        <replaceable>CIDR-address</replaceable>. Au lieu de spécifier la longueur
256        du masque, le masque réel est indiquée dans une colonne distincte. Par
257        exemple, <literal>255.0.0.0</literal> représente une longueur de masque CIDR
258        IPv4 de 8, et <literal>255.255.255.255</literal> représente une longueur de
259        masque de 32.
260       </para>
261
262       <para>Ces champ ne concernent que les enregistrements
263       <literal>host</literal>, <literal>hostssl</literal> et
264       <literal>hostnossl</literal>.
265     </para>
266     </listitem>
267     </varlistentry> 
268
269     <varlistentry> <term><replaceable>auth-method</replaceable></term>
270     <listitem>
271      <para>
272       Indique la méthode d'authentification à utiliser lors d'une
273       connexion via cet enregistrement. Les choix possibles sont résumés ici&nbsp;; les
274       détails se trouvent dans la <xref linkend="auth-methods"/>.
275
276        <variablelist>
277         <varlistentry>
278          <term><literal>trust</literal></term>
279           <listitem>
280            <para>
281             Autorise la connexion sans condition. Cette méthode permet à
282             quiconque peut se connecter au serveur de bases de données
283             de s'enregistrer sous n'importe quel utilisateur
284             <productname>PostgreSQL</productname> de son choix sans
285             mot de passe. Voir la <xref linkend="auth-trust"/> pour les détails.
286            </para>
287           </listitem>
288          </varlistentry>
289
290        <varlistentry>
291         <term><literal>reject</literal></term>
292          <listitem>
293           <para>
294            Rejette la connexion sans condition. Ce cas est utile
295            pour <quote>filtrer</quote> certains hôtes d'un groupe.
296           </para>
297          </listitem>
298         </varlistentry>
299
300        <varlistentry>
301        <term><literal>md5</literal></term>
302        <listitem>
303        <para>
304        Demande au client de fournir un mot de passe chiffré MD5 pour
305        l'authentification. Voir la <xref linkend="auth-password"/> pour
306        les détails.
307        </para>
308        </listitem>
309        </varlistentry>
310
311        <varlistentry>
312         <term><literal>crypt</literal></term>
313         <listitem>
314          <note>
315          <para>
316           Cette option est uniquement recommandée pour communiquer avec
317           les clients de version antérieure à la 7.2.
318          </para>
319          </note>
320          <para>
321           Requiert que le client fournisse un mot de passe chiffré avec
322           <function>crypt()</function> pour l'authentification. <literal>md5</literal>
323           est maintenant recommandé à la place de <literal>crypt</literal>. Voir
324           la <xref linkend="auth-password"/> pour les détails.
325          </para>
326         </listitem>
327        </varlistentry>
328
329        <varlistentry>
330         <term><literal>password</literal></term>
331         <listitem>
332          <para>
333           Requiert que le client fournisse un mot de passe non chiffré pour
334           l'authentification. Comme le mot de passe est envoyé en clair sur
335           le réseau, ceci ne doit pas être utilisé sur des réseaux non
336           dignes de confiance. De plus, cette option ne fonctionne pas avec
337           les applications client qui utilisent les threads. Voir la
338           <xref linkend="auth-password"/> pour les détails.
339          </para>
340         </listitem>
341        </varlistentry>
342
343        <varlistentry>
344         <term><literal>gss</literal></term>
345         <listitem>
346          <para>
347           Utilise GSSAPI pour authentifier l'utilisateur. Disponible uniquement
348           pour les connexions TCP/IP. Voir <xref
349           linkend="gssapi-auth"/> pour les détails.
350          </para>
351         </listitem>
352        </varlistentry>
353
354        <varlistentry>
355         <term><literal>sspi</literal></term>
356         <listitem>
357          <para>
358           Utilise SSPI pour authentifier l'utilisateur. Disponible uniquement
359           sur Windows. Voir <xref
360           linkend="sspi-auth"/> pour plus de détails.
361          </para>
362         </listitem>
363        </varlistentry>
364
365        <varlistentry>
366         <term><literal>krb5</literal></term>
367         <listitem>
368          <para>
369           Utilise Kerberos V5 pour authentifier l'utilisateur. Ceci n'est
370           disponible que pour les connexions TCP/IP. Voir la
371           <xref linkend="kerberos-auth"/> pour les détails.
372          </para>
373         </listitem>
374        </varlistentry>
375
376        <varlistentry>
377         <term><literal>ident</literal></term>
378         <listitem>
379          <para>
380           Récupère le nom de l'utilisateur du système d'exploitation du client
381           (pour les connexions TCP/IP en contactant le serveur d'identification
382           sur le client, pour les connexions locales en l'obtenant du système
383           d'exploitation) et vérifie si l'utilisateur est autorisé à se
384           connecter avec l'utilisateur de base de données indiqué en
385           consultant la correspondance indiquée après le mot clé
386           <literal>ident</literal>. Voir la <xref linkend="auth-ident"/>
387           ci-dessous pour les détails.
388          </para>
389         </listitem>
390        </varlistentry>
391
392        <varlistentry>
393         <term><literal>ldap</literal></term>
394         <listitem>
395          <para>
396           Authentification par LDAP sur serveur central. Voir la
397           <xref linkend="auth-ldap"/> pour les détails.
398          </para>
399         </listitem>
400        </varlistentry>
401
402        <varlistentry>
403         <term><literal>pam</literal></term>
404         <listitem>
405          <para>
406           Authentification par les Pluggable Authentification Modules (PAM)
407           fournis par le système d'exploitation. Voir la <xref linkend="auth-pam"/>
408           pour les détails.
409          </para>
410         </listitem>
411        </varlistentry>
412       </variablelist>
413      </para>
414     </listitem>
415    </varlistentry>
416
417    <varlistentry>
418     <term><replaceable>auth-option</replaceable></term>
419      <listitem>
420       <para>
421        La signification de ce champ optionnel dépend de la méthode
422        d'authentification choisie. Les détails sont disponibles ci-dessous.
423       </para>
424      </listitem>
425     </varlistentry>
426    </variablelist>
427   </para>
428
429   <para>
430    Les fichiers inclus par les constructions <literal>@</literal> sont lus comme des
431    listes de noms, séparés soit par des espaces soit par
432    des virgules. Les commentaires sont introduits par le caractère
433    <literal>#</literal> comme dans <filename>pg_hba.conf</filename>, et les
434    constructions <literal>@</literal> imbriquées sont autorisées. À moins
435    que le nom du fichier qui suit <literal>@</literal> ne soit un chemin absolu,
436    il est supposé relatif au répertoire contenant le fichier le référençant.
437   </para>
438
439   <para>
440    Les enregistrements du fichier <filename>pg_hba.conf</filename> sont
441    examinés séquentiellement à chaque tentative de connexion, l'ordre des
442    enregistrements est donc significatif. Généralement, les premiers enregistrements
443    ont des paramètres d'interception de connexions stricts et des méthodes
444    d'authentification peu restrictives tandis que les
445    enregistrements suivants ont des paramètres plus larges et des méthodes
446    d'authentification plus fortes. Par exemple, on peut souhaiter utiliser
447    l'authentification <literal>trust</literal> pour les connexions TCP/IP locales mais
448    demander un mot de passe pour les connexion TCP/IP distantes. Dans ce cas,
449    l'enregistrement précisant une authentification <literal>trust</literal> pour les
450    connexions issues de 127.0.0.1 apparaît avant un enregistrement indiquant
451    une authentification par mot de passe pour une plage plus étendue d'adresses IP
452    client autorisées.
453   </para>
454
455   <para>
456    Le fichier <filename>pg_hba.conf</filename> est lu au démarrage et
457    lorsque le processus serveur principal reçoit un signal
458    <systemitem>SIGHUP</systemitem><indexterm><primary>SIGHUP</primary></indexterm>.
459    Si le fichier est édité sur un système actif, on peut signaler au
460    serveur (en utilisant <literal>pg_ctl reload</literal> ou
461    <literal>kill -HUP</literal>) de relire le fichier.
462   </para>
463
464   <tip>
465    <para>
466     Pour se connecter à une base particulière, un utilisateur doit non
467     seulement passer les vérifications de <filename>pg_hba.conf</filename> mais doit
468     également avoir le droit <literal>CONNECT</literal> sur cette base. Pour
469     contrôler qui peut se connecter à quelles bases, il est en général plus
470     facile de le faire en donnant ou retirant le privilège
471     <literal>CONNECT</literal> plutôt qu'en
472     plaçant des règles dans le fichier <filename>pg_hba.conf</filename>.
473    </para>
474   </tip>
475
476   <para>
477    Quelques exemples d'entrées de <filename>pg_hba.conf</filename> sont
478    donnés ci-dessous dans l'<xref linkend="example-pg-hba.conf"/>. Voir la
479    section suivante pour les détails des méthodes d'authentification.  </para>
480
481    <example id="example-pg-hba.conf">
482    <title>Exemple d'entrées de <filename>pg_hba.conf</filename></title>
483 <programlisting># Permettre à n'importe quel utilisateur du système local de se connecter
484 # à la base de données sous n'importe quel nom d'utilisateur au travers
485 # des sockets de domaine Unix (par défaut pour les connexions locales).
486 #
487 # TYPE  DATABASE    USER        CIDR-ADDRESS        METHOD
488 local   all         all                             trust
489
490 # La même chose en utilisant les connexions TCP/IP locales loopback.
491 #
492 # TYPE  DATABASE    USER        CIDR-ADDRESS        METHOD
493 host    all         all         127.0.0.1/32        trust
494
495 # Pareil mais en utilisant une colonne netmask distincte.
496 #
497 # TYPE  DATABASE    USER        IP-ADDRESS          IP-mask              METHOD
498 host    all         all         127.0.0.1           255.255.255.255      trust
499
500 # Permettre à n'importe quel utilisateur de n'importe quel hôte d'adresse IP
501 # 192.168.93.x de se connecter à la base de données "postgres" sous le nom
502 # d'utilisateur qu'ident signale à la connexion (généralement le
503 # nom utilisateur Unix).
504 #
505 # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
506 host    postgres    all         192.168.93.0/24       ident sameuser
507
508 # Permet à un utilisateur de l'hôte 192.168.12.10 de se connecter à la base de
509 # données "postgres" si le mot de passe de l'utilisateur est correctement fourni.
510 #
511 # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
512 host    postgres    all         192.168.12.10/32      md5
513
514 # Si aucune ligne "host" ne précède, ces deux lignes rejettent toutes
515 # les connexions en provenance de 192.168.54.1 (puisque cette entrée déclenche
516 # en premier), mais autorisent les connexions Kerberos 5 de n'importe où
517 # ailleurs sur l'Internet. Le masque zéro signifie qu'aucun bit de l'ip de
518 # l'hôte n'est considéré, de sorte à correspondre à tous les hôtes.
519 #
520 # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
521 host    all         all         192.168.54.1/32       reject
522 host    all         all         0.0.0.0/0             krb5
523
524 # Permettre à tous les utilisateurs de se connecter depuis 192.168.x.x à n'importe
525 # quelle base de données s'ils passent la verification d'identification. Si,
526 # par exemple, ident indique que l'utilisateur est "bryanh" et qu'il
527 # demande à se connecter en tant qu'utilisateur PostgreSQL "guest1", la
528 # connexion n'est permise que s'il existe une entrée dans pg_ident.conf pour la
529 # correspondance "omicron" disant que "bryanh" est autorisé à se connecter en
530 # tant que "guest1".
531 #
532 # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
533 host    all         all         192.168.0.0/16        ident omicron
534
535 # Si ces trois lignes traitent seules les connexions locales, elles
536 # n'autorisent les utilisateurs locaux qu'à se connecter à leur propre
537 # base de données (base ayant le même nom que leur nom
538 # d'utilisateur) exception faite des administrateurs
539 # et des membres du rôle "support" qui peuvent se connecter à toutes les bases
540 # de données. Le fichier $PGDATA/admins contient une liste de noms
541 # d'administrateurs. Un mot de passe est requis dans tous les cas.
542 #
543 # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
544 local   sameuser    all                               md5
545 local   all         @admins                           md5
546 local   all         +support                          md5
547
548 # Les deux dernières lignes ci-dessus peuvent être combinées en une seule ligne :
549 local   all         @admins,+support                  md5
550
551 # La colonne database peut aussi utiliser des listes et des noms de fichiers :
552 local   db1,db2,@demodbs  all                         md5</programlisting> </example> </sect1>
553
554  <sect1 id="auth-methods">
555  <title>Méthodes d'authentification</title>
556  <para>
557   Les sous-sections suivantes décrivent les méthodes d'authentification en détail.
558  </para>
559
560   <sect2 id="auth-trust">
561   <title>Authentification trust</title>
562
563    <para>
564     Quand l'authentification <literal>trust</literal> est utilisée,
565     <productname>PostgreSQL</productname> considère que quiconque peut se
566     connecter au serveur est autorisé à accéder à la base de données quel que
567     soit le nom d'utilisateur de bases de données qu'il fournit (ce qui
568     inclut les super-utilisateurs). Les restrictions apportées dans les
569     colonnes <literal>database</literal> et <literal>user</literal>
570     continuent évidemment de s'appliquer. Cette méthode ne doit être utilisée
571     que si le système assure un contrôle adéquat des connexions au serveur.
572    </para>
573
574    <para>
575     L'authentification <literal>trust</literal> est appropriée et très pratique
576     pour les connexions locales sur une station de travail mono-utilisateur. Elle
577     n'est généralement <emphasis>pas</emphasis> appropriée en soi sur une machine
578     multi-utilisateur. Cependant, <literal>trust</literal> peut tout de même
579     être utilisé sur une machine multi-utilisateur, si l'accès au fichier
580     socket de domaine Unix est restreint par les permissions du système de
581     fichiers. Pour ce faire, on peut positionner les paramètres de configuration
582     <varname>unix_socket_permissions</varname> (et au besoin
583     <varname>unix_socket_group</varname>) comme cela est décrit dans la
584     <xref linkend="runtime-config-connection"/>.
585     On peut également positionner le paramètre de configuration
586     <varname>unix_socket_directory</varname> pour placer le fichier de socket
587     dans un répertoire à l'accès convenablement restreint.
588    </para>
589
590    <para>
591     Le réglage des droits du système de fichiers n'a d'intérêt que le cas de
592     connexions par les sockets Unix. Cela ne restreint pas les connexions
593     TCP/IP locales&nbsp;; ainsi, pour utiliser les droits du système de
594     fichiers pour assurer la sécurité locale, il faut supprimer la ligne
595     <literal>host ...127.0.0.1 ...</literal> de
596     <filename>pg_hba.conf</filename> ou la modifier pour utiliser une méthode
597     d'authentification différente de <literal>trust</literal>.
598    </para>
599
600    <para>
601     L'authentification <literal>trust</literal> n'est envisageable, pour les
602     connexions TCP/IP, que si chaque utilisateur de chaque machine autorisée
603     à se connecter au serveur par les lignes <literal>trust</literal> du
604     fichier <filename>pg_hba.conf</filename> est digne de confiance. Il est
605     rarement raisonnable d'utiliser <literal>trust</literal> pour les
606     connexions autres que celles issues de
607     <systemitem>localhost</systemitem> (127.0.0.1).
608    </para>
609
610   </sect2>
611
612   <sect2 id="auth-password"> <title>Authentification par mot de passe</title>
613
614    <indexterm>
615     <primary>MD5</primary>
616    </indexterm>
617
618    <indexterm>
619      <primary>crypt</primary>
620    </indexterm>
621    <indexterm>
622      <primary>password</primary>
623      <secondary>authentification</secondary>
624    </indexterm>
625    <indexterm>
626     <primary>mot de passe</primary>
627     <secondary>authentification</secondary>
628    </indexterm>
629
630    <para>
631     Les méthodes fondées sur une authentification par mot de passe sont
632     <literal>md5</literal>, <literal>crypt</literal> et
633     <literal>password</literal>. Ces méthodes
634     fonctionnent de façon analogue à l'exception du mode d'envoi du mot de passe
635     à travers la connexion&nbsp;: respectivement, hachage MD5, chiffrement via
636     crypt et texte en clair. Une limitation de la méthode <literal>crypt</literal> est
637     qu'elle ne fonctionne pas avec les mots de passe chiffrés dans
638     <structname>pg_authid</structname>.
639    </para>
640
641    <para>
642     S'il existe un risque d'attaque par <quote>interception (sniffing)</quote>
643     des mots de passe, il est préférable d'utiliser <literal>md5</literal>,
644     <literal>crypt</literal> devant être limité aux client pré-7.2.
645     L'utilisation de <literal>password</literal>, en clair, est tout
646     particulièrement à éviter lors de connexions ouvertes sur l'Internet
647     (à moins d'utiliser <acronym>SSL</acronym>, <acronym>SSH</acronym> ou
648     tout autre système de sécurisation par encapsulation de la connexion).
649    </para>
650
651    <para>
652     Les mots de passe <productname>PostgreSQL</productname>
653     sont distincts des mots de passe du système d'exploitation. Le mot de passe
654     de chaque utilisateur est enregistré dans le catalogue système
655     <literal>pg_authid</literal>. Ils peuvent être gérés avec les
656     commandes SQL <xref linkend="sql-createuser" endterm="sql-createuser-title"/>
657     et <xref linkend="sql-alteruser" endterm="sql-alteruser-title"/>. Ainsi, par
658     exemple, <userinput>CREATE USER foo WITH PASSWORD 'secret';</userinput>. Par
659     défaut, c'est à dire si aucun mot de passe n'est indiqué, le mot de passe enregistré
660     est nul et l'authentification par mot de passe échoue systématiquement pour
661     cet utilisateur.
662    </para>
663
664   </sect2>
665
666   <sect2 id="gssapi-auth">
667    <title>Authentification GSSAPI</title>
668
669    <indexterm zone="gssapi-auth">
670     <primary>GSSAPI</primary>
671    </indexterm>
672
673    <para>
674     <productname>GSSAPI</productname> est un protocole du standard de
675     l'industrie pour l'authentification sécurisée définie dans RFC 2743.
676     <productname>PostgreSQL</productname> supporte
677     <productname>GSSAPI</productname> avec l'authentification
678     <productname>Kerberos</productname> suivant la RFC 1964.
679     <productname>GSSAPI</productname> fournit une authentification
680     automatique (<foreignphrase>single sign-on</foreignphrase>) pour les
681     systèmes qui le supportent. L'authentification elle-même est sécurisée
682     mais les données envoyées sur la connexion seront en clair sauf si
683     <acronym>SSL</acronym> est utilisé.
684    </para>
685
686    <para>
687     Quand <productname>GSSAPI</productname> passe par
688     <productname>Kerberos</productname>, il utilise un principal standard
689     dans le format
690         <literal><replaceable>nomservice</replaceable>/<replaceable>nomhôte</replaceable>@<replaceable>domaine</replaceable></literal>.
691     Pour des informations sur les parties du principal et sur la façon de
692     configurer les clés requises, voir <xref linkend="kerberos-auth"/>. Le
693     support de GSSAPI doit être activé lors de la construction de
694     <productname>PostgreSQL</productname>&nbsp;; voir
695     <xref linkend="installation"/> pour plus d'informations.
696    </para>
697    
698   </sect2>
699
700   <sect2 id="sspi-auth">
701    <title>Authentification SSPI</title>
702
703    <indexterm zone="sspi-auth">
704     <primary>SSPI</primary>
705    </indexterm>
706
707    <para>
708     <productname>SSPI</productname> est une technologie
709     <productname>Windows</productname> pour l'authentification sécurisée avec
710     <foreignphrase>single sign-on</foreignphrase>.
711     <productname>PostgreSQL</productname> utilise SSPI dans un mode de
712     négociation (<literal>negotiate</literal>) qui utilise
713     <productname>Kerberos</productname> si possible et
714     <productname>NTLM</productname> sinon. L'authentification
715     <productname>SSPI</productname> ne fonctionne que loresque serveur et
716     client utilisent <productname>Windows</productname>.
717    </para>
718
719    <para>
720     Lorsque <productname>Kerberos</productname> est utilisé,
721     <productname>SSPI</productname> fonctionne de la même façon que
722     <productname>GSSAPI</productname>.
723     Voir <xref linkend="gssapi-auth"/> pour les détails.
724    </para>
725
726   </sect2>
727
728   <sect2 id="kerberos-auth"> <title>Authentification Kerberos</title>
729
730    <indexterm zone="kerberos-auth"> <primary>Kerberos</primary> </indexterm>
731
732    <note>
733     <para>
734      L'authentification Kerberos native est obsolète et ne doit être
735      utilisée que pour assurer la compatibilité ascendante.
736      Les nouvelles installations et les mises à jour utiliseront
737      préférentiellement le standard d'authentification
738      de l'industrie, <productname>GSSAPI</productname> (voir <xref
739      linkend="gssapi-auth"/>).
740     </para>
741    </note>
742
743    <para>
744     <productname>Kerberos</productname> est un système d'authentification
745     sécurisée de standard industriel destiné à l'informatique distribuée sur un
746     réseau public. La description de <productname>Kerberos</productname>
747     dépasse largement les objectifs de ce document&nbsp; même dans les
748     généralités, c'est assez complexe (bien que puissant). La
749     <ulink url="http://www.nrl.navy.mil/CCS/people/kenh/kerberos-faq.html">
750     <acronym>FAQ</acronym> Kerberos</ulink> ou la
751     <ulink url="http://web.mit.edu/kerberos/www/">page Kerberos du
752     MIT</ulink> sont un bon point de départ à l'exploration. Il existe plusieurs
753     sources de distribution <productname>Kerberos</productname>.
754     <productname>Kerberos</productname> fournit une authentification sécurisée
755     mais ne chiffre pas les requêtes ou les données passées sur le réseau&nbsp;;
756     pour cela, <acronym>SSL</acronym> doit être utilisé.
757    </para>
758
759    <para>
760     <productname>PostgreSQL</productname> supporte Kerberos version 5. Le
761     support de Kerberos doit être activé lors de la construction de
762     <productname>PostgreSQL</productname>&nbsp;; voir le
763     <xref linkend="installation"/> pour plus d'informations.
764    </para>
765
766    <para>
767     <productname>PostgreSQL</productname> opère comme un service Kerberos normal.
768     Le nom du service principal est
769     <literal><replaceable>nomservice</replaceable>/<replaceable>nomhôte</replaceable>@<replaceable>domaine</replaceable></literal>.
770    </para>
771
772    <para>
773     <replaceable>nomservice</replaceable> peut être configuré du côté serveur en utilisant
774     le paramètre de configuration <xref linkend="guc-krb-srvname"/> (voir
775     aussi <xref linkend="libpq-connect"/>). La valeur par défaut à
776     l'installation, <literal>postgres</literal>, peut être modifiée lors
777     de la construction avec
778     <literal>./configure --with-krb-srvnam=quelquechose</literal>. Dans la
779     plupart des environnements, il est inutile de modifier cette valeur.
780     Néanmoins, pour supporter
781     plusieurs installations de <productname>PostgreSQL</productname> sur le même hôte,
782     cela devient nécessaire. Quelques implantations de Kerberos peuvent
783     imposer un nom de service différent, comme Microsoft Active
784     Directory qui réclame un nom du service en majuscules
785     (<literal>POSTGRES</literal>).
786    </para>
787
788    <para>
789     <replaceable>nom_hote</replaceable> est le nom de l'hôte pleinement
790     qualifié (<foreignphrase>fully qualified host name</foreignphrase>)
791     de la machine serveur. Le domaine du service principal (client)
792     est le domaine préféré du serveur.
793    </para>
794
795    <para>
796     Les principaux (clients) doivent contenir le nom de leur utilisateur
797     <productname>PostgreSQL</productname> comme premier composant,
798     <literal>nomutilisateurpg@domaine</literal>, par exemple.
799     Par défaut, le domaine du client n'est pas vérifié par
800     <productname>PostgreSQL</productname>. Si l'authentification inter-domaine
801     (<foreignphrase>cross-realm</foreignphrase>) est activée, on utilise le
802     paramètre <xref linkend="guc-krb-realm"/>.
803    </para>
804
805    <para>
806     Le fichier de clés du serveur doit être lisible (et de préférence
807     uniquement lisible) par le compte serveur
808     <productname>PostgreSQL</productname> (voir aussi la
809     <xref linkend="postgres-user"/>). L'emplacement du fichier de clés est
810     indiqué grâce au paramètre de configuration
811     <xref linkend="guc-krb-server-keyfile"/> fourni à l'exécution. La valeur
812     par défaut est <filename>/etc/srvtab</filename>, si Kerberos 4 est
813     utilisé, et <filename>/usr/local/pgsql/etc/krb5.keytab</filename> sinon
814     (ou tout autre répertoire indiqué comme <varname>sysconfdir</varname> à
815     la compilation).
816    </para>
817
818    <para>
819     Le fichier de clés est engendré par le logiciel Kerberos&nbsp;; voir la
820     documentation de Kerberos pour les détails. L'exemple suivant correspond
821     à des implantations de Kerberos 5 compatibles avec MIT&nbsp;:
822 <screen><prompt>kadmin% </prompt><userinput>ank -randkey postgres/server.my.domain.org</userinput>
823 <prompt>kadmin% </prompt><userinput>ktadd -k krb5.keytab postgres/server.my.domain.org</userinput></screen>
824    </para>
825
826    <para>
827     Lors de la connexion à la base de données, il faut s'assurer de posséder
828     un ticket pour le principal correspondant au nom d'utilisateur de base
829     de données souhaité. Par exemple, pour le nom d'utilisateur
830     <literal>fred</literal>, les deux
831     principaux <literal>fred@EXAMPLE.COM</literal>
832     et <literal>fred/users.exemple.com@EXAMPLE.COM</literal> peuvent être utilisés
833     pour authentifier le serveur de bases de données.
834    </para>
835
836    <para>
837     Si <ulink url="http://modauthkerb.sf.net">mod_auth_kerb</ulink> et
838     <application>mod_perl</application> sont utilisés sur le serveur web
839     <productname>Apache</productname>,
840     <literal>AuthType KerberosV5SaveCredentials</literal> peut être utilisé
841     avec un script <application>mod_perl</application>. Cela fournit un accès
842     sûr aux bases de données, sans demander de mot de passe supplémentaire.
843    </para>
844
845   </sect2>
846
847   <sect2 id="auth-ident"> <title>Authentification fondée sur ident</title>
848
849    <indexterm> <primary>ident</primary> </indexterm>
850
851    <para>
852     La méthode d'authentification par ident fonctionne en obtenant les noms
853     des utilisateurs du système d'exploitation, puis en déterminant les noms
854     des utilisateurs de bases de données autorisés à l'aide d'un fichier
855     de correspondance qui liste les paires autorisées de concordance de
856     noms. La résolution du nom d'utilisateur du client est le point de sécurité
857     critique. Elle fonctionne différemment selon le type de connexion.
858    </para>
859
860    <sect3> <title>Authentification par ident en TCP/IP</title>
861
862    <para>
863     Le <quote>protocole d'identification</quote> est décrit dans la
864     RFC 1413. Théoriquement, chaque système
865     d'exploitation de type Unix contient un serveur ident
866     qui écoute par défaut sur le port TCP 113. La fonctionnalité basique
867     d'un serveur ident est de répondre aux questions telles que&nbsp;:
868     <quote>Quel utilisateur a initié la connexion qui sort du port
869     <replaceable>X</replaceable> et se connecte à mon port
870     <replaceable>Y</replaceable>?</quote>.
871     Puisque <productname>PostgreSQL</productname> connaît
872     <replaceable>X</replaceable> et <replaceable>Y</replaceable> dès lors
873     qu'une connexion physique est établie, il peut interroger le serveur
874     ident de l'hôte du client qui se connecte et peut ainsi théoriquement
875     déterminer l'utilisateur du système d'exploitation pour n'importe quelle
876     connexion.
877    </para>
878
879    <para>
880     Le revers de cette procédure est qu'elle dépend de l'intégrité du
881     client&nbsp;: si la machine cliente est douteuse ou compromise, un attaquant
882     peut lancer n'importe quel programme sur le port 113 et retourner un nom
883     d'utilisateur de son choix. Cette méthode d'authentification n'est, par
884     conséquent, appropriée que dans le cas de réseaux fermés dans lesquels
885     chaque machine cliente est soumise à un contrôle strict et dans lesquels
886     les administrateurs système et de bases de données opèrent en étroite
887     collaboration. En d'autres mots, il faut pouvoir faire confiance à la
888     machine hébergeant le serveur d'identification. Cet avertissement doit
889     être gardé à l'esprit&nbsp;:
890     <blockquote>
891      <attribution>RFC 1413</attribution>
892      <para>
893       Le protocole d'identification n'a pas vocation à être un protocole
894       d'autorisation ou de contrôle d'accès.
895      </para>
896     </blockquote>
897    </para>
898
899    <para>
900     Certains serveurs ident ont une option non standard qui chiffre le nom de
901     l'utilisateur retourné à l'aide d'une clé connue du seul administrateur
902     de la machine dont émane la connexion. Cette option <emphasis>ne
903     doit pas</emphasis> être employée lorsque le serveur ident est utilisé avec
904     <productname>PostgreSQL</productname> car <productname>PostgreSQL</productname>
905     n'a aucun moyen de déchiffré la chaîne renvoyée pour déterminer le nom réel
906     de l'utilisateur.
907    </para>
908
909 </sect3>
910
911    <sect3> <title>Authentification par ident sur sockets locaux</title>
912
913    <para>
914     Sur les systèmes qui supportent les requêtes <symbol>SO_PEERCRED</symbol>
915     pour les sockets de domaine Unix (actuellement
916     <systemitem class="osname">Linux</systemitem>,
917     <systemitem class="osname">FreeBSD</systemitem>,
918     <systemitem class="osname">NetBSD</systemitem>,
919     <systemitem class="osname">OpenBSD</systemitem> et
920     <systemitem class="osname">BSD/OS</systemitem>), l'authentification par
921     ident peut aussi être appliquée aux connexions locales. Dans ce cas,
922     l'utilisation de l'authentification par ident n'ajoute aucun risque de
923     sécurité&nbsp; en fait, c'est même un choix préférable sur ce genre de
924     système.
925    </para>
926
927     <para>
928      Sur les systèmes sans requête <symbol>SO_PEERCRED</symbol>, l'authentification
929      par ident n'est disponible que pour les connexions TCP/IP. Pour pallier
930      ceci, il est possible de préciser l'adresse
931      <systemitem class="systemname">localhost</systemitem>
932      <systemitem class="systemname">127.0.0.1</systemitem> et d'établir une
933      connexion à cette adresse. Si le serveur ident local est digne de
934      confiance, alors cette méthode l'est aussi.
935     </para>
936    </sect3>
937
938    <sect3 id="auth-ident-maps">
939     <title>Correspondances d'identité</title>
940
941    <para>
942     Lorsque l'authentification par ident est utilisée, après avoir déterminé
943     le nom de l'utilisateur du système d'exploitation qui a initié la
944     connexion, <productname>PostgreSQL</productname> vérifie si cet utilisateur
945     est autorisé à se connecter avec le nom d'utilisateur de bases de données
946     souhaité. Ceci est contrôlé par l'argument ident map qui suit le mot clé
947     <literal>ident</literal> dans le fichier <filename>pg_hba.conf</filename>.
948     Il existe une correspondance d'identité prédéfinie,
949     <literal>sameuser</literal>, qui permet à n'importe quel utilisateur du
950     système d'exploitation de se connecter en tant qu'utilisateur de même nom
951     au serveur de bases de données (si ce dernier existe). Les autres correspondances
952     doivent être créées manuellement.
953    </para>
954
955    <para>
956     Les correspondances d'identité autres que <literal>sameuser</literal>
957     sont définies dans le fichier de concordance, par défaut nommé
958     <filename>pg_ident.conf</filename>
959     <indexterm><primary>pg_ident.conf</primary></indexterm> et stocké
960     dans le répertoire data (il est possible de placer ce fichier
961     ailleurs&nbsp;; voir le paramètre de configuration
962     <xref linkend="guc-ident-file"/>). Ce fichier contient des lignes de
963     la forme&nbsp;:
964 <synopsis><replaceable>nom-correspondance</replaceable> <replaceable>nomutilisateur-ident</replaceable> <replaceable>base-donnee-utilisateur</replaceable></synopsis>
965     Les commentaires et les espaces sont gérés comme dans le
966     fichier <filename>pg_hba.conf</filename>. Le
967     <replaceable>nom-correspondance</replaceable> est un
968     nom arbitraire utilisé pour se référer à cette correspondance dans
969     <filename>pg_hba.conf</filename>. Les deux autres champs indiquent le
970     nom de l'utilisateur du système d'exploitation et le nom de
971     l'utilisateur de base avec lequel il
972     est autorisé à se connecter. Le même <replaceable>nom-correspondance</replaceable>
973     peut être répété pour indiquer plusieurs correspondances d'utilisateur au sein
974     d'une même table de correspondance. Il n'y a pas de restriction sur le nombre
975     d'utilisateurs de bases de données auxquels un utilisateur de système
976     d'exploitation donné peut correspondre et vice-versa.
977    </para>
978
979    <para>
980     Le fichier <filename>pg_ident.conf</filename> est lu au démarrage et
981     à chaque fois que le processus serveur principal reçoit un signal
982     <systemitem>SIGHUP</systemitem><indexterm><primary>SIGHUP</primary></indexterm>.<