Bonnes ID ~ Clément Oudot

Aller au contenu | Aller au menu | Aller à la recherche

Mot-clé - politique des mots de passe

Fil des billets

jeudi, décembre 22 2011

Sortie de Self Service Password 0.7

Présentation

Self Service Password est une interface web très simple permettant à un utilisateur de changer son mot de passe dans un annuaire LDAP. Cet annuaire peut être Active Directory ou un annuaire LDAP conforme au standard.

Le logiciel est en PHP, sous licence GPL.

recaptcha.png

Fonctionnalités principales

  • Mode Samba (pour les mots de passe NT et LM)
  • Mode Active directory (pour les mots de passe AD), avec déverrouillage et réinitialisation à la prochaine connexion
  • Mode Shadow account
  • Politique des mots de passe locale :
    • Taille minimale/maximale
    • Caractères interdits
    • Compteurs pour les majuscules, minuscules, chiffres et caractères spéciaux
    • Non réutilisation du mot de passe actuel
    • Complexité (nombre de classes de caractères différentes)
  • Messages d'aide
  • Réinitialisation par questions/réponses
  • Réinitialisation par un challenge par mail
  • reCAPTCHA (Google API)
  • Notification par mail après changement de mot de passe

L'application est désormais disponible en 8 langues : anglais, français, allemand, espagnol, brésilien, néerlandais, catalan et polonais !

Quelques liens

mercredi, juillet 27 2011

Sortie de Self Service Password 0.6

Présentation

Self Service Password est une interface web très simple permettant à un utilisateur de changer son mot de passe dans un annuaire LDAP. Cet annuaire peut être Active Directory ou un annuaire LDAP conforme au standard.

Le logiciel est en PHP, sous licence GPL.

recaptcha.png

Fonctionnalités principales

  • Mode Samba (pour les mots de passe NT et LM)
  • Mode Active directory (pour les mots de passe AD)
  • Politique des mots de passe locale :
    • Taille minimale/maximale
    • Caractères interdits
    • Compteurs pour les majuscules, minuscules, chiffres et caractères spéciaux
    • Non réutilisation du mot de passe actuel
    • Complexité (nombre de classes de caractères différentes)
  • Messages d'aide
  • Réinitialisation par questions/réponses
  • Réinitialisation par un challenge par mail
  • reCAPTCHA (Google API)
  • Notification par mail après changement de mot de passe

L'application est désormais disponible en 6 langues : anglais, français, allemand, espagnol, brésilien et néerlandais.

Quelques liens

lundi, avril 11 2011

LDAP Tool Box Self Service Password sort en version 0.5

ltb-logo.png

On n'est jamais mieux servi que par soi-même

C'est en tout cas ce que chaque employé d'un service de support informatique vous dira. Traiter les demandes d'utilisateurs ayant perdu leur mot de passe, ou tout simplement voulant changer leur mot de passe, est une activité sans beaucoup de valeur ajoutée.

Pour tenter de réduire le temps investi sur ce sujet, des logiciels dits de "Self Service" sont arrivés. Le principe est simple : si l'utilisateur perd son mot de passe, il se rend sur l'application et demande un nouveau mot de passe, tout seul, comme un grand.

Génial, où est-ce qu'on peut l'acheter ?

Le projet LDAP Tool Box fournit une petite interface Web remplissant ce rôle, elle est nommée avec grande originalité Self Service Password (SSP pour les intimes).

SSP propose les fonctions suivantes :

  • Changement du mot de passe dans un annuaire LDAP
  • Support de Active Directory
  • Support de Samba
  • Politique des mots de passe locale (taille, types de caractères, etc.)
  • Réinitialisation par questions/réponses
  • Réinitialisation par challenge mail

Grâce à de nombreuses contributions, l'interface est disponible en français, anglais, allemand, espagnol, brésilien et hollandais.

La version 0.5 est sortie ce week-end (pas de repos pour les libristes), elle est disponible en archive simple, en paquet RPM ou paquet Debian. N'attendez plus pour l'essayer !

vendredi, mars 4 2011

Sujet du jour : comment instaurer une politique des mots de passe commune à OpenLDAP et Samba ?

LDAP.png

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 :

  • Mot de passe valide :
# 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.

samedi, novembre 14 2009

Le projet LDAP Tool Box

ltb-logo.png

J'ai présenté il y a quelques semaines sur le site LinuxFr le projet LDAP Tool Box : Article LinuxFR

Ce projet est une compilation des différents scripts et programmes que nous utilisons dans les projets de gestion d'identités basés sur des logiciels libres. On retrouve en particulier :

  • Scripts de supervision Nagios et Cacti
  • Script de lancement et d'arrêt d'OpenLDAP
  • Interface de changement de mot de passe
  • Script d'alerte d'expiration des comptes
  • RPMs OpenLDAP pour RHEL5
  • Convertisseur de CSV ou LDIF en LDIF

Depuis cet article, de nombreux messages de soutien sont arrivés, et également des contributions qui ont permis de sortir de nouvelles versions des différents programmes. En particulier ont été publiés les RPMs pour OpenLDAP 2.4.19 et une version 0.2 de l'interface de changement de mot de passe.

Merci donc aux développeurs, aux utilisateurs et contributeurs du projet LTB.

Site du projet LTB

mercredi, juillet 22 2009

Sortie de LemonLDAP::NG 0.9.4

Début juillet est sortie la dernière version de LemonLDAP::NG, un logiciel libre de WebSSO et gestion des accès. Les nouveautés de la version 0.9.4 ont été présentées lors des 10èmes RMLL à Nantes, lors de la journée consacrée à la gestion des identités. Pour ceux qui n'ont pas eu le privilège d'assister à cette conférence, cet article rappelle les principes de fonctionnement du produit et liste les nouvelles fonctionnalités. Les plus intéressés trouveront également dans le Linux Mag de cet été une bonne introduction au logiciel.

logo_lemonldap-ng.png

LemonLDAP::NG fournit des mécanismes d'authentification unique à l'intérieur d'Apache en utilisant les capacités de mod_perl à traiter les requêtes HTTP depuis leur arrivée, leur traitement jusqu'au renvoi de la réponse au client. La gestion de la session repose sur un cookie échangé entre les clients et les agents LemonLDAP::NG (Handlers) ne contenant qu'une clé permettant d'accéder aux données de session qui sont partagées entre les agents.

Ces données de sessions sont collectées lors de la phase d'authentification et permettent d'établir des règles d'accès complexes, avec notamment la possibilité de recourir aux expressions régulières, ou d'appeler des fonctions qui contrôlent par exemple les jours et horaires d'accès.

Le portail d'authentification présente à l'utilisateur connecté la liste des applications qui lui sont autorisées ainsi qu'un formulaire de changement de mot de passe.

Pour les administrateurs, une interface graphique permet de modifier les principaux paramètres de configuration ainsi que de naviguer dans les sessions ouvertes par les utilisateurs.

La version 0.9.4 apporte les nouveautés suivantes :

  • Utilisation de LDAP pour la configuration et les sessions : il était déjà possible d'utiliser un annuaire LDAP pour l'authentification, l'obtention des informations de session et pour le changement de mot de passe. À présent la configuration et les sessions peuvent être stockées dans l'annuaire, ce qui simplifie la configuration en mode réparti ou en cluster. Cela ne nécessite pas d'extension de schéma.
  • Accès SOAP : les fonctions SOAP ont été entièrement réécrites, avec pour conséquence la perte de compatibilité avec les configurations SOAP des versions précédentes. Toutefois l'objectif étant la simplification de l'architecture, c'est le portail qui devient un point d'accès SOAP, rendant obsolète l'écriture de scripts CGI dédiés. La protection du point d'accès SOAP est gérée directement dans l'hôte virtuel du portail au niveau de la configuration Apache.
  • Notifications : des notifications peuvent être envoyées aux utilisateurs qui devront les valider pour poursuivre leur accès au portail. Cela permet en particulier d'avertir un utilisateur de l'ouverture d'un accès à une application.
  • Fonctions dans les règles d'accès : des nouvelles fonctions permettent de configurer des accès sur une période (date de début, date de fin) ou sur des jours et horaires (par exemple du lundi au vendredi de 8h à 19h).
  • Adresse du portail dynamique : cela permet de présenter un portail différent selon l'application protégée d'origine ou la provenance des utilisateurs. Il est alors possible d'héberger plusieurs WebSSO avec une seule instance d'Apache.
  • Séparation claire des modules d'authentification, de données utilisateur et de mots de passe : il est possible alors de choisr par exemple Kerberos pour l'authentification et LDAP pour la lecture des informations utilisateur. Le module Multi permet de chaîner plusieurs méthodes.
  • Politique des mots de passe LDAP : le WebSSO gère à présent l'ensemble de la politique des mots de passe implémentée dans la plupart des annuaires LDAP. En particulier, le portail saura exiger le renouvellement du mot de passe lorsque celui aura été réinitialisé par un administrateur. Lors du changement de mot de passe, des messages d'erreurs explicites sont retournés aux utilisateurs (mot de passe trop court, historique, etc.).
  • Configuration du cross-domain : l'activation du cross-domain est simplifiée par l'ajout d'un paramètre dans le portail et dans l'agent. Le cross-domain permet d'ouvrir une session SSO sur plusieurs domaines DNS différents.
  • Validation de formulaires : cette fonctionnalité est juste apparue dans cette version et doit être utilisée avec précaution. Elle permet de poster des données sur des applications protégées, ce qui étend la compatibilité de LemonLDAP::NG avec n'importe quelle application Web.
  • Double cookie : si activée, cette fonction créée deux cookies, un pour HTTP et l'autre pour HTTPS. Ainsi un cookie dérobé en HTTP ne pourra pas servir à entrer sur des applications HTTPS.

Liens :

lundi, janvier 19 2009

Sortie de LemonLDAP::NG 0.9.3

LemonLDAP::NG est un logiciel de Web-SSO, développé par Xavier Guimard et destiné à protéger des applications Web. Pour les utilisateurs, cela permet de ne s'authentifier qu'une seule fois, et pour les administrateurs du WebSSO cela permet de contrôler de manière centralisée les droits d'accès aux applications.

logo_lemonldap-ng.png

LemonLDAP::NG est une réécriture de la version initiale LemonLDAP, qui n'est aujourd'hui plus maintenue. Eric German, leader historique de la communauté, est à présent impliqué sur un nouveau projet, LemonID, que nous vous invitons à découvrir.

Cette version est normalement la dernière avant la 1.0 qui se concentrera sur la refonte de la configuration (utilisation de XML, exhaustivité des paramètres de configuration dans la console d'administration Web, etc.). Elle apporte toutefois un lot conséquent de corrections et d'améliorations, telles qu'un menu des applications autorisées, un explorateur de session, et des paquetages pour les systèmes basés sur Debian et RedHat.

Cette version est également importante en terme de sécurité car elle corrige quelques failles de Cross Site Scripting (XSS) et ajoute un contrôle plus fort sur les URL de redirection.

LemonLDAP::NG permet de déployer trois types d'architectures de WebSSO :

  • Un système de mandataire inverse (reverse-proxy) qui concentre en un point unique le portail d'authentification et les agents de contrôles. L'utilisateur n'accède alors jamais directement aux applications mais utilise toujours le mandataire.
  • Un système de délégation, où les agents de contrôles sont déployés au plus près des applications. Dans ce cas l'utilisateur accède directement aux applications, dont les agents interagissent avec le portail d'authentification pour valider les sessions.
  • Un système mixte, mélangeant le mandataire inverse et la délégation.

Voici quelques détails supplémentaires sur les principales fonctionnalités du produit :

  • Indépendance des mécanismes d'authentification et de recherche des données de l'utilisateur : la phase d'authentification permet de valider la création de la session WebSSO, elle peut être effectuée sur un annuaire LDAP, par certificat SSL, par Liberty Alliance, par CAS, par Kerberos ou tout autre méthode d'authentification disponible dans Apache2. La phase de recherche des données correspond elle à la récupération des informations propres à l'utilisateur (nom, mail, etc.) qui serviront d'une part à valider les règles d'accès, et d'autre part à approvisionner les applications protégées. Cette phase ne peut à l'heure actuelle être opérée que sur un annuaire LDAP (l'ajout d'autres méthodes est prévu dans les futures versions).
  • Utilisation des Web-Services (SOAP) : il est possible d'activer les Web-Services pour s'authentifier (et donc créer la session SSO correspondante), consulter et modifier les sessions existantes, consulter et modifier la configuration.
  • Portail d'authentification : il permet de s'authentifier lorsque l'on est redirigé depuis des applications protégées, mais propose également un module de menu dynamique des applications (seules les applications autorisées sont affichées à l'utilisateur) et un module changement de mot de passe. L'affiche de ces modules est également dynamique, et peut permettre par exemple de ne proposer le changement de mot de passe qu'à une certain profil d'utilisateurs.
  • Interface d'administration graphique : LemonLDAP::NG fournit par défaut un Manager qui permet d'éditer à travers une page Web la configuration générale du WebSSO ainsi que les droits d'accès et les en-têtes spécifiques à chaque application protégée. Cette nouvelle version propose également un explorateur de sessions, offrant une vue hiérarchique des sessions (par identifiant ou adresse IP), et affichant le contenu de chacune d'elles. Cette interface peut être protégée directement par le WebSSO.
  • Choix des backends de session et de configuration : les sessions peuvent être stockées comme fichiers, dans une base MySQL, par SOAP ou dans memcached. La configuration peut être stockée comme fichier, dans une base MySQL ou par SOAP. Ce choix permet de mettre en place très rapidement des solution de haute-disponibilité. En cas de configuration stockée sur un système distant, un mécanisme de cache permet de limiter le transfert des données sur le réseau.
  • Agents et applications compatibles : un certain nombre d'applications sont déjà compatibles avec LemonLDAP::NG, en particulier GLPI, Sympa, Dokuwiki, ... Mais des agents sont également disponibles, en particulier une valve pour Tomcat permettant le SSO sur les application J2EE délégant leur sécurité au conteneur de servlets (par exemple le CMS Lutece, probe, etc.). De plus, toutes les applications Web utilisant des protections Apache (par exemple par htaccess) sont nativement compatibles (c'est le cas de Nagios). Enfin, la nouvelle version de LemonLDAP::NG peut à présent mettre le mot de passe de l'utilisateur en session, ce qui permet par exemple le SSO sur des applications protégées par HTTP Basic (en particulier le fameux Outlook Web Access).
  • Pages de statuts et scripts de supervision : une page de statut est à présent disponible (équivalent au mod-status d'Apache), permettant de réaliser simplement des graphiques avec des outils de supervision (un script pour MRTG est fourni dans les exemples).
  • Politique des mots de passe : LemonLDAP::NG est compatible avec la politique des mots de passe des annuaires LDAP qui suivent le draft de la RFC. C'est le cas d'OpenLDAP avec l'overlay policy. Cela permet à l'utilisateur de savoir que son compte est bloqué ou expiré, et de changer son mot de passe en respectant les critères fixés dans l'annuaire (taille minimale, présence dans l'historique, etc.)

Cette version fait donc état de la grande maturité du produit et des nombreuses fonctionnalités offertes. Toute la communauté reste à l'écoute des utilisateurs pour répondre aux questions et enrichir le logiciel selon leurs besoins. Toutes les contributions sont également les bienvenues.

Liens :

vendredi, septembre 26 2008

Sortie de Perl-LDAP 0.38

Une nouvelle version de la librairie Perl-LDAP est sortie fin septembre, essentiellement liée à des correctifs sur l'utilisation de la politique des mots de passe :

  • Utilisation d'un mauvais champ pour stocker l'erreur
  • Bug dans le décodage du contrôle
  • Possibilité d'utiliser le contrôle dans l'opération étendue modifypassword (nommée setPassword dans la librairie Perl)

Une des conséquences les plus importantes est l'utilisation de pp_error() au lieu de error() pour récupérer le message d'erreur du contrôle. Cela impose de modifier vos codes sources pour prendre en compte le renommage de la fonction. Le code de LemonLDAP::NG est bien entendu déjà corrigé sur le dépôt subversion.

Je recommande donc d'exiger au minimum la version 0.38 de Perl-LDAP si vous utilisez la politique des mots de passe.

lundi, mars 31 2008

Sortie de Perl-LDAP 0.35 et politique des mots de passe

Perl

Ce week-end une nouvelle version des bibliothèques Perl Net::LDAP est sortie en version 0.35, apportant un certain nombre d'améliorations (listées ici), dont un nouveau module dédié au contrôle LDAP Password Policy.

Rappelons que ce contrôle permet par exemple de bloquer des comptes suites à plusieurs authentifications ratées, de conserver un historique des mots de passe, d'avoir une taille minimale, de chiffrer à la volée, etc. Si vous souhaitez plus d'informations sur ce standard (qui n'en n'est pas vraiment un puisque la RFC n'est encore qu'un brouillon), vous trouverez une documentation ici.

L'installation se fait de manière très classique :

# perl Makefile.PL
# make
# make test
# make install

Ainsi, vous pouvez à présent dans vos programmes Perl récupérer les messages spécifiques de ce contrôle :

        use Net::LDAP;
        use Net::LDAP::Control::PasswordPolicy;
        use Net::LDAP::Constant qw( LDAP_CONTROL_PASSWORDPOLICY );

        $ldap = Net::LDAP->new( "ldap.example.com" );

        $pp = Net::LDAP::Control::PasswordPolicy->new;

        $mesg = $ldap->bind( "cn=Bob Smith,dc=example,dc=com",
                             password => "secret",
                             control => [ $pp ] );

        # Get password policy reponse
        my($resp)  = $mesg->control( LDAP_CONTROL_PASSWORDPOLICY );

        if (defined($resp)) {
          my $v = $resp->error;
          print "Password policy error $v\n" if defined $v;
          $v = $resp->time_before_expiration;
          print "Password expires in $v second(s)\n" if defined $v;
        }