SourceForge.net Logo

lemonLDAP

Le site de sourceforge

Le projet lemonldap

lemonLDAP

**Toujours chercher le problème a la source...
** Toujours aller chercher les infos à la source...
** La source, c'est la connaissance.
** Use your brain..





Responsable du projet: eric GERMAN germanlinux@yahoo.fr

Bienvenue sur le site du projet lemonLDAP :   Reverse-proxy d'authentification LDAP.

Lemonldap est un système SSO sous GPL utilisé par des grands ministères comme le MINEFI , La Défense , La Justice et des organismes comme la RATP.

Principes : Le reverse-proxy lemonLDAP est un service réseau qui est un point d'entrée unique de toutes les requêtes HTTP des différentes applications web mises à disposition et qui en relation avec un serveur LDAP met en place un mécanisme unique d'authentification des utilisateurs et de contrôle d'accès à ces applications.

Après authentification de l'utilisateur en HTTPS auprès de l'annuaire LDAP, le reverse-proxy met en cache des attributs LDAP de l'utilisateur afin de contrôler l'accès de l'utilisateur aux différentes applications web .

Ces applications web sont dénommées  ressources protégées. Le dialogue entre le reverse-proxy et les applications est réalisé par le biais d'un entête (HEADER) AUTHORIZATION. le header  AUTHORIZATION est rajouté à chaque requête et il contient  le DN (distinguished name) de l'utilisateur suivi du profil applicatif .


Architecture.





Le "reverse-proxy" lemonLDAP n'est pas un logiciel en tant que tel mais plutôt la combinaison des composants bien connus  : Apache, mod_perl,mod_ssl,MySQL,webmin et les Net::LDAP API de graham Barr

La clé de voute du système est le serveur web apache , compilé et configuré de manière optimisée.
Autour de ce serveur on trouvera un handler apache par ressource à protéger . Un virtual host pourra être assigné à la ressource pour encore plus cloisonner les applications. Deux CGI réalisent l'authentification et enfin une interface sous webmin  administre le système global. L'ensemble du système ou "boitier" fonctionne sous GNU/Linux.

Lemonldap n'est qu'une configuration du serveur APACHE et rien d'autre. Il est donc possible d'utiliser tous les composants , outils ou plug-in du monde apache .

Modules du CPAN

Lemonldap se présente sous la forme d'une série de modules perl à télécharger sur le CPAN . Les modules sont organisés de la manière suivante.

Lemonldap (répertoire racine)

La session et les caches

La session est maintenue entre le reverse-proxy et l'utilisateur par un cookie de session qui contient un numéro de session faisant référence à un fichier stocké dans le système de fichier ou à une entrée dans une base de données ou en mémoire. Du point  de vue de mod_perl et mod_session , les informations de session ne sont qu'un hash sérialisé et stocké de manière permanente.

Apache::Session propose plusieurs méthodes pour gérer les sessions :

  1. Le mode "file"  permet de stocker les informations de session dans des fichiers du filesystem d'un boitier .
    Avantages: Le temps d'acces est faible , technique simple.
    inconvénients: Les informations de session ne sont pas partageables entres différents lemonldap (sauf avec NFS) .

  2. Le mode MySQL et memcached :
    Avantages : Les informations de session sont accessibles par  plusieurs lemonldap   (autorise  la haute disponibilité et la répartition de charge) .
    inconvénients: on se retrouve en présence d'une couche et d'un composant supplémentaire . Il faut configurer et administrer une base de données ou un serveur memcached.

3 niveaux de caches sont proposés :

L'empilement de tous ces caches permet d'obtenir des performances élevées.

La fonction Portail d'authentification.

Le boitier lemonldap fonctionne selon trois modes :

Contenu des pages d'authentification et de « menu » applicatif.
La page d'accueil est un script CGI/perl accueil.pl qui réalise les operations suivantes:

Après ces opérations  le script se termine en chargeant une page "menu" ou en chargeant la page demandée initialement.

