Mise en place d'une politique de mot de passe sous OpenLDAP
Mise en place d’une politique de mot de passe sous OpenLDAP
LDAP propose un module “password policy enforcement” qui permet de forcer les utilisateurs à changer régulièrement leur mot de passe ou à définir un niveau de complexité pour ces dernierrs.
OpenLDAP met à disposition un module, ppolicy
, qui permet de mettre en oeuvre cette politique. La commande man slapo-ppolicy
explique le détails des options disponibles. Cette document est accessible en ligne notamment sur le site d’OpenLDAP.
Ce tuto explique comment mettre en oeuvre une politique de mot de passe qui ne s’applique que sur des comptes particuliers.
S’assurer que le moulde ppolicy soit activé
Pour un OpenLDAP dont la configuration est réalisée sous la forme de fichier, il faut au moins que les directives suivantes soient active :
$ grep ppolicy /etc/openldap/slapd.conf
moduleload ppolicy.la
overlay ppolicy
Une politique ppolicy par défaut obligatoire
Le module ppolicy
demande une politique par défaut. La première étape est donc de créer un objet LDAP qui implémente cette politique par défaut.
Pour ce faire, il faut créer un fichier ldif introduisant un noeud ou=ppolicy
dans notre LDAP puis un objet cn=default
:
dn: ou=pwpolicies,dc=example,dc=org
objectClass: top
objectClass: organizationalUnit
ou: pwpolicies
dn: cn=default,ou=pwpolicies,dc=example,dc=org
objectClass: pwdPolicy
objectClass: organizationalRole
cn: default
pwdMaxAge: 0
pwdAttribute: userPassword
pwdExpireWarning: 0
pwdInHistory: 0
pwdCheckQuality: 1
pwdMaxFailure: 0
pwdLockout: FALSE
pwdLockoutDuration: 0
pwdGraceAuthNLimit: 0
pwdFailureCountInterval: 0
pwdMustChange: FALSE
pwdMinLength: 0
pwdAllowUserChange: TRUE
pwdSafeModify: FALSE
La commmande ldapadd
permet d’ajouter ces éléments dans le LDAP :
$ ldapadd -x -h ldap.example.org -D 'cn=Manager,dc=example,dc=org' -W -f default_ppolicy.ldif
Dans notre exemple, la politique par défaut n’ajoute aucune règle particulière.
Activer la politique par défaut
Pour que cette politique soit prise en compte par OpenLDAP, il faut y faire référence dans le fichier de configuration slapd.conf
en ajoutant la ligne suivante :
ppolicy_default cn=default,ou=pwpolicies,dc=example,dc=org
Ajouter une politique de renouvellement de mot de passe
Nous allons ajouter une politique nommée “restriction” qui obligera les utilisateurs à changer leur mot de passe si ils ne l’ont pas fait depuis un an (365 jours soit 31523000 secondes).
$ cat policy.ldif
dn: cn=restriction,ou=pwpolicies,dc=example,dc=org
cn: restriction
objectClass: pwdPolicy
objectClass: organizationalRole
pwdAttribute: userPassword
pwdExpireWarning: 259200
pwdMaxAge: 31536000
$ ldapadd -x -h ldap.example.org -D 'cn=Manager,dc=example,dc=org' -W -f policy.ldif
L’attribut pwdMaxAge
indique la durée de vie maximum d’un mot de passe. Pour chaque modification de mot de passe, OpenLDAP met à jour un attribut pwdChangedTime
. C’est cette date qui est prise en compte dans le calcul. La durée de vie est indiquée en secondes.
L’attribut pwdExpireWarning
permet d’envoyer un message d’alerte à l’utilisateur pour l’inviter à changer son mot de passe. La valeur indique le nombre de secondes avant l’expiration du mot de passe.
L’attribut pwdAttribute
est un attribut obligatoire de tout object pwdPolicy
. Il indique où se trouve le mot de passe dans l’objet dédié aux utilisateurs.
Activer la politique pour certains comptes
Pour chacun des comptes pour lesquels nous voudrons que la politique de durée de vie des mots de passe s’applique, nous devrons indiquer le cn
de cette politique via l’attribut pwdPolicySubentry
:
$ cat modify.ldif
dn: uid=login,ou=People,dc=example,dc=org
add: pwdPolicySubentry
pwdPolicySubentry: cn=restriction,ou=pwpolicies,dc=example,dc=org
$ ldapmodify -x -h ldap.example.org -D 'cn=XXXXXXXXX,dc=example,dc=org' -W < modify.ldif
Tester la politique pour un compte
Afin de tester, il faut modifier la date de dernière modification du mot de passe pour attribuer à notre utilisateur de test une date de plus d’un an. Attention, il faut être super utilisateur pour pouvoir le faire et “forcer” ldap à outre passer sa règle de cohérence avec l’option -e relax
:
$ cat modify.ldif
dn: uid=login,ou=People,dc=example,dc=org
changetype: modify
replace: pwdChangedTime
pwdChangedTime: 20001231235959Z
$ ldapmodify -e relax -x -h ldap.example.org -D 'cn=XXXXXXXXX,dc=example,dc=org' -W < modify.ldif
Une fois réalisé, si la politique est bien appliqué on obtient :
$ ldapwhoami -x -h ldap.example.org -D 'uid=login,ou=People,dc=example,dc=org' -W
Enter LDAP Password:
ldap_bind: Invalid credentials (49)
Pour être sur qu’il ne s’agit pas d’une erreur de frappe, on a le message suivant dans le fichier de log /var/log/openldap.log
:
Apr 27 12:00:00 ldap slapd[XXXXX]: ppolicy_bind: Entry dn: uid=login,ou=People,dc=example,dc=org has an expired password: 0 grace logins