informatique:reseau:ldap:ppolicy

Module PPolicy

Il faut d'abord charger le module ppolicy :

ldapmodify -Y EXTERNAL -H ldapi:/// << EOF
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: ppolicy
EOF

Il faut ensuite ajouter le schéma ppolicy (uniquement avant OpenLDAP 2.5, Debian Bookworm ou Bullseye backports) :

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/ppolicy.ldif

Il faut ensuite activer ce module pour votre database :

ldapadd -Y EXTERNAL -H ldapi:/// << EOF
dn: olcOverlay=ppolicy,olcDatabase={1}mdb,cn=config
objectclass: olcOverlayConfig
objectclass: olcPPolicyConfig
olcoverlay: ppolicy
olcppolicydefault: cn=default,ou=ppolicies,dc=example,dc=com
olcppolicyforwardupdates: FALSE
olcppolicyhashcleartext: TRUE
olcppolicyuselockout: FALSE
EOF

Paramètres de configuration au niveau de la database :

  • olcPPolicyHashCleartext : si TRUE, les mots de passes soumis en clair lors d'une opération d'ajout ou de modification seront hâché (avec le type par défaut du serveur).
  • olcPPolicyUseLockout : Bien que le serveur refusera toujours la connexion avec un compte bloqué (erreur AccountLocked), si ce paramètre vaut TRUE, le serveur retournera le code d'erreur spécifique AccountLocked.
  • olcPPolicyForwardUpdates (serveur esclave uniquement) : si TRUE, les échecs de connexions (et autres modifications d'attributs opérationnels) sur le serveur seront transmis au serveur maître.
Pour fonctionner, la fonctionnalité associée à l'attribut olcPPolicyForwardUpdates nécessite que :
  • le paramètre olcUpdateRef et le chaining soient configurés sur la database
  • les modifications des attributs opérationnels seront faites avec l'utilisateur LDAP configuré dans le chaining et il est important que les ACLs lui autorisent la modification de ces attributs (droit manage indispensable, notamment pour la suppression de l'attribut pwdFailureTime).

Il faut ensuite ajouter l'objet LDAP dans votre base LDAP implémentant la politique par défaut des mots de passes :

ldapadd -Y EXTERNAL -H ldapi:/// << EOF
dn: ou=ppolicies,dc=example,dc=com
objectclass: organizationalUnit
ou: ppolicies
 
dn: cn=default,ou=ppolicies,dc=example,dc=com
cn: default
objectclass: top
objectclass: device
objectclass: pwdPolicy
objectclass: pwdPolicyChecker
pwdAttribute: userPassword
pwdMinAge: 0
pwdMaxAge: 0
pwdInHistory: 0
pwdCheckQuality: 1
pwdMinLength: 8
pwdExpireWarning: 0
pwdGraceAuthnLimit: 0
pwdLockout: FALSE
pwdLockoutDuration: 0
pwdMaxFailure: 0
pwdMaxRecordedFailure: 0
pwdFailureCountInterval: 0
pwdMustChange: FALSE
pwdAllowUserChange: FALSE
pwdSafeModify: FALSE
EOF
La configuration de la politique par défaut proposée ci-dessus n'active pour ainsi dire aucune protection fourni par cette overlay. Il est conseillé d'ajuster les différents paramètres de la politique en fonction du besoin (voir ci-dessous).

Pour plus d'informations, consulter cette documentation du module.

La politique de mot de passe est définie au travers des objets pwdPolicy stockés dans l'arbre LDAP.

