Set-OPS-Public/roles/serveur_openldap
Daniel Allaire b4e3520561 annuaire : un compte de service par consommateur, et la porte se ferme
Keycloak, Dovecot, Postfix et Icinga Web 2 se liaient TOUS avec cn=admin, le compte
d administration de la base. C est le rootDN : slapd lui fait contourner toutes les
ACL. Un seul secret, quatre services, tous les droits sur l arbre — pour ce qui est,
trois fois sur quatre, une simple lecture.

Et les droits livres par Debian etaient intacts : `to * by * read`. Sur ldap://, sans
s authentifier, une machine du reseau enumerait tous les comptes et toutes les
adresses. Des comptes a droits mesures n auraient rien valu tant que cette ligne
restait : on aurait ferme la porte en laissant la fenetre.

L indice etait deja dans le depot. `validatePasswordPolicy` existe parce que slapd
n applique pas ses controles de qualite au rootDN : la consequence etait compensee,
la cause intacte.

- ou=services, un compte par consommateur, secret propre en voute
- sept regles d acces posees EN ENTIER (state: exact) : l ordre est la regle, et
  inserer c est parier sur ce que le paquet aura mis avant nous
- amorcage_acces garde le compte d administration, NOMME comme l exception : il ne
  consomme pas l annuaire, il le provisionne depuis la socket locale
- la sonde passe de -x a -Y EXTERNAL : elle lisait en anonyme et aurait annonce un
  annuaire VIDE sur un annuaire parfaitement sain
- la rotation du compte d administration devient possible (elle n etait posee qu a
  l installation, par debconf : la voute et slapd divergeaient en silence)

Quatre marches payees en chemin :
1. un cinquieme appelant oublie, dont l echec etait masque par no_log — la garde
   refuse desormais SANS no_log : elle nomme la cle absente, jamais son contenu
2. la federation Keycloak ne reecrivait son bindDn que si l URL ou le mode changeaient
   — nouveau secret, ancien nom, error code 49
3. la rotation placee APRES les taches qui se lient en administrateur
4. ansible-vault et son tube : sortie non bloquante = echec silencieux, la voute
   paraissait tournee et etait identique a l octet

P72 exige que tout role incluant resoudre_annuaire NOMME son compte, et qu aucun sauf
amorcage_acces ne nomme admin. Eprouvee dans les deux sens.

Verifie sur l infrastructure : chaque compte lit ce qu il doit, aucun ne voit les
autres, la lecture anonyme rend 0 entree, et les quatre services repondent (doveadm
user, postmap -q, decouverte OIDC 200, portier SSO 200).

vault_openldap_admin et vault_ldap_bind_postfix renouveles : les deux avaient transite
en clair par une session d exploitation. Les anciennes valeurs rendent Invalid
credentials (49).

make prouver : 71 OK, 0 echec, 1 saute. ansible-lint : 0 failure, profil production.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-13 13:36:38 -04:00
..
defaults annuaire : un compte de service par consommateur, et la porte se ferme 2026-09-13 13:36:38 -04:00
handlers serveur_openldap : TLS via step_ca + organisation en intrant (code prod) 2026-07-02 07:27:43 -04:00
meta sondes : les cinq qui manquaient le plus (autorite, base, annuaire, zones, edge) 2026-09-10 03:47:03 -04:00
tasks annuaire : un compte de service par consommateur, et la porte se ferme 2026-09-13 13:36:38 -04:00
templates annuaire : un compte de service par consommateur, et la porte se ferme 2026-09-13 13:36:38 -04:00
README.md Retirer 3 rôles legacy (serveur_sendmail, client_dns, client_ldap) + nettoyage 2026-07-04 12:14:04 -04:00

serveur_openldap

Annuaire interne OpenLDAP (slapd Debian), socle d'identité pour le SSO (Keycloak), le courriel et fédération applicative (Keycloak).

Rôle

  • Préconfigure slapd via debconf (installation non interactive) : domaine, organisation, backend MDB.
  • Installe slapd, ldap-utils, python3-ldap.
  • Mot de passe admin depuis Vault.
  • Crée les unités organisationnelles de base (ou=people, ou=groups).

Identité

  • Domaine exemple.internal → base DN dc=exemple,dc=internal (dérivée).
  • Admin : cn=admin,dc=exemple,dc=internal.

Secret requis (Vault)

serveur_openldap_admin_password: "{{ vault_openldap_admin }}"

À placer dans un group_vars/serveur_openldap/vault.yml chiffré. Sans lui, le rôle refuse de s'exécuter (assertion explicite).

Variables principales

Variable Défaut Rôle
serveur_openldap_domaine exemple.internal Domaine → base DN
serveur_openldap_organisation Exemple Inc Organisation
serveur_openldap_ou [people, groups] OU de base créées

Notes / limites

  • Le préseed debconf configure slapd à l'installation initiale. Reconfigurer un slapd déjà installé (changer domaine/mot de passe) nécessite dpkg-reconfigure slapd manuel (non automatisé ici pour éviter une purge accidentelle de la base).
  • TLS (LDAPS) : hors périmètre du socle — viendra avec les certificats de serveur_step_ca.
  • Entrées utilisateurs/groupes : gérées ailleurs (provisioning de l'annuaire).

Prérequis

  • Collection community.general (ldap_entry) + python3-ldap sur la cible.