
La politique c'est pas fait pour les politiciens
Rappelons d'abord qu'une politique des mots de passe est un ensemble de règles permettant :
- de contrôler les authentifications (blocage de compte après plusieurs tentatives infructueuses)
- de contrôler les changements de mot de passe (expiration, force du mot de passe, réinitalisation à la prochaine connexion, présence dans un historique, etc.)
Samba et OpenLDAP sont sur un bateau
Pour ceux qui ont pratiqué Samba, il est assez simple de gérer la politique des mots de passe Samba (à l'aide des outils Samba ou des Samba LDAP tools). Cependant cette politique ne s'applique qu'à Samba, et ses mots de passes spécifiques (sambaLMPassword et sambaNTPassword).
Pour ceux qui ont pratiqué OpenLDAP, il est aussi assez simple de gérer la politique des mots de passe, en activant l'overlay ppolicy. Cependant cette politique ne s'applique qu'au mot de passe LDAP (userPassword).
Je ne veux voir qu'une politique !
C'est donc bien joli tout ça, mais il me faut une solution pour gérer de manière unique ces contraintes suivantes :
- Taille du mot de passe au moins de 8 caractères
- Stockage des 4 derniers mots de passe dans un historique
Bien entendu cela devra être appliqué pour une modification du mot de passe à travers Samba (donc potentiellement à travers la GINA Windows) et à travers une interface Web de changement de mot de passe LDAP.
Et on est bien d'accord que si je change le mot de passe LDAP par l'interface Web, les mots de passe Samba sont aussi mis à jour.
Et plus vite que ça !
Samba
Configurons Samba pour qu'il ne modifie que le mot de passe LDAP. En effet, on va déléguer le reste du travail à OpenLDAP :
# vi /etc/samba/smb.conf
---8<---
ldap passwd sync = only
---8<---
Cela va en fait indiquer à Samba de ne changer que le champ 'userPassword', et ne de pas toucher aux champs 'sambaLMPassword' et 'sambaNTPassword'.
À noter que Samba utilise l'opération étendue password modify pour changer le mot de passe.
OpenLDAP
Il faut activer deux overlays :
- ppolicy : politique des mots de passe OpenLDAP (contrôle des authentifications et des changements de mot de passe)
- smbk5pwd : modification des mots de passe Samba et Kerberos en parallèle du mot de passe LDAP, uniquement sur l'opération étendue de changement de mot de passe
L'overlay smbk5pwd n'est pas un overlay officiel, il se trouve dans le répertoire contribs/slapd-modules/smbk5pwd. Certains distributions l'incluent toutefois dans leurs paquetages OpenLDAP (par exemple CentOS), sinon il faut compiler l'overlay à la main.
# vi /etc/openldap/slapd.conf
---8<---
modulepath /usr/lib/openldap/
moduleload ppolicy.la
moduleload smbk5pwd.la
database bdb
overlay ppolicy
ppolicy_default ou=default,ou=ppolicy,dc=example,dc=com
overlay smbk5pwd
smbk5pwd-enable samba
---8<---
Et on configure par exemple la politique des mots de passe avec cette entrée :
dn: ou=default,ou=ppolicy,dc=example,dc=com
objectClass: organizationalUnit
objectClass: pwdPolicy
objectClass: top
ou: default
pwdAttribute: userPassword
pwdCheckQuality: 2
pwdInHistory: 4
pwdMinLength: 10
Croisons les doigts
Changement de mot de passe d'un utilisateur par Samba :
# smbpasswd coudot
New SMB password:
Retype new SMB password:
- Mot de passe invalide (trop court ou dans l'historique) :
# smbpasswd coudot
New SMB password:
Retype new SMB password:
ldapsam_modify_entry: LDAP Password could not be changed for user coudot: Constraint violation
Password fails quality checking policy
Failed to modify entry for user coudot.
Failed to modify password entry for user coudot
L'erreur LDAP remontée est bien celle de la politique des mots de passe OpenLDAP.
Ça ira pour cette fois
Cette solution a le mérite de fonctionner, mais on s'aperçoit vite qu'il est impossible par exemple d'avoir un seul compteur d'authentification erronées (car Samba ne fait pas de BIND LDAP), ou encore d'avoir une seule information pour forcer la réinitialisation à la prochaine connexion.
Reste à espérer que les travaux sur Samba 4 amélioreront l'interopérabilité des deux politiques.