LemonLDAP::NG : Plus qu'un simple SSO
Contents
Software version | 1.2.3 |
---|---|
Operating System | Debian 7 |
Website | LemonLDAP::NG Website |
Last Update | 16/03/2013 |
Others | Apache 2.2 |
LemonLDAP
1 Introduction
LemonLDAP::NG a été créée par Éric German pour le ministère des finances français. Initialement baptisé levonLDAP, en hommage à Novell, il était conçu pour être compatible avec un système d'authentification unique (SSO) de Novell. Il est basé sur l'ouvrage "Writing Apache Modules with Perl and C The Apache API and mod_perl" de Doug MacEachern et Lincoln Stein (O'reilly)
Il s'est nommé LemonLDAP::NG par la suite. À partir de 2004, le projet a été progressivement repris par la Gendarmerie nationale française pour devenir en 2005 LemonLDAP::NG. Les deux projets ont coexisté quelque temps avant l'abandon définitif du support de LemonLDAP.
C'est du SSO. Couple identifiant/mot de passse unique. Le SSSO ne fait pas de de contrôle d'accès.
2 Modes SSO
- SSO par agent : installé sur le post client. Pas de notion de sécurité
- SSO par délégation : L'utilisateur a juste de besoin de son navigateur web. C'est l'application serveur qui pointe vers le portail d'authentification
- Mandataire inverse : On passe par un reverse proxy qui va faire le travail d'authentification
3 Les requêtes HTTP
Avant de partir bille ne tête sur LemonLDAP, il faut bien comprendre comment fonctionne le protocole HTTP. Essayons de récupérer un site :
Le code retour est 200, tout va bien. Vous pouvez consulter la liste des codes de retour ici : http://fr.wikipedia.org/wiki/Liste_des_codes_HTTP
4 Cookies
Le probtocole HTTP est sans état. Pour maintenir une connexion persistante, il va falloir utiliser le protocole HTTP 1.1. Nous allons également utiliser des cookies pour stocker les sessions. Sur le serveur, l'ID de session utilisateur est stocké. Un cookie fait 4096 octets maximum.
Il existe plusieurs type de cookies :
- Les cookies de session : Le cookie restera actif un temps définit ou jusqu'à la fermeture du navigateur
- Les cookies persitants : Ils permettent d'être actif en permanance
Un cookie e fait comme ceci :
- Une requête simple
- réponse du serveur avec un champ d'en-tête "Set-cookie"
- requpete du client avec un champ d'en-tête "Cookie"
Pour rappel, les cookies ne sont valides que sur un domaine DNS unique.
5 LemonLDAP
5.1 La composition
LemonLDAP::NG utilise 3 composants :
- Le portail : interface d'authentification, menu d'applications, changement de mots de passe
- Le Handler : module Apache qui contrôles les accès aux applications web
- Le manager : la partie graphique pour configurer LemonLDAP
5.2 La communication
L'avantage par rapport à CAS est que le client ne repasse pas par LemonLDAP::NG a chaque changement de service web.
6 Les phases d'authentification
- Lorsqu'un utilisateur essaye d'accéder à une application protégée, sa requête est interceptées par le Handler
- Si les cookies SSO ne sont pas détectés, le Handler redirige l'utilsateur vers le portail
- L'utilisateur s'authentifie sur le portail
- Le portail vérifie son authentification
- Si c'est validé, le portail récupère les informations de l'utilsateur
- Le portail créer une session où il va stocker les informations de l'utilisateur
- Le portail récupère une clé de session
- Le portail créer des cookies SSO avec session clé/valeur
- L'utilisateur est redirigé sur une application protégée avec son nouveau cookie
- Le Handler récupère le cookie et la session
- Le Handler enregistre les données utilisateur dans son cache
- Le Handler vérifie les droits d'accès et envoie les entêtes aux applications protégées
- Les applications protégées envoient une réponse au Handler
- Le Handler envoie une réponse à l'utilisateur
6.1 Les différentes bases
Plusieurs bases sont utilisées :
- Authentification : comment valider les données d'authentification
- Utilisateurs : les données utilisateurs
- Mot de passe : où changer le mot de passe utilisateur
- Fournisseur : comment fournir l’identité à un service externe
On peut par exemple utiliser du Kerberos avec du LDAP.
Les bases interne :
- Sessions : stockage des sessions côté serveur
- Configuration ! stockage de la configuration (versionnée)
- Les notifications
6.2 Les méthodes d'authentification
- LDAP
- Base de données
- SSL X509
- Apache modules (Kerberos, OTP...)
- SAML 2.0
- OpenID
- CAS
- Yubikey
- Radius
7 Stockage des sessions
LemonLDAP::NG utilise 3 niveaux de cache :
- Apache::Session::* : stockage final des des sessions
- Cache:Cache* : permet au Handler de partager les données entre les threads et procesus Apache
- Les variables interne à LemonLDAP::NG::Handler : si le même user utilise de nouveau un même thread ou processus.
8 Installation
On passe enfin à la partie pratique ! Soit vous pouvez utiliser la version disponible via les repository officiels, sinon vous pouvez ajouter le repository de LemonLDAP::NG, c'est ce que nous allons faire ici :
/etc/apt/sources.list.d/lemonldap-ng.list |
# LemonLDAP::NG repository deb http://lemonldap-ng.org/deb squeeze main deb-src http://lemonldap-ng.org/deb squeeze main |
Puis on update :
aptitude |
aptitude install lemonldap-ng |
On va changer la configuration par défaut qui est example.com :
sed -i 's/example\.com/deimos.fr/g' /etc/lemonldap-ng/* /var/lib/lemonldap-ng/conf/lmConf-1 /var/lib/lemonldap-ng/test/index.pl |
Il ne faudra ensuite plus toucher à ces fichiers de configuration à la main !
On va activer les sites et le module Perl pour Apache :
a2ensite handler-apache2.conf a2ensite portal-apache2.conf a2ensite manager-apache2.conf a2ensite test-apache2.conf a2enmod perl |
Puis on va redémarrer Apache :
apache2ctl |
apache2ctl restart |
9 Configuration
9.1 Manager
Pour que le manager fonctionne :
echo |
echo "127.0.0.1 reload.example.com" >> /etc/hosts |
9.2 Pour le DNS
Pour que la résolution DNS se fasse correctement :
cat |
cat /etc/lemonldap-ng/for_etc_hosts >> /etc/hosts |
9.3 Application de test
Il existe test1.example.com et test2.example.com pour tester vos sites avec utilisateur et mot de passe 'dwho' : http://test1.example.com
Les autres comptes admin qui existent sont :
- rtyler/rtyler
- msmith/msmith
- dwho/dwho
Cette page va vous permettre de voir les informations intéressantes qui vont être échangées avec LemonLDAP::NG. C'est utile pour débugger en plus des logs d'Apache.
9.4 La protection
C'est dans le fichier /etc/lemonldap-ng/lemonldap-ng.ini que nous allons pouvoir configurer qui à accès au manager !
Par défaut, la protection est à Manager, ce qui est bien. Seuls les personnes autorisées peuvent s'y connecter (VirtualHost). Il est possible d'utiliser rules pour spécifier quelque chose de particulier (un uid par exemple).
Authenicate permet à n'importe quel utilisateur qui se connecte ai accès au manager. Et la dernière option qui est none est fortement déconseillée puisqu'elle permet à n'importe qui d'y avoir accès.
9.5 Les macros
Les macros permettent de créer des variables dans LemonLDAP. Par exemple :
$fullname => $givenname . '' . $surname
On pourra ensuite réutiiser $fullname.
9.6 Les sessions
Par défaut, toutes les 10 min (via cron) il y a un check des sessions qui doivent être purgées : /etc/cron.d/liblemonldap-ng-portal-perl.
9.7 Les headers HTTP
9.8 Script parameters
On peut modifier des GET en POST par exemple.
9.9 Les notificatons
Elle permettent de faire valider des informations aux utilisateurs et celles ci sont conservées dans les sessions persistantes.
On peut faire par exemple un disclamer.
10 CAS
LemonLDAP::NG sait gérer CAS en tant que client ou serveur. CAS ne fait que des redirections URL, avec la possibilité de faire du ticket proxy.
10.1 Serveur
Lorsqu'on est serveur CAS, il faut activer le rewrite rules :
a2enmod rewrite /etc/init.d/apache2 restart |
10.2 Client
aptitude |
aptitude install libauthcas-perl |
11 SAML
Voici quelques mots à comprendre :
- IDP : Identity Provider
- CoT : Cercle de confiance
- InterCoT : Cercle de confiance entre IDP
- AA : Attribute Authority
- Proxy IDP : proxy pour IDP afin de transférer des demandes d'identitié
- SP : Service Provider
Pour unstaller LASSO (SAML), il faut installer ceci :
aptitude |
aptitude install liblasso-perl |