Documentation PostgreSQL 14.22 » Administration du serveur » Authentification du client » Authentification GSSAPI

Précédent | Niveau supérieur | Suivant
21.5. Authentification par mot de passe | Sommaire | 21.7. Authentification SSPI

## 21.6. Authentification GSSAPI

GSSAPI est un protocole du standard de l'industrie pour l'authentification sécurisée définie dans RFC 2743. PostgreSQL supporte GSSAPI pour l'authentification, le chiffrement des communications, ou les deux. GSSAPI fournit une authentification automatique (single sign-on) pour les systèmes qui le supportent. L'authentification elle-même est sécurisée. Si le chiffrement GSSAPI ou le chiffrement SSL est utilisé, les données envoyées au travers de la connexion à la base de données seront chiffrées, sinon elles ne le seront pas.

Le support de GSSAPI doit être activé quand PostgreSQL est compilé ; voir Chapitre 17 pour plus d'informations.

Quand GSSAPI passe par Kerberos, il utilise un principal service standard au format ``nom_service`/`nom_hôte`@`domaine``. Le nom utilisé pour le principal sur une installation particulière n'est pas encodé dans le serveur PostgreSQL ; il est en fait indiqué dans le fichier keytab que le serveur lit pour déterminer son identité. Si plusieurs principaux sont listés dans le fichier keytab, le serveur acceptera n'importe lequel parmi eux. Le nom de royaume du serveur est le royaume préféré indiqué dans le fichier de configuration Kerberos accessible au serveur.

Lors de la connexion, le client doit connaître le nom du principal du serveur où il souhaite se connecter. La partie `servicename` est habituellement `postgres`, mais une autre valeur peut être sélectionnée via le paramètre de connexion krbsrvname de libpq. La partie `hostname` est le nom d'hôte complètement qualifié auquel libpq se connecte. Le nom de royaume est le royaume préféré indiqué dans le fichier de configuration Kerberos accessible au client.

Le client aura aussi un nom de principal pour sa propre identité (et il doit avoir un ticket valide pour ce principal). Pour utiliser GSSAPI pour l'authentification, le principal du client doit être associé avec un nom d'utilisateur de base PostgreSQL. Le fichier de configuration `pg_ident.conf` peut être utilisé pour établir une correspondance entre les principaux et les noms d'utilisateurs. Par exemple, `pgusername@realm` pourrait correspondre à `pgusername`. De la même façon, vous pouvez utiliser le principal complet `username@realm` comme nom de rôle dans PostgreSQL sans aucune correspondance.

PostgreSQL supporte aussi la correspondance entre principaux de clients et noms d'utilisateur en supprimant le royaume du principal. Cette méthode est supportée pour des raisons de compatibilité ascendante et est fortement déconseillé car il est ensuite impossible de distinguer différents utilisateurs avec le même nom d'utilisateur mais un domaine différent. Pour l'activer, configurez `include_realm` à 0. Pour des installations simples à un seul royaume, le faire en combinant avec la configuration du paramètre `krb_realm` (qui vérifie que le royaume du principal correspond exactement à ce qui est dans le paramètre `krb_realm`) est toujours sécurisé mais cette approche offre moins de possibilités en comparaison à la spécification d'une correspondance explicite.

L'emplacement du fichier keytab du serveur est indiqué grâce au paramètre de configuration krb_server_keyfile. Pour des raisons de sécurité, il est recommandé d'utiliser un fichier de clés séparé pour PostgreSQL uniquement plutôt que d'autoriser le serveur à lire le fichier keytab du système. Assurez-vous que le fichier keytab du serveur est lisible (et de préférence seulement lisible, pas modifiable) par le compte serveur PostgreSQL (voir aussi Section 19.1).

Le fichier de clés est généré en utilisant le logiciel Kerberos ; voir la documentation de Kerberos pour plus de détails. L'exemple suivant montre comment le faire en utilisant l'outil kadmin des implémentations compatibles MIT de Kerberos 5 :

    kadmin% addprinc -randkey postgres/server.my.domain.org
    kadmin% ktadd -k krb5.keytab postgres/server.my.domain.org

Les options d'authentification suivantes sont supportées pour la méthode d'authentification GSSAPI :

`include_realm`

  Si configuré à 0, le nom du royaume provenant du principal de l'utilisateur authentifié est supprimé avant d'être passé à la correspondance du nom d'utilisateur (Section 21.2). Ceci n'est pas conseillé mais reste disponible principalement pour des raisons de compatibilité ascendante car ce n'est pas sûr dans des environnements avec plusieurs royaumes sauf si `krb_realm` est aussi utilisé. Il est recommandé de laisser `include_realm` configurer à sa valeur par défaut et de fournir une correspondance explicite dans `pg_ident.conf` pour convertir les noms de principaux en noms d'utilisateurs PostgreSQL.

`compat_realm`

  Si configuré à 1, le nom, compatible SAM, du domaine (aussi connu en tant que nom NetBIOS) est utilisé pour l'option `include_realm`. C'est la valeur par défaut. Si configuré à 0, le vrai nom de royaume provenant de nom du principal Kerberos est utilisé.

  Ne désactivez pas cette option sauf si votre serveur est exécuté sous un compte domaine (ceci inclut les comptes de service virtuels sur un système membre du domaine) et si tous les clients s'authentifiant via SSPI utilisent aussi des comptes domaines. Dans le cas contraire, l'authentification va échouer.

`upn_username`

  Si cette option est activée avec `compat_realm`, le nom de l'utilisateur provenant du UPN Kerberos est utilisé pour l'authentification. Si elle est désactivée (par défaut), le nom d'utilisateur provenant de l'UPN Kerberos est utilisé pour l'authentification. Si elle est désactivée (par défaut), le nom d'utilisateur compatible SAM est utilisé. Par défaut, ces deux noms sont identiques pour les nouveaux comptes utilisateurs.

  Notez que libpq utilise le nom compatible SAM si aucun nom d'utilisateur explicite n'est spécifié. Si vous utilisez la libpq ou un connecteur basé sur cette bibliothèque, vous devriez laisser cette option désactivée ou indiquer explicitement le nom d'utilisateur dans la chaîne de connexion.

`map`

  Permet la mise en correspondance entre les principaux clients et les noms d'utilisateurs de base. Voir Section 21.2 pour plus de détails. Pour un principal GSSAPI/Kerberos, tel que `username@EXAMPLE.COM` (ou, moins communément, `username/hostbased@EXAMPLE.COM`), le nom d'utilisateur utilisé pour la correspondance est `username@EXAMPLE.COM` (ou `username/hostbased@EXAMPLE.COM`, respectivement), sauf si `include_realm` a été configuré à 0, auquel cas `username` (ou `username/hostbased`) est ce qui est vu comme le nom d'utilisateur du système lors de la recherche de correspondance.

`krb_realm`

  Configure le domaine pour la correspondance du principal de l'utilisateur. Si ce paramètre est configuré, seuls les utilisateurs de ce domaine seront acceptés. S'il n'est pas configuré, les utilisateurs de tout domaine peuvent se connecter, à condition que la correspondance du nom de l'utilisateur est faite.

En plus de ces paramètres, qui peuvent être différents pour différentes entrées `pg_hba.conf`, il existe le paramètre serveur de configuration krb_caseins_users. S'il est configuré à true, les principaux clients sont comparés aux entrées de la carte utilisateurs, sans attention à la casse. Si `krb_realm` est configuré, il est aussi comparé sans attention à la casse.