Plusieurs politiques de mots de passe peuvent être configurées avec plusieurs objets pwdPolicy. La politique de mot de passe utilisée pour un compte donné est alors celle ciblée explicitement par l'attribut pwdPolicySubentry du compte ou à défaut, la politique par défaut définie par l'attribut olcPPolicyDefault dans la configuration OpenLDAP de la database.
  • Classe d'objet : pwdPolicy
  • Attributs :
    • pwdAllowUserChange : booléen définissant si l'utilisateur peut changer son mot de passe (défaut: TRUE)
    • pwdAttribute : nom de l'attribut stockant le mot de passe (défaut : userPassword, seul attribut supporté actuellement)
    • pwdCheckModule : nom du module OpenLDAP se chargeant de la vérification de la qualité d'un mot de passe
    • pwdCheckQuality : politique de vérification de la qualité du mot de passe
      • 0 (par défaut) : pas de vérification de la qualité du mot de pasee
      • 1 : si le mot de passe fourni est en clair, il est vérifié, sinon (ou si la méthode de vérification est indisponible) le mot de passe est accepté.
      • 2 : si le mot de passe fourni est en clair, il est vérifié, sinon (ou si la méthode de vérification est indisponible) le mot de passe est refusé.
    • pwdExpireWarning : délai d'affichage du message d'alerte d'expiration du mot de passe
      • 0 (par défaut) : pas de message d'alerte
      • >0 : durée en secondes avant l'expiration du mot de passe pendant laquelle un message d'alerte sera retourné au sujet de l'expiration du mot de passe à chaque connexion (opération de bind LDAP).
    • pwdFailureCountInterval : durée après laquelle le nombre de tentatives d'authentification consécutive en échecs est réinitialisé.
      • 0 (par défaut) : réinitialisé qu'après une connexion réussie
      • >0 : durée en secondes après laquelle le nombre de tentatives en échec sera réinitialisé si aucun échec n'a lieu entre-temps.
    • pwdGraceAuthNLimit : délai de grâce après expiration du mot de passe
      • 0 (par défaut) : après expiration du mot de passe, l'utilisateur ne peut plus se connecter.
      • >0 : nombre de fois ou l'utilisateur peut se connecter avec son mot de passe expiré.
    • pwdInHistory : nombre d'anciens mots de passe conservés dans l'historique d'un utilisateur. Par défaut: 0. Note : les mots de passe sont stockés hachés dans l'historique. Par conséquence, seule une vérification d'égalité parfaite peut être faite.
    • pwdLockout : booléen définissant l'action faite après un trop grand nombre de connexion en échec (défini par pwdMaxFailure):
      • TRUE (par défaut) : le compte est bloqué et seul un administrateur pourra le débloquer
      • FALSE : le compte n'est pas bloqué et l'utilisateur peut toujours tenter de se connecter (=fonctionnalité désactivée)
    • pwdLockoutDuration : durée de blocage d'un compte (si pwdLockout==TRUE)
      • 0 (par défaut) : blocage sans date de fin, c'est à dire jusqu'à déblocage par un administrateur
      • >0 : durée en secondes du blocage. Passé ce délai, le compte sera automatiquement débloqué.
    • pwdMaxAge : durée maximum en secondes de validité d'un mot de passe. Passé ce délai, le mot de passe est expiré et doit être changé. Par défaut: 0, c'est à dire que le mot de passe n'expire jamais.
    • pwdMaxFailure : nombre maximum de tentatives de connexion consécutive en échec avant que l'action définie par pwdLockout est déclenchée. Par défaut: 0, c'est à dire à pas de limite.
    • pwdMaxTotalAttempts : nombre maximum de tentatives de connexions consécutives en échec en incluant les essais avec un même mot de passe, avant que l'action définie par pwdLockout est déclenchée. Note : dans tous les cas, le nombre d'échec avec des mots de passe uniques est contrôllé par rapport à la limite fixée par pwdMaxFailure.
      • 0 (par défaut) : pas de détection de connexion consécutives en échec avec un même mot de passe
      • >0 : limite du nombre de connexion consécutives en échec avec des mots de passe différents. Un même mot de passe ne sera contabilisé qu'une seule fois, quelques soits l'ordre dans lequel il arrive dans la suite d'échec.
      • -1 : aucune limite du nombre de tentatives en échec avec un même mot de passe.
    • pwdMinAge : durée minimale en secondes entre deux changements de mot de passe. Par défaut : 0, c'est à dire qu'il n'y a pas de durée minimale.
    • pwdMinLength : longeur minimale d'un mot de passe. Par défaut : 0, c'est à dire qu'il n'y a pas de longeur minimale. Note : Si le mot de passe est fourni hashé lors du changement, ce test ne peut être réalisé et la politique définie par pwdCheckQuality s'applique alors.
    • pwdMustChange : booléen définissant si l'utilisateur doit changer son mot de passe après qu'un administrateur ait débloqué son compte (utile uniquement si pwdLockout==TRUE). Note : si l'attribut pwdReset est défini sur le compte, sa valeur outrepasse ce paramètre.
      • FALSE (par défaut) : l'utilisateur n'a pas à changer son mot de passe
      • TRUE : l'utilisateur doit changer son mot de passe
    • pwdSafeModify : Booléen définissant si l'utilisateur doit fournir son mot de passe actuel lors d'une opération de modification du mot de passe. Par défaut : FALSE.
  • pwdAccountLockedTime : date et heure du blocage du compte (lorsque pwdLockout==TRUE).
  • pwdChangedTime : date et heure du dernier changement du mot de passe
  • pwdFailureTime : attribut multivalué listant les dates et heures des tentatives de connexion en échec.
  • pwdGraceUseTime : attribut multivalué listant les dates et heures des connexions réussies durant la période de grace accordé après expiration du mot de passe (présent uniquement si pwdGraceAuthNLimit>0).
  • pwdHistory : attribut accessible en lecture uniquement et contenant la liste des derniers mots de passe utilisé par l'utilisateur. Le nombre de mots de passe présent dans cette liste dépend du nombre de changeant du mot de passe du compte et de la limite fixée par pwdInHistory.
  • pwdPolicySubentry : DN d'un objet pwdPolicy à utiliser spécifiquement pour ce compte. À défaut, la politique par défaut s'applique. Note : attribut monovalué.
  • pwdReset : cet attribut peut être utilisé par un administrateur pour débloquer le compte:
    • si TRUE : l'utilisateur doit changer son mot de passe avant la prochaine connexion (opération de BIND LDAP)
    • si FALSE : le compte est débloqué et l'utilisateur n'a pas à changer son mot de passe
  • pwdUniqueAttempts : attribut multivalué, accessible en lecture uniquement, listant le mot de passe haché et la date et heure de chaque tentative de connexion consécutive en échec avec un même mot de passe. Cet attribut n'est présent et utilisé que si pwdMaxTotalAttempts>0

Si un compte d'utilisateur est verrouillé (lorsque pwdLockout==TRUE dans la politique de mot de passe), il peut être déverrouillé par un administrateur en utilisant l'une des procédures suivantes:

  1. Supprimez l'attribut pwdAccountLockedTime : Cette procédure permet à l'utilisateur de continuer à utiliser le mot de passe actuel et n'est efficace que si le mot de passe n'a pas expiré.
  2. Ajoutez l'attribut pwdReset avec la valeur TRUE ou FALSE. FALSE n'est efficace que si le mot de passe n'a pas expiré et a le même effet que la suppression de pwdAccountLockedTime.
  • informatique/reseau/ldap/ppolicy.txt
  • Dernière modification : 2024/05/13 22:39
  • de bn8