378 lines
14 KiB
HTML
378 lines
14 KiB
HTML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
|
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr">
|
|
<head>
|
|
<meta name="generator" content=
|
|
"HTML Tidy for Linux/x86 (vers 1 September 2005), see www.w3.org" />
|
|
|
|
<title>FAQ LEMONLDAP::NG</title>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
|
|
</head>
|
|
|
|
<body>
|
|
<div class="main-content">
|
|
<h2 class="heading-1"><span id=
|
|
"HLemonLDAP3A3ANG">LemonLDAP::NG</span></h2>
|
|
|
|
<p class="paragraph"></p>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
|
|
<i class="italic">(Authentication, Authorization and Accounting)</i> des
|
|
espaces web.
|
|
|
|
<p class="paragraph"></p>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.
|
|
|
|
<p class="paragraph"></p>
|
|
|
|
<ul>
|
|
<li>
|
|
<a href=
|
|
"#HMC3A9canismesd27authentification2Cd27autorisationetdetraC3A7abilitC3A9">
|
|
Mécanismes d'authentification, d'autorisation et de
|
|
traçabilité</a>
|
|
|
|
<ul>
|
|
<li><a href="#HAuthentification">Authentification</a></li>
|
|
|
|
<li>
|
|
<a href="#HAutorisation">Autorisation</a>
|
|
|
|
<ul>
|
|
<li><a href="#HPerformances">Performances</a></li>
|
|
</ul>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="#HTraC3A7abilitC3A9">Traçabilité</a>
|
|
|
|
<ul>
|
|
<li><a href="#HTracerlesaccC3A8sauportail">Tracer les
|
|
accès au portail</a></li>
|
|
|
|
<li><a href="#HTracerlesaccC3A8sauxapplications">Tracer les
|
|
accès aux applications</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
|
|
<li><a href="#HInstallation">Installation</a></li>
|
|
|
|
<li><a href="#HSystC3A8medestockagedessessions">Système de
|
|
stockage des sessions</a></li>
|
|
|
|
<li><a href="#HAuteur">Auteur</a></li>
|
|
|
|
<li><a href="#HCopyrightetlicense">Copyright et license</a></li>
|
|
</ul>
|
|
|
|
<h3 class="heading-1-1"><span id=
|
|
"HMC3A9canismesd27authentification2Cd27autorisationetdetraC3A7abilitC3A9">Mécanismes
|
|
d'authentification, d'autorisation et de
|
|
traçabilité</span></h3>
|
|
|
|
<p class="paragraph"></p>Tous les paramètres abordés dans ce
|
|
chapître sont accessibles via l'interface d'administration (voir la
|
|
<span class="wikiexternallink"><a href=
|
|
"http://lemonldap.objectweb.org/NG/ManagerDemo/fr/">démonstration</a></span>).
|
|
|
|
<h4 class="heading-1-1-1"><span id=
|
|
"HAuthentification">Authentification</span></h4>
|
|
|
|
<p class="paragraph"></p>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)).
|
|
|
|
<p class="paragraph"></p>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.
|
|
|
|
<p class="paragraph"></p>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.
|
|
|
|
<h4 class="heading-1-1-1"><span id=
|
|
"HAutorisation">Autorisation</span></h4>
|
|
|
|
<p class="paragraph"></p>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:
|
|
|
|
<ul class="star">
|
|
<li>choisir les attributs LDAP que vous souhaitez utiliser pour les
|
|
autorisations et la traçabilité,</li>
|
|
|
|
<li>créer d'éventuelles expressions Perl pour
|
|
définir des groupes d'utilisateur (en utilisant les attributs
|
|
LDAP),</li>
|
|
|
|
<li>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.</li>
|
|
</ul>Exemple (Voir Lemonldap::NG::Manager::Conf(3) pour comprendre le
|
|
stockage de la configuration) :
|
|
|
|
<ul class="star">
|
|
<li>Variables exportées (attributs LDAP):</li>
|
|
</ul>
|
|
|
|
<div class="code">
|
|
<pre>
|
|
# Nom-choisi => attribut LDAP
|
|
cn => cn
|
|
departmentUID => departmentUID
|
|
login => uid
|
|
</pre>
|
|
</div>
|
|
|
|
<ul class="star">
|
|
<li>Groupes d'utilisateurs :</li>
|
|
</ul>
|
|
|
|
<div class="code">
|
|
<pre>
|
|
# Nom-choisi => définition du groupe
|
|
group1 => { $departmentUID eq <span class=
|
|
"java-quote">"unit1"</span> or $login = <span class=
|
|
"java-quote">"user1"</span> }
|
|
</pre>
|
|
</div>
|
|
|
|
<ul class="star">
|
|
<li>Protection d'un site web: chaque VirtualHost (ou hôte
|
|
réel) Apache dispose de ses propres règles d'accès:
|
|
|
|
<ul class="star">
|
|
<li>www1.domain.com :</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<div class="code">
|
|
<pre>
|
|
^/<span class="java-keyword">protected</span>/.*$ => $groups =~ /bgroup1b/
|
|
<span class="java-keyword">default</span> => accept
|
|
</pre>
|
|
</div>
|
|
|
|
<ul class="star">
|
|
<li>www2.domain.com :</li>
|
|
</ul>
|
|
|
|
<div class="code">
|
|
<pre>
|
|
^/site/.*$ => $uid eq <span class=
|
|
"java-quote">"admin"</span> or $groups =~ /bgroup2b/
|
|
^/(js|css) => accept
|
|
<span class="java-keyword">default</span> => deny
|
|
</pre>
|
|
</div>
|
|
|
|
<h5 class="heading-1-1-1-1"><span id=
|
|
"HPerformances">Performances</span></h5>
|
|
|
|
<p class="paragraph"></p>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 "$".
|
|
|
|
<p class="paragraph"></p>Vous devez toutefois bien choisir vos
|
|
expressions:
|
|
|
|
<ul class="star">
|
|
<li>les groupes et les macros ne sont évaluées que lorsque
|
|
l'utilisateur est renvoyé vers le portail,</li>
|
|
|
|
<li>les règles d'accès et les en-têtes
|
|
exportés sont évalués à chaque requête
|
|
sur un site protégé.</li>
|
|
</ul>Il est donc recommandé d'utiliser le mécanisme des
|
|
groupes pour éviter de calculer de longues expressions à
|
|
chaque requête:
|
|
|
|
<div class="code">
|
|
<pre>
|
|
^/<span class=
|
|
"java-keyword">protected</span>/.*$ => $groups =~ /bgroup1b/
|
|
</pre>
|
|
</div>
|
|
|
|
<p class="paragraph"></p>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 {} :
|
|
|
|
<div class="code">
|
|
<pre>
|
|
group1 => (|(uid=xavier.guimard)(ou=unit1))
|
|
group1 => <uid eq <span class=
|
|
"java-quote">"xavier.guimard"</span> or $ou eq <span class=
|
|
"java-quote">"unit1"</span>>
|
|
group1 => (|(uid=xavier.guimard)<ou eq <span class=
|
|
"java-quote">"unit1"</span>>)
|
|
</pre>
|
|
</div>
|
|
|
|
<p class="paragraph"></p>Pour limiter les requêtes LDAP, il est
|
|
conseillé d'utiliser les expressions Perl. Ainsi seuls 2
|
|
sollicitations de l'annuaire sont nécessaires.
|
|
|
|
<h4 class="heading-1-1-1"><span id=
|
|
"HTraC3A7abilitC3A9">Traçabilité</span></h4>
|
|
|
|
<h5 class="heading-1-1-1-1"><span id="HTracerlesaccC3A8sauportail">Tracer
|
|
les accès au portail</span></h5>
|
|
|
|
<p class="paragraph"></p>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".
|
|
|
|
<h5 class="heading-1-1-1-1"><span id=
|
|
"HTracerlesaccC3A8sauxapplications">Tracer les accès aux
|
|
applications</span></h5>
|
|
|
|
<p class="paragraph"></p>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).
|
|
|
|
<p class="paragraph"></p>La trace réelle doit être
|
|
effectuée par l'application seule capable d'interpréter le
|
|
résultat des transactions.
|
|
|
|
<p class="paragraph"></p>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 :
|
|
|
|
<ul class="star">
|
|
<li>le nom d'en-tête,</li>
|
|
|
|
<li>une expression Perl utilisant les données de l'utilisateur
|
|
(attributs, macros et groupes).</li>
|
|
</ul>Exemple:
|
|
|
|
<ul class="star">
|
|
<li>www1.domain.com :</li>
|
|
</ul>
|
|
|
|
<div class="code">
|
|
<pre>
|
|
Auth-User => $uid
|
|
Unit => $ou
|
|
</pre>
|
|
</div>
|
|
|
|
<ul class="star">
|
|
<li>www2.domain.com :</li>
|
|
</ul>
|
|
|
|
<div class="code">
|
|
<pre>
|
|
Authorization => <span class=
|
|
"java-quote">"Basic "</span>.encode_base64($employeeNumber.<span class=
|
|
"java-quote">":dummy"</span>)
|
|
Remote-IP => $ip
|
|
</pre>
|
|
</div>
|
|
|
|
<h3 class="heading-1-1"><span id="HInstallation">Installation</span></h3>
|
|
|
|
<p class="paragraph"></p>Attention :
|
|
|
|
<ul class="star">
|
|
<li>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.</li>
|
|
|
|
<li>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.</li>
|
|
|
|
<li>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.</li>
|
|
</ul>Voir <span class="wikilink"><a href=
|
|
"/xwiki/bin/view/NG/DocInstall">installation manuel</a></span> pour la
|
|
documentation d'installation.
|
|
|
|
<h3 class="heading-1-1"><span id=
|
|
"HSystC3A8medestockagedessessions">Système de stockage des
|
|
sessions</span></h3>
|
|
|
|
<p class="paragraph"></p>Lemonldap::NG utilise 3 niveaux de cache pour les
|
|
données des utilisateurs authentifiés :
|
|
|
|
<ul class="star">
|
|
<li>un module Apache::Session:: <strong class="strong">au choix
|
|
utilisé par le portail lemonldap::NG::Portal pour stocker les
|
|
données après authentification,</strong></li>
|
|
|
|
<li>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,</li>
|
|
|
|
<li>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).</li>
|
|
</ul>Ainsi, le nombre de requêtes au cache principal est
|
|
limité à 1 par utilisateur actif toutes les 10 minutes.
|
|
|
|
<p class="paragraph"></p>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.
|
|
|
|
<h3 class="heading-1-1"><span id="HAuteur">Auteur</span></h3>
|
|
|
|
<p class="paragraph"></p>Xavier Guimard, <x.guimard@free.fr>
|
|
|
|
<h3 class="heading-1-1"><span id="HCopyrightetlicense">Copyright et
|
|
license</span></h3>
|
|
|
|
<p class="paragraph"></p>Copyright © 2005-2007 par Xavier Guimard
|
|
<x.guimard@free.fr>
|
|
|
|
<p class="paragraph"></p>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.
|
|
</div>
|
|
</body>
|
|
</html>
|