| 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> : 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</>) : 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 : |
|---|
| 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 ; 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 ; 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 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</> ; 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) : <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 : 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 |
|
|---|