LemonLDAP::NG
Lemonldap::NG est un Web-SSO modulaire
basé sur les modules Apache::Session. Il simplifie la construction
d'une aire protégée en minimisant les impacts sur les
applications. Il gère à la fois les authentifications et les
autorisations et fournit des en-têtes HTTP pour la
traçabilité. On obtient ainsi une protection AAA complete
(Authentication, Authorization and Accounting) des
espaces web.
Lemonldap::NG est une réécriture
complète de Lemonldap. Tous les éléments
nécessaires à son exploitation et son administration sont
fournis dans le package. En revanche les composants
développés pour Lemonldap ne sont pas compatibles avec
Lemonldap::NG.
Mécanismes
d'authentification, d'autorisation et de
traçabilité
Tous les paramètres abordés dans ce
chapître sont accessibles via l'interface d'administration (voir la
démonstration).
Authentification
Si un utilisateur n'est pas encore
authentifié et tente de se connecter à une aire
protégée par un agent Lemonldap::NG, il est redirigé
vers le portail. Celui-ci authentifie l'utilisateur par défaut par
une connexion LDAP, mais vous pouvez également utiliser un autre
schéma tel les certificats x509 (voir
Lemonldap::NG::Portal::AuthSSL(3)).
Lemonldap::NG utilise les cookies de session
générés par le module Apache::Session soit aussi
sécurisé que n'importe quelle système basé sur
des cookies aléatoires de 128 bits. Il est recommandé
d'activer l'option "cookie sécurisé" pour éviter les
vols de session.
Par défaut, une session reste 10 minutes
dans le magasin local du serveur Apache, donc dans le pire des cas, un
utilisateur conserve son autorisation au plus 10 minutes après
avoir perdu ses droits.
Autorisation
Les autorisations sont controlées
seulement par les agents protégeant les applications. En effet, le
portail ne peut connaître à l'avance les applications sur
lesquels l'utilisateur se connectera. En configurant votre Web-SSO, vous
devez:
- choisir les attributs LDAP que vous souhaitez utiliser pour les
autorisations et la traçabilité,
- créer d'éventuelles expressions Perl pour
définir des groupes d'utilisateur (en utilisant les attributs
LDAP),
- créer des règles d'accès associant des
expressions régulières triant les URL à des
expressions Perl calculant le droit d'accès correspondant.
Exemple (Voir Lemonldap::NG::Manager::Conf(3) pour comprendre le
stockage de la configuration) :
- Variables exportées (attributs LDAP):
# Nom-choisi => attribut LDAP
cn => cn
departmentUID => departmentUID
login => uid
# Nom-choisi => définition du groupe
group1 => { $departmentUID eq "unit1" or $login = "user1" }
- Protection d'un site web: chaque VirtualHost (ou hôte
réel) Apache dispose de ses propres règles d'accès:
^/protected/.*$ => $groups =~ /bgroup1b/
default => accept
^/site/.*$ => $uid eq "admin" or $groups =~ /bgroup2b/
^/(js|css) => accept
default => deny
Performances
Vous pouvez utiliser des expressions Perl aussi
complexe que nécessaire et vous pouvez utiliser tous les attibuts
LDAP (et créer vos propres attributs additionnels avec le
mécanisme des macros) dans les définitions de groupes, les
règles d'accès et les en-têtes HTTP
personnalisés: vous devez seulement utiliser le nom choisi
précédé d'un "$".
Vous devez toutefois bien choisir vos
expressions:
- les groupes et les macros ne sont évaluées que lorsque
l'utilisateur est renvoyé vers le portail,
- les règles d'accès et les en-têtes
exportés sont évalués à chaque requête
sur un site protégé.
Il est donc recommandé d'utiliser le mécanisme des
groupes pour éviter de calculer de longues expressions à
chaque requête:
^/protected/.*$ => $groups =~ /bgroup1b/
Dans la définition des groupes, vous
pouvez au choix utiliser des filtres LDAP ou des expressions Perl ou
encore mixer les deux. Les expressions Perl sont encadrées par {} :
group1 => (|(uid=xavier.guimard)(ou=unit1))
group1 => <uid eq "xavier.guimard" or $ou eq "unit1">
group1 => (|(uid=xavier.guimard)<ou eq "unit1">)
Pour limiter les requêtes LDAP, il est
conseillé d'utiliser les expressions Perl. Ainsi seuls 2
sollicitations de l'annuaire sont nécessaires.
Traçabilité
Tracer
les accès au portail
Lemonldap::NG::Portal n'enregistre pas les
événements de connexion par défaut, mais il est
très facile de surcharger la méthode "log".
Tracer les accès aux
applications
Comme un Web-SSO ne peut interpréter le
contenu des requêtes HTTP transmise aux applications
protégées, il ne peut enregistrer au mieux que les URL. Et
comme Apache le fait parfaitement, Lemonldap::NG::Handler(3) lui fournit
le nom à enregistrer dans les journaux. Le paramètre
optionnel "whatToTrace" indique la variable à utiliser ($uid par
défaut).
La trace réelle doit être
effectuée par l'application seule capable d'interpréter le
résultat des transactions.
Lemonldap::NG peut exporter des en-têtes
HTTP aussi bien en utilisant Apache en reverse-proxy qu'en
protégent directement les applications. Par défaut, le champ
Auth-User est utilisé mais vous pouvez choisir les en-têtes
que vous transmettez à chaque application séparemment. Les
expressions définissant les en-têtes associent :
- le nom d'en-tête,
- une expression Perl utilisant les données de l'utilisateur
(attributs, macros et groupes).
Exemple:
Auth-User => $uid
Unit => $ou
Authorization => "Basic ".encode_base64($employeeNumber.":dummy")
Remote-IP => $ip
Installation
Attention :
- Lemonldap::NG est un projet différent de Lemonldap et
contient tous les éléments nécessaires à son
utilisation et son administration. Ainsi les logiciels tel le module
webmin de Lemonldap ne fonctionnent pas avec Lemonldap::NG.
- L'agent de protection Apache ("handler") fonctionne à la fois
avec les versions 1.3 et 2.x d'Apache, c'est à dire avec les
versions 1 et 2 de mod_perl (mais pas avec mod_perl 1.99). Le portail et
le l'interface d'administration ("manager") sont de simples CGI et
peuvent donc fonctionner sur n'importe quel serveur compatible.
- La configuration de Lemonldap::NG ne doit être
éditée qu'avec l'interface d'administration à oins
que vous ne sachiez exactement ce que vous faites. Les paramètres
présentés dans ce document sont tous accessibles dans
l'arbre de configuration.
Voir
installation manuel pour la
documentation d'installation.
Système de stockage des
sessions
Lemonldap::NG utilise 3 niveaux de cache pour les
données des utilisateurs authentifiés :
- un module Apache::Session::* au choix utilisé par le portail
lemonldap::NG::Portal pour stocker les données après
authentification,
- un module Cache::Cache* au choix utilisé par l'agent
Lemonldap::NG::Handler pour partager les données entre les
threads et les processus d'Apache et bien sur entre les hôtes
virtuels hébergés sur le même serveur,
- les variables internes à l'agent Lemonldap::NG::Handler : si
le même utilisateur utilise de nouveau le même thread ou
processus, aucune requête n'est nécessaire pour calculer le
droit d'accès. Ceci est particulièrement
intéressant avec le système de connexions persistantes du
protocole HTTP/1.1 (Keep-Alive).
Ainsi, le nombre de requêtes au cache principal est
limité à 1 par utilisateur actif toutes les 10 minutes.
Lemonldap::NG est très rapide, mais vous
pouvez encore améliorer les performances en utilisnt un module
Cache::Cache ne nécessitant pas d'accès au disque.
Auteur
Xavier Guimard, <x.guimard@free.fr>
Copyright et
license
Copyright © 2005-2007 par Xavier Guimard
<x.guimard@free.fr>
Ce logiciel est libre, vous pouvez le
redistribuer et/ou le modifier sous les mêmes termes que Perl
lui-même en version 5.8.4 ou à votre guise en version Perl 5
supérieure.