Les CGI qui réalisent les opérations d'authentifications  et de présentation d'un menu applicatif sont disponibles sur le CPAN .

Des exemples sont proposés en fonction du mode d'authentification désiré (ldap/nt/certificat client ) .

Le menu applicatif est présenté par le script CGI/perl applications.pl

Le fichier applications.xml permet de parametrer le menu présenté à l'utilisateur. Ce fichier devient dans la version 1.0 de lemonldap le fichier principal de configuration.

On trouvera en plus dans le répertoire portail :

Les handlers

Un handler   est sollicité à chaque demande d'accès à une ressource protégée .
Il réalise les opérations suivantes:

nb : le handler peut aussi à l'occasion dérouler un scénario de connexion.

A partir de la version lemonldap 1.0 Il est possible d'utiliser mod_proxy ou mod_rewrite (ou n'importe quel module d'apache) dans la suite du traitement de l'url .

Exemple: dans httpd.conf

Avec mod_proxy

perlmodule Lemonldap::Handler
<virtualhost 10.ip.ip.ip>
ServerName ressource.appli.exemple
PerlInitHandler Lemonldap::Handler
ProxyPass / http://serveur-réel/
ProxyPassRProxyPass / http://serveur-réel/
ProxyPassReverse / http://serveur-réel/
</virtualhost>


Ou avec mod_rewrite


perlmodule Lemonldap::Handler
<virtualhost 10.ip.ip.ip>
ServerName ressource.appli.exemple
PerlInitHandler Lemonldap::Handler
RewriteRule ^/(.*)$ http://serveur-réel/$1 [P]
</virtualhost>

Et enfin avec le proxy intégré avec lemonldap

perlmodule Lemonldap::Handler
<virtualhost 10.ip.ip.ip>
ServerName ressource.appli.exemple
PerlInitHandler Lemonldap::Handler
PerlSetVar LemonldapEnableproxy 1
</virtualhost>


Installation.

a) Installation d'apache.

Si vous êtes un heureux utilisateur de la DEBIAN vous n'avez rien à faire , le serveur Apache de la DEBIAN est celui utilisé par lemonldap .

Pour les autres distributions vous devez disposer d'un serveur apache en version 1.3.nn . Lemonldap est compatible avec apache 2 mais non certifié.

Pour installer apache 1.3.n suivre ces instructions .

b) Configuration d'apache.

Le fichier de configuration   d'apache  doit etre modifié pour  :
Délivrer l'extended statut du serveur par la ligne
ExtendedStatus On


Autoriser l'execution de script CGI  dans le répertoire "portail" :
ScriptAlias /portail/ "/opt/apache/portail/"

Ou encore mieux , pour le faire tourner sous Apache::Registry

alias /portail/ "/opt/apache/portail/"

<Location /portail>
    SetHandler perl-script
    PerlHandler Apache::Registry
    Options +ExecCGI
    PerlSendHeader On
</Location>

Il est recommandé de regrouper les directives effarantes à lemoldap dans un fichier distinct lemon.conf ou lemon.cfg puis d'ajouter dans httpd.conf

include conf/lemon.conf

ou

include conf/lemon.cfg

c) Installation du système de gestion de la session.



d) Installation des pages d'authentifications.

Les fichiers du portail se découpent de la manière suivante :

Ils sont au nombre de deux : accueil.pl et applications.pl
Ils assurent respectivement la fonction d'authentification et la construction de la page "menu" des applications.

Dans la dernière version lemonldap , il est possible d'utiliser les modules 'portal' du CPAN .

Pour installer un module du CPAN :

Installez Lemonldap::Portal::Standard

Le fichier ReverseProxyConfig.pm comporte l'affectation de nombre de variables de configuration du portail.

Dans la dernière version lemonldap , il est possible d'utiliser les modules 'config' du CPAN .

