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

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