Sous-traiter l'identification postgresql à un serveur ldap

Le principe général est le suivant :

    • l'identification via login/mdp (intégré à postgres, codage md5) est réservée aux applications web. Comme elles sont hébergées dans des serveurs connus, il est facile de les identifier facilement ;
    • pour certaines applications “client lourd” dont l'identification serait liée à un login unique, on recense le login concerné pour le gérer par l'identification md5 (identique ligne précédente) ;
    • toutes les autres identifications passent par l'annuaire ldap : ainsi, chaque utilisateur s'identifie avec son login ldap. Les logins sont déclarés dans postgres, et sont associés à des groupes.

En identification ldap, postgres délègue à l'annuaire l'identification (et que l'identification). Les droits restent gérés dans postgres, y compris les dates d'expiration des comptes, etc.

Pour configurer ça, il faut modifier le fichier /etc/postgresql/9.x/main/pg_hba.conf. La configuration est lue dans l'ordre, cela veut dire que dès qu'une condition est remplie, la lecture du fichier s'arrête.

Pour que l'identification fonctionne comme décrite précédemment, on devrait donc avoir :

# "local" is for Unix domain socket connections only
 local all all peer
 # IPv4 local connections:
host all all 127.0.0.1/32 md5
# Connexions pour les serveurs web
host all all adresse_serveur1/32 md5 host all all adresse_serveur2/32 md5
# Connexions pour les applis specifiques host base_de_donnees login_specifique [plage_adresse_CIDR|adresse_ip|0.0.0.0/0] md5
# Connexions ldap pour les autres usages
host all all [plage_adresse_CIDR|adresse_ip|0.0.0.0/0] ldap ldapserver=ldap.societe.com ldapprefix="uid=" ldapsuffix=",ou=people,o=societe,c=fr" ldaptls=1

Il est conseillé d'inhiber l'identification IPV6, sinon cela peut poser des problèmes si le protocole est prioritaire dans une machine et que tout ne soit pas configuré “tip-top”.

Un reload du service postgres suffit, en principe, pour faire prendre en compte la config.