Gérer une politique de mots de passe avec OpenLDAP

openldap

Il est fréquent dans un réseau d’entreprise de s’appuyer sur un annuaire LDAP pour stocker les informations de connexion (logins et mots de passe) des différents comptes, qu’il s’agisse de comptes utilisateur ou de comptes de service. Les bonnes pratiques actuelles recommandent également de définir une politique de mots de passe (durée de vie, longueur, complexité) afin de rendre plus difficile à un attaquant la tâche de s’approprier un compte auquel il n’est pas censé avoir accès. Dans le cas d’un annuaire OpenLDAP, cette politique de mots de passe peut directement être implémentée dans l’annuaire grâce à l’overlay ppolicy.

L’overlay ppolicy

Ppolicy (pour Password Policy) est un « overlay », c’est-à-dire un module pour OpenLDAP qui n’est pas activé par défaut, mais qui une fois chargé et configuré va modifier le comportement de l’annuaire. Dans le cas de ppolicy il s’agit de définir un ensemble de règles pour l’attribut qui contient les mots de passe (par défaut l’attribut userPassword).

Ppolicy permet notamment de paramétrer :

  • La manière dont sont stockés les mots de passe, c’est-à-dire la fonction de hachage utilisée pour qu’ils ne soient pas présents dans l’annuaire en clair
  • La complexité des mots de passe : longueur, classes de caractères… Ainsi on évitera de se retrouver avec des mots de passe triviaux tels « password1 » ou « mdp-jmartin »
  • Les règles d’expiration, soit la fréquence à laquelle un utilisateur doit changer son mot de passe. Il est également possible de stocker un historique des précédents mots de passe afin d’éviter qu’un compte ait deux mots de passe différents qui alternent tous les 3 mois
  • Le nombre maximum de tentatives de connexion ratées. Par exemple, on peut décider que si un utilisateur se trompe de mot de passe 5 fois de suite, son compte est verrouillé jusqu’à intervention d’un administrateur. Il est possible de préciser si les tentatives avec un même mot de passe erroné comptent ou non

On notera qu’il est possible de définir plusieurs politiques de mots de passe qui s’appliqueront à différentes entrées dans l’annuaire. Un exemple d’utilisation courant est de définir une politique différente pour les comptes de service, dont le mot de passe expirera moins fréquemment mais sera en contrepartie plus robuste. Pour cela ppolicy permet de déclarer une politique par défaut, et pour chaque compte dans l’annuaire d’en indiquer une autre, cette dernière directive ayant priorité sur la politique par défaut.

En pratique

Pour utiliser ppolicy, il faut inclure le fichier .schema correspondant, et charger le module. Les directives sont ensuite définies dans chaque base de données déclarée dans le fichier de configuration.

...
# include the ppolicy schema
include ppolicy.schema
...
# required if the overlay is built dynamically
loadmodule ppolicy.la
# OR
loadmodule ppolicy.so
...
database bdb
suffix "dc=example,dc=com"
...
# invokes password policies for this DIT only
overlay ppolicy
# define the default policy
ppolicy_default "cn=default,cn=pwpolicies,dc=example,dc=com"
# optional ppolicy directives

Ensuite il faut rajouter l’entrée de l’annuaire qui contient la politique de mots de passe. Ci-dessous un exemple basique.

dn: cn=default,ou=policies,dc=example,dc=com
cn: default
objectClass: pwdPolicy
objectClass: person
objectClass: top
# Permet à l’utilisateur de modifier lui-même son mot de passe
pwdAllowUserChange: TRUE
# Attribut qui contient le mot de passe : userPassword
pwdAttribute: userPassword
# Durée de vie du mot de passe : 3 mois
pwdMaxAge: 7889400
# Si l’utilisateur se connecte dans les 1à heures précédents l’expiration de son
# mot de passe, il reçoit un message d’avertissement
pwdExpireWarning: 600
# Nombre d’anciens mots de passe stockés pour éviter la réutilisation : 2
pwdInHistory: 2
# Longueur minimale du mot de passe : 8 caractères
pwdMinLength: 8
# Nombre maximum de tentatives de connexion ratées : 5
pwdMaxFailure: 5
# Verrouille le compte si 5 tentatives de connexion consécutives ont échoué
pwdLockout: TRUE

Emile

Consultant sécurité

Sources et compléments d’information :