Module PPolicy
Installation
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écifiqueAccountLocked
. - 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.
- 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'attributpwdFailureTime
).
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
Pour plus d'informations, consulter cette documentation du module.
Configuration de la politique de mot de passe
La politique de mot de passe est définie au travers des objets pwdPolicy stockés dans l'arbre LDAP.
- 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 pasee1
: 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 debind
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ébloquerFALSE
: 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 passeTRUE
: 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
.
Attributs d'état d'un compte
- 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
Déblocage d'un compte
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:
- 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é.
- Ajoutez l'attribut pwdReset avec la valeur
TRUE
ouFALSE
.FALSE
n'est efficace que si le mot de passe n'a pas expiré et a le même effet que la suppression depwdAccountLockedTime
.