LemonLDAP::NG : Plus qu'un simple SSO

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search
LemonDAP::NG

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é

Archi simple.png[1]

  • 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

Archi portail.png[2]

  • Mandataire inverse : On passe par un reverse proxy qui va faire le travail d'authentification

Archi reverse proxy.png[3]

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 :

Command telnet
> telnet www.deimos.fr 80Trying 88.190.51.112...
Connected to shenzi.deimos.fr.
Escape character is '^]'.
GET / 
HTTP/1.1 301 Moved Permanently
Server: nginx
Content-Type: text/html; charset=UTF-8
X-Pingback: http://blog.deimos.fr/xmlrpc.php
X-Powered-By: W3 Total Cache/0.9.2.8
Location: http://localhost/
Content-Length: 0
Accept-Ranges: bytes
Date: Fri, 22 Feb 2013 18:40:10 GMT
X-Varnish: 1562646426
Age: 0
Via: 1.1 varnish
Connection: close
 
Connection closed by foreign host.

Command telnet
> telnet www.deimos.fr 80Trying 88.190.51.112...
Connected to shenzi.deimos.fr.
Escape character is '^]'.
GET / HTTP/1.0Host: www.deimos.fr 80 HTTP/1.1 200 OK
Server: nginx
Content-Type: text/html; charset=UTF-8
Vary: Accept-Encoding
X-Pingback: http://blog.deimos.fr/xmlrpc.php
X-Powered-By: W3 Total Cache/0.9.2.8
Link: <http://wp.me/2Q0VB>; rel=shortlink
Date: Fri, 22 Feb 2013 18:40:02 GMT
X-Varnish: 1562646424 1562646423
Age: 8
Via: 1.1 varnish
Connection: close
 
<!DOCTYPE html>
<html lang="fr-FR">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<title>Deimosfr Blog | Parce que la mémoire humaine ne fait pas des Go</title>
<link rel="profile" href="http://gmpg.org/xfn/11" />
<link rel="stylesheet" type="text/css" media="screen" href="http://blog.deimos.fr/wp-content/themes/yoko/style.css" />
[...]
		</script>
</body>
</html>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/
 
Page Caching using apc
Object Caching 8437/8588 objects using apc
 
 Served from: blog.deimos.fr @ 2013-02-22 19:39:54 by W3 Total Cache -->Connection closed by foreign host.

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 :

  1. Une requête simple
  2. réponse du serveur avec un champ d'en-tête "Set-cookie"
  3. 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.

Lemonldap-ng-architecture.png

6 Les phases d'authentification

Lemonldapng-sso.png[4]

  1. Lorsqu'un utilisateur essaye d'accéder à une application protégée, sa requête est interceptées par le Handler
  2. Si les cookies SSO ne sont pas détectés, le Handler redirige l'utilsateur vers le portail
  3. L'utilisateur s'authentifie sur le portail
  4. Le portail vérifie son authentification
  5. Si c'est validé, le portail récupère les informations de l'utilsateur
  6. Le portail créer une session où il va stocker les informations de l'utilisateur
  7. Le portail récupère une clé de session
  8. Le portail créer des cookies SSO avec session clé/valeur
  9. L'utilisateur est redirigé sur une application protégée avec son nouveau cookie
  10. Le Handler récupère le cookie et la session
  11. Le Handler enregistre les données utilisateur dans son cache
  12. Le Handler vérifie les droits d'accès et envoie les entêtes aux applications protégées
  13. Les applications protégées envoient une réponse au Handler
  14. 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
  • Twitter
  • 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 :

Configuration File /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 :

Command aptitude
aptitude install lemonldap-ng

On va changer la configuration par défaut qui est example.com :

Command
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 :

Command
a2ensite handler-apache2.conf
a2ensite portal-apache2.conf
a2ensite manager-apache2.conf
a2ensite test-apache2.conf
a2enmod perl

Puis on va redémarrer Apache :

Command apache2ctl
apache2ctl restart

9 Configuration

9.1 Manager

Pour que le manager fonctionne :

Command 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 :

Command 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 !

Configuration File /etc/lemonldap-ng/lemonldap-ng.ini
[...]
# Manager protection: by default, the manager is protected by a demo account.
# You can protect it :
# * by Apache itself,
# * by the parameter 'protection' which can take one of the following
# values :
#   * authenticate : all authenticated users can access
#   * manager      : manager is protected like other virtual hosts: you
#                    have to set rules in the corresponding virtual host
#   * rule: <rule> : you can set here directly the rule to apply
#   * none         : no protection
protection = 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 :

Command
a2enmod rewrite
/etc/init.d/apache2 restart

10.2 Client

Command 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 :

Command aptitude
aptitude install liblasso-perl

12 References

  1. ^ http://www-igm.univ-mlv.fr/~dr/XPOSE2006/CLERET/techniques.html
  2. ^ http://www-igm.univ-mlv.fr/~dr/XPOSE2006/CLERET/techniques.html
  3. ^ http://www-igm.univ-mlv.fr/~dr/XPOSE2006/CLERET/techniques.html
  4. ^ http://lemonldap-ng.org/documentation/presentation