Tag Archives: OpenLDAP password policy

OpenLDAP password policy – Managing users accounts

« OpenLDAP password policy » is an overlay that allows you to set up an efficient management of the authentication accounts of people referenced in the OpenLDAP directory. This management concerns in particular the passwords of these persons. This article will show how to configure the OpenLDAP server to activate the« password policy » overlay and implement this management. Prerequisite: The article Adding data to the directory and its prerequisites are read. The OpenLDAP server is installed and the data of the article are entered.

1. Enable ppolicy schema (OpenLDAP password policy)

By default, the ppolicy schema is installed: /etc/ldap/schema/ppolicy.ldif, but not enabled. To enable it:
ldapmodify -x -a -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -w admin -f /etc/ldap/schema/ppolicy.ldif
To check the schema loading :
ldapsearch -x -s one -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -w admin -b cn=schema,cn=config cn -LLL

dn: cn={0}core,cn=schema,cn=config
cn: {0}core

dn: cn={1}cosine,cn=schema,cn=config
cn: {1}cosine

dn: cn={2}nis,cn=schema,cn=config
cn: {2}nis

dn: cn={3}inetorgperson,cn=schema,cn=config
cn: {3}inetorgperson

dn: cn={4}ppolicy,cn=schema,cn=config
cn: {4}ppolicy
Notice the presence of the ppolicy schema in addition to the four schemas that are enabled by default.

2. Enable the ppolicy overlay

Create the LDIF command file: ppolicy-module.ldif
vi ppolicy-module.ldif
Enter in the editor and save:
dn: cn=module{0},cn=config
changeType: modify
add: olcModuleLoad
olcModuleLoad: ppolicy
Execute the modify command contained in the file:
ldapmodify -x -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -w admin -f ppolicy-module.ldif
To check the module activation:
ldapsearch -x -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -w admin -b cn=config "(objectClass=olcModuleList)" olcModuleLoad -LLL

dn: cn=module{0},cn=config
olcModuleLoad: {0}back_mdb
olcModuleLoad: {1}ppolicy
Notice the presence of the ppolicy module in the list, while default only back_mdb (database management module) is enabled.

3. Configuring the ppolicy overlay

Create the LDIF command file: ppolicy-conf.ldif
vi ppolicy-conf.ldif
Enter in the editor and save:
dn: olcOverlay=ppolicy,olcDatabase={1}hdb,cn=config
objectClass: olcPpolicyConfig
olcOverlay: ppolicy
olcPPolicyDefault: cn=ppolicy,dc=ldaptuto,dc=net
olcPPolicyUseLockout: FALSE
olcPPolicyHashCleartext: TRUE
Add the entry contained in the file:
ldapmodify -x -a -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -w admin -f ppolicy-conf.ldif
To verify that the configuration is actually enabled:
ldapsearch -x -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -w admin -b cn=config "(objectClass=olcPpolicyConfig)" -LLL

dn: olcOverlay={0}ppolicy,olcDatabase={1}hdb,cn=config
objectClass: olcPPolicyConfig
olcOverlay: {0}ppolicy
olcPPolicyDefault: cn=ppolicy,dc=ldaptuto,dc=net
olcPPolicyHashCleartext: TRUE
olcPPolicyUseLockout: FALSE
Three configuration settings:
  1. olcPPolicyDefault: Specifies a configuration DN used by default (see next paragraph).
  2. olcPPolicyHashCleartext: Indicates whether passwords should be encrypted systematically. Advise: This setting should be TRUE.
  3. olcPPolicyUseLockout: Indicates whether the error message returned when attempting to connect to a locked account is a message specific to that locked state (TRUE), or a general failed login message (FALSE). FALSE is more secure (no indication to a possible pirate), TRUE is more convenient.

4. Configure a password policy

