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