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