We will configure the entry specified in the olcPPolicyDefault parameter of the ppolicy overlay configuration, i.e. cn=ppolicy,dc=ldaptuto,dc=netTo do this we will create an LDIF file that will allow to add this entry.
vi ppolicy-defaut.ldif
Enter in the editor and save:
dn: cn=ppolicy,dc=ldaptuto,dc=net
objectClass: device
objectClass: pwdPolicyChecker
objectClass: pwdPolicy
cn: ppolicy
pwdAllowUserChange: TRUE
pwdAttribute: userPassword
pwdCheckQuality: 1
pwdExpireWarning: 600
pwdFailureCountInterval: 30
pwdGraceAuthNLimit: 5
pwdInHistory: 5
pwdLockout: TRUE
pwdLockoutDuration: 0
pwdMaxAge: 0
pwdMaxFailure: 5
pwdMinAge: 0
pwdMinLength: 5
pwdMustChange: FALSE
pwdSafeModify: FALSE
Add the entry contained in the file:
ldapmodify -x -a -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -w admin -f ppolicy-defaut.ldif
To verify the result:
ldapsearch -x -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -w admin -b dc=ldaptuto,dc=net "(objectClass=pwdPolicy)" -LLL
16 Settings (all listed attributes) allow you to set up an efficient and effective policy for passwords and user account management. The following command gives you full details about these parameters:
man slapo-ppolicy
For example, pwdMinLength has been set to 5, which means that a password can not be less than 5 characters in length. Let’s test:
ldappasswd -x -H ldap://localhost -D uid=durand,ou=people,dc=ldaptuto,dc=net -w durand -s dura

Result: Constraint violation (19)
Additional info: Password fails quality checking policy
This command allows Alain Durand to log in with his username and password (-D uid=durand,ou=people,dc=ldaptuto,dc=net and -w durand) and change this password with the new value provided (-s dura). The command fails because the new password has only 4 characters.
ldappasswd -x -H ldap://localhost -D uid=durand,ou=people,dc=ldaptuto,dc=net -w durand -s duran
The command succeeds because the new password has 5 characters. To verify the password modification:
ldapsearch -x -H ldap://localhost -D uid=durand,ou=people,dc=ldaptuto,dc=net -w durand -b dc=ldaptuto,dc=net

ldap_bind: Invalid credentials (49)
The old password is not accepted and the same command with the new password: duran, should succeed. Another setting: pwdCheckModule controls the quality of the contents of passwords. This setting specifies the file name of a native shared library that ensures this function. Before informing it, it will first be necessary to ensure that this library is present. pqChecker is a library that can be used to control passwords content strength for ppolicy overlay. To use it, you should modify the default password policy setting.
vi modifpp.ldif
Enter in the editor and save:
dn: cn=ppolicy,dc=ldaptuto,dc=net
changeType: modify
add: pwdCheckModule
pwdCheckModule: pqchecker.so
Execute the modify command contained in the file:
ldapmodify -x -a -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -w admin -f modifpp.ldif
pqchecker.so is the quality control library for the contents of passwords. By default it is installed at /usr/lib/ldap. It requires by default a password with at least 1 uppercase, 1 lowercase, 1 digit and 1 special character (not alphabetic). Further details about it may be read on http://www.meddeb.net/pqchecker]]>

OpenLDAP password policy – Mieux sécuriser les comptes des utilisateurs

overlay) qui permet de mettre en place une gestion efficace des comptes d’authentification des personnes référencées dans l’annuaire OpenLDAP. Cette gestion concerne notamment les mots de passe de ces personnes. Cet article montrera la manière de configurer le serveur OpenLDAP pour activer le module « password policy » et mettre en place cette gestion. Pré-requis: L’article Ajouter des données à l’annuaire ainsi que ses pré-requis sont lus. On suppose, également, que le serveur OpenLDAP a été installé et alimenté avec les données de l’article. Pour aller plus loin à ce sujet: La démarche présentée ici constitue le volet système de bas niveau de cette fonctionnalité. L’expiration d’un compte (mot de passe), par exemple, nécessite la mise à disposition des utilisateurs finaux une interface pour modifier leurs mots de passe facilement.

1. Activer le schéma ppolicy (OpenLDAP password policy)

A l’installation du serveur OpenLDAP sur un système Debian ou compatible, le schéma ppolicy est installé: /etc/ldap/schema/ppolicy.ldif, mais il n’est pas activé. Pour l’activer:
ldapmodify -x -a -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -w admin -f /etc/ldap/schema/ppolicy.ldif
Pour vérifier le chargement effectif du schéma:
ldapsearch -x -s one -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -w admin -b cn=schema,cn=config cn -LLL

dn: cn={0}core,cn=schema,cn=config
cn: {0}core

dn: cn={1}cosine,cn=schema,cn=config
cn: {1}cosine

dn: cn={2}nis,cn=schema,cn=config
cn: {2}nis

dn: cn={3}inetorgperson,cn=schema,cn=config
cn: {3}inetorgperson

dn: cn={4}ppolicy,cn=schema,cn=config
cn: {4}ppolicy
Remarquer la présence du schéma ppolicy en plus des quatre schémas activés par défaut.

2. Activer le module ppolicy

Créer le fichier de commande LDIF: ppolicy-module.ldif
vi ppolicy-module.ldif
Saisir dans l’éditeur et enregistrer:
dn: cn=module{0},cn=config
changeType: modify
add: olcModuleLoad
olcModuleLoad: ppolicy
Exécuter la commande de modification contenue dans le fichier:
ldapmodify -x -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -w admin -f ppolicy-module.ldif
Pour vérifier l’activation effective du module:
ldapsearch -x -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -w admin -b cn=config "(objectClass=olcModuleList)" olcModuleLoad -LLL

dn: cn=module{0},cn=config
olcModuleLoad: {0}back_hdb
olcModuleLoad: {1}ppolicy
Remarquez la présence du module ppolicy dans la liste. Initialement, il n’y avait que le module de gestion de la base de données back_hdb  qui est activé.

3. Configurer le module ppolicy

Créer le fichier de commande LDIF: ppolicy-conf.ldif
vi ppolicy-conf.ldif
Saisir dans l’éditeur et enregistrer:
dn: olcOverlay=ppolicy,olcDatabase={1}hdb,cn=config
objectClass: olcPpolicyConfig
olcOverlay: ppolicy
olcPPolicyDefault: cn=ppolicy,dc=ldaptuto,dc=net
olcPPolicyUseLockout: FALSE
olcPPolicyHashCleartext: TRUE
Ajouter l’entrée du fichier:
ldapmodify -x -a -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -w admin -f ppolicy-conf.ldif
Pour vérifier la prise en compte effective de la configuration:
ldapsearch -x -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -w admin -b cn=config "(objectClass=olcPpolicyConfig)" -LLL

dn: olcOverlay={0}ppolicy,olcDatabase={1}hdb,cn=config
objectClass: olcPPolicyConfig
olcOverlay: {0}ppolicy
olcPPolicyDefault: cn=ppolicy,dc=ldaptuto,dc=net
olcPPolicyHashCleartext: TRUE
olcPPolicyUseLockout: FALSE
Trois paramètres de configuration:
  1. olcPPolicyDefault: Indique un DN de configuration utilisé par défaut (cf. paragraphe suivant).
  2. olcPPolicyHashCleartext: Indique si les mots de passe doivent être cryptés systématiquement. Ce paramètre devrait être à TRUE sauf cas exceptionnel.
  3. olcPPolicyUseLockout: Indique si le message d’erreur retourné en cas de tentative de connexion à un compte verrouillé est un message spécifique à cet état de verrouillage (TRUE), ou un message général d’echec de connexion (FALSE). FALSE est plus sécurisé (pas d’indication à un éventuel pirate), TRUE est plus pratique.

4. Configurer une politique de mots de passe

Il s’agit de configurer l’entrée indiquée dans le paramètre olcPPolicyDefault de la configuration du module ppolicy, c’est à dire: cn=ppolicy,dc=ldaptuto,dc=net. Pour cela on va créer un fichier LDIF qui permettra d’ajouter cette entrée.
vi ppolicy-defaut.ldif
Saisir dans l’éditeur et enregistrer:
dn: cn=ppolicy,dc=ldaptuto,dc=net
objectClass: device
objectClass: pwdPolicyChecker
objectClass: pwdPolicy
cn: ppolicy
pwdAllowUserChange: TRUE
pwdAttribute: userPassword
pwdCheckQuality: 1
pwdExpireWarning: 600
pwdFailureCountInterval: 30
pwdGraceAuthNLimit: 5
pwdInHistory: 5
pwdLockout: TRUE
pwdLockoutDuration: 0
pwdMaxAge: 0
pwdMaxFailure: 5
pwdMinAge: 0
pwdMinLength: 5
pwdMustChange: FALSE
pwdSafeModify: FALSE
Ajouter l’entrée:
ldapmodify -x -a -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -w admin -f ppolicy-defaut.ldif
Pour vérifier la prise en compte de cet ajout:
ldapsearch -x -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -w admin -b dc=ldaptuto,dc=net "(objectClass=pwdPolicy)" -LLL
16 Paramètres (tous les attributs listés) permettent de configurer une politique efficace et performante de mots de passe et de gestion des comptes utilisateurs. La commande suivante permet d’avoir tous les détails à propos de ces paramètres:
man slapo-ppolicy
A titre d’exemple, la valeur de pwdMinLength est 5, ce qui signifie qu’un mot de passe ne peut pas avoir une longueur inférieure à 5 caractères. Testons:
ldappasswd -x -H ldap://localhost -D uid=durand,ou=people,dc=ldaptuto,dc=net -w durand -s dura

Result: Constraint violation (19)
Additional info: Password fails quality checking policy
Cette commande permet à Alain Durand de se connecter avec son identifiant et mot de passe (-D uid=durand,ou=people,dc=ldaptuto,dc=net et -w durand) et modifier ce mot de passe avec la nouvelle valeur fournie (-s dura). La commande échoue car le nouveau mot de passe comporte 4 caractères.
ldappasswd -x -H ldap://localhost -D uid=durand,ou=people,dc=ldaptuto,dc=net -w durand -s duran
La commande réussit car le nouveau mot de passe comporte 5 caractères. Pour vérifier la prise en compte de cette modification:
ldapsearch -x -H ldap://localhost -D uid=durand,ou=people,dc=ldaptuto,dc=net -w durand -b dc=ldaptuto,dc=net

ldap_bind: Invalid credentials (49)
Le serveur n’a pas accepté l’ancien mot de passe. Si on utilise la même commande avec le nouveau mot de passe : duran, le serveur l’acceptera. Un autre paramètre: pwdCheckModule permet de contrôler la qualité du contenu des mots de passe. Ce paramètre indique le nom du fichier d’une librairie dynamique partagée native qui se charge de cette fonction. Avant de le renseigner il faudra d’abord s’assurer que cette librairie est présente. Une telle librairie est disponible à l’installation à partir de son site Internet. Il convient de l’installer et ensuite renseigner ce paramètre en modifiant le paramétrage de la politique de mots de passe par défaut:
vi modifpp.ldif
Saisir dans l’éditeur et enregistrer:
dn: cn=ppolicy,dc=ldaptuto,dc=net
changeType: modify
add: pwdCheckModule
pwdCheckModule: pqchecker.so
Exécuter la modification:
ldapmodify -x -a -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -w admin -f modifpp.ldif
pqchecker.so est la librairie de contrôle de la qualité du contenu des mots de passe. Cette librairie est installée par défaut dans /usr/lib/ldap. Par défaut également elle oblige à utiliser un mot de passe avec au minimum 1 caractère majuscule, 1 minuscule, 1 chiffre et 1 caractère spécial (non alphabétique). Plus de renseignements à ce propos peuvent être trouvés sur http://www.meddeb.net/pqchecker.]]>