Installez Lemonldap::Config::Parameters.

  Le fichier applications.xml comporte la description de l'arborescence des applications dans un format XML et tous les parametres du lemondap

  Les fichier de patron (template) ont pour extention .thtml et concernent
  la génération du HTML.

  Le fichier style.css est la feuille de style des pages HTML générées.

  Le fichier fond magellan.jpg est l'image de fond des pages HTML, il est appelé dans la feuille de style.

     Les fichiers style.css et fond magellan.jpg doivent être à la racine du serveur web. Dans le cadre d'une installation d'Apache dans le répertoire /opt/apache il s'agit donc du répertoire /opt/apache/htdocs
     Les scripts Perl accueil.pl et applications.pl ainsi que le module de configuration ReverseProxyConfig.pm doivent être placés dans un répertoire qui leur est propre. Ce répertoire peut par exemple être  /opt/apache/portail

e) Configuration du lemondap.

Il y 3 modes de configuration du lemonldap

Le mode par fichiers de paramètres (ancienne version) .

Le mode par fichier XML / cache IPC (nouvelle version).

Le mode par fichier XML / cache IPC et CENTRALISEE (nouvelle version )

f) Installation d'une nouvelle application sous le portail.

Il vous faut : une adresse IP  à affecter au boitier , Un attribut LDAP discreminant , un code application .

IPADDR=10.nn.nn.nn
NETMASK=255.255.255.0

Puis il suffit de relancer le réseau par : service network restart

<virtualhost  10.ip.ip.ip>
ServerName ressource.appli.exemple
perlmodule My::egproxy_exemple
perltranshandler My::egproxy_exemple
loglevel debug
</virtualhost>

g ) Mise en place du handler .


Il faut  maintenant mettre dans le répertoire apache/My    le handler associé au virtual host
Le handler est un package perl   (monhandler.pm)   qu'il convient de configurer .

Le handler est chargé de :

Il y a deux points importants à connaître pour configurer le handler :

Avec la nouvelle version de lemonldap , il est possible d'utiliser qu'un seul header qui gérera plusieurs applications . C 'est dynamiquement que s'appliqueront les règles de résolution . Le droit d'accès , la réécriture des URL et la confection des entêtes se feront à partir du fichier XML de configuration.

La gestion des profils .

Toutes les requêtes à destination d'une ressource protégée passent par lemonldap . Celui ci doit pouvoir déterminer si l'utilisateur est autorisé à aller sur la ressource. Pour cela le handler associé à l'application recherche dans les informations de session l'élément qui fait autorité (un attribut ldap , un groupe ..) .

Je décris ici le mode de fonctionnement le plus souple à gérer et le plus facile à mettre en place .

Au niveau du LDAP il convient d'utiliser un attribut multivalué  contenant :
monattribut: code_application;profil
exemple :   CODE1;1S
Le code application est une chaîne de caractère qui sera la clé du hash  de session , le profil sera sa valeur .
A la connexion initiale de l'utilisateur la page accueil.pl va chercher le contenu de cet attribut et va enrichir le hash de session par le couple $session{'code_application'} = "profil" .

Exemple :  $session{'CODE1'} = '1S'


Le header  ajouté sera de la forme :

Authorization :Basic dWlkPWVnZXJtYW4tY3Asb3U9cGVyc29ubmVzLG91PWRnY3Asb3U9bWVmaSxvPWdvd
XYsYz1mcjoxUw==

code avant encodage: uid=egerman-cp,ou=personnes,ou=dgcp,ou=mefi,o=gouv,c=fr:1S
code après encodage: dWlkPWVnZXJtYW4tY3Asb3U9cGVyc29ubmVzLG91PWRnY3Asb3U9bWVmaSx
vPWdvdXYsYz1mcjoxUw==

L'autre mode de gestion de rôle peut être réalisé par le rattachement des utilisateurs à des groupes LDAP .

Dans ce cas le hash de session doit contenir un booléen précisant l'appartenance au groupe (ou la liste des groupes).



Modifications des applications

Pour pouvoir fonctionner  sous le portail une application doit  savoir récuperer l'entete et le décoder

Des exemples en perl / php / java

Feuille de route