Set-OPS-Public/roles/serveur_openldap/defaults/main.yml
Daniel Allaire 69536a2b1a openldap : charge ppolicy — le jeton d'amorcage devient a usage unique
Le module etait sur disque mais jamais charge (seul back_mdb l'etait). Depuis
OpenLDAP 2.5 son schema est INTEGRE au module : aucun .ldif a charger.

La contrainte mord, mesuree sur un compte fraichement amorce :

  Insufficient access (50)
  Operations are restricted to bind/unbind/abandon/StartTLS/modify password

Le sysadmin peut se connecter et RIEN d'autre que changer son mot de passe. Ce
que la doctrine promettait est garanti techniquement, plus seulement demande.

`pwdMustChange` est ce qui donne son effet a `pwdReset` : sans lui, marquer une
entree n'oblige a rien. La politique apporte aussi longueur minimale 12,
verrouillage apres 5 echecs, historique. `olcPPolicyUseLockout` reste FALSE :
annoncer « compte verrouille » renseignerait un attaquant sur son existence.

Le DN de la base est LU, pas suppose : olcDatabase={1}mdb est l'usage mais
l'index n'est pas garanti.

La detection du role d'amorcage s'est verifiee d'elle-meme : rejoue apres le
chargement, il annonce « Changement FORCE » la ou il disait l'inverse une heure
plus tot.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-07 13:52:00 -04:00

72 lines
3.3 KiB
YAML

---
serveur_openldap_paquets:
- slapd
- ldap-utils
- python3-ldap # requis par community.general.ldap_entry sur la cible
serveur_openldap_service: "slapd"
# Identite de l'annuaire.
serveur_openldap_domaine: "{{ domaine_interne }}"
serveur_openldap_organisation: "{{ organisation | default('Organisation') }}"
# Base DN derivee du domaine interne (ex. acme.local -> dc=acme,dc=local).
serveur_openldap_base_dn: "dc={{ serveur_openldap_domaine.split('.') | join(',dc=') }}"
serveur_openldap_admin_dn: "cn=admin,{{ serveur_openldap_base_dn }}"
# Secret OBLIGATOIRE (Ansible Vault).
serveur_openldap_admin_password: "{{ vault_openldap_admin | default('') }}" # rempli depuis la voute (vault_openldap_admin)
# Unites organisationnelles de base.
serveur_openldap_ou:
- people
- groups
# --- TLS (LDAPS + STARTTLS) via le certificat d'hote step_ca ---
# Requiert l'integration client_pki sur le noeud (fournit le cert + le renouvellement).
serveur_openldap_tls_actif: true
# Certificat SOURCE depose par client_pki (root:root 600, illisible par openldap).
serveur_openldap_tls_source_cert: "/etc/step/certs/{{ ansible_fqdn | default(ansible_hostname) }}.crt"
serveur_openldap_tls_source_cle: "/etc/step/certs/{{ ansible_fqdn | default(ansible_hostname) }}.key"
serveur_openldap_tls_source_ca: "/etc/step/certs/root_ca.crt"
# Emplacement PONT, lisible par openldap ; resynchronise a chaque renouvellement.
serveur_openldap_tls_dir: "/etc/ldap/tls"
# Services slapd exposes (ldaps ajoute pour le TLS ; ldapi pour l'admin local).
serveur_openldap_services: "ldap:/// ldaps:/// ldapi:///"
# --- Politique de mot de passe (overlay ppolicy) ------------------------------
# Sans cet overlay, `pwdReset` n'existe pas dans le schema : le changement force a
# la premiere ouverture est impossible, et rien ne contraint la qualite ni ne
# verrouille apres des echecs repetes. Mesure le 2026-08-07 : seul `back_mdb`
# etait charge. Voir docs/autorisation.md §3.
#
# Depuis OpenLDAP 2.5, le schema ppolicy est INTEGRE au module : aucun fichier
# `.ldif` a charger, contrairement a 2.4.
serveur_openldap_ppolicy_actif: true
# `pwdMustChange` est ce qui donne son effet a `pwdReset` : sans lui, marquer une
# entree n'oblige a rien. Les deux vont ensemble.
serveur_openldap_ppolicy:
pwdMustChange: "TRUE"
# Qualite : 1 = verifier si possible, accepter sinon. `pwdMinLength` n'est
# applique QUE si `pwdCheckQuality` > 0.
pwdCheckQuality: "1"
pwdMinLength: "12"
# Verrouillage apres echecs repetes. `pwdLockoutDuration` en secondes.
pwdLockout: "TRUE"
pwdMaxFailure: "5"
pwdFailureCountInterval: "900"
pwdLockoutDuration: "900"
# Historique : interdit de reprendre un mot de passe recent.
pwdInHistory: "3"
# L'utilisateur peut changer son propre mot de passe — indispensable, puisque
# `pwdMustChange` l'y oblige.
pwdAllowUserChange: "TRUE"
# Reglages de l'OVERLAY lui-meme (pas de la politique). `HashCleartext` hache un
# mot de passe recu en clair au lieu de le stocker tel quel : filet de securite si
# un client oublie de hacher.
# `UseLockout` laisse volontairement a FALSE : dire « ce compte est verrouille »
# renseigne un attaquant sur l'existence du compte. L'utilisateur legitime voit
# « identifiants invalides » et attend la duree de verrouillage.
serveur_openldap_ppolicy_hash_cleartext: true
serveur_openldap_ppolicy_use_lockout: false