545 lines
21 KiB
HTML
545 lines
21 KiB
HTML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.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 7 December 2008), see www.w3.org" />
|
|
|
|
<title>Lemonldap::NG documentation: 1-Overview-fr.html</title>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
|
|
<style type="text/css">
|
|
/*<![CDATA[*/
|
|
body{
|
|
background: #ddd;
|
|
font-family: sans-serif;
|
|
font-size: 11pt;
|
|
padding: 0 50px;
|
|
}
|
|
div.main-content{
|
|
padding: 10px;
|
|
background: #fff;
|
|
border: 2px #ccc solid;
|
|
}
|
|
a{
|
|
text-decoration: none;
|
|
}
|
|
p.footer{
|
|
text-align: center;
|
|
margin: 5px 0 0 0;
|
|
}
|
|
.heading-1{
|
|
text-align: center;
|
|
color: orange;
|
|
font-variant: small-caps;
|
|
font-size: 20pt;
|
|
}
|
|
.heading-1-1{
|
|
color: orange;
|
|
font-size: 14pt;
|
|
border-bottom: 2px #ccc solid;
|
|
}
|
|
pre{
|
|
background: #eee;
|
|
border: 2px #ccc solid;
|
|
padding: 5px;
|
|
border-left: 10px #ccc solid;
|
|
}
|
|
ul.star li{
|
|
list-style-type: square;
|
|
}
|
|
/*]]>*/
|
|
</style>
|
|
<style type="text/css">
|
|
/*<![CDATA[*/
|
|
div.c1 {text-align: center}
|
|
/*]]>*/
|
|
</style>
|
|
</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 <span class=
|
|
"wikilink"><a href=
|
|
"2-FAQ.html#HQu27estcequ27unWebSSO3F">Web-SSO</a></span> 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
|
|
complète <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 <i class="italic">(<span class=
|
|
"wikilink"><a href=
|
|
"2-FAQ.html#HQu27apporteLemonldap3A3ANGparrapportauxautresSSO3F">voir les
|
|
différences</a></span>)</i>. 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="#HArchitecture">Architecture</a></li>
|
|
|
|
<li><a href="#HCinC3A9matique">Cinématique</a></li>
|
|
|
|
<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="#HCopyrightetlicence">Copyright et licence</a></li>
|
|
</ul>
|
|
|
|
<h3 class="heading-1-1"><span id="HArchitecture">Architecture</span></h3>
|
|
|
|
<p class="paragraph"></p>Lemonldap::NG est composé de 3
|
|
éléments s'appuyant sur 3 bases de données :
|
|
|
|
<p class="paragraph"></p>
|
|
|
|
<div class="c1"><img src="lemonldap-ng-architecture.png" alt=
|
|
"lemonldap-ng-architecture.png" /></div>
|
|
|
|
<p class="paragraph"></p>Composants de Lemonldap::NG :
|
|
|
|
<ul class="star">
|
|
<li>le Manager permet de gérer la configuration de
|
|
Lemonldap::NG,</li>
|
|
|
|
<li>le portail est l'élément d'authentification des
|
|
utilisateurs,</li>
|
|
|
|
<li>et enfin, des modules <span class="wikiexternallink"><a href=
|
|
"http://fr.wikipedia.org/wiki/Apache_HTTP_Server">Apache</a></span>
|
|
protègent les applications. Ces derniers peuvent protéger
|
|
une aire d'un serveur Apache qui peut être un <span class=
|
|
"wikiexternallink"><a href=
|
|
"http://fr.wikipedia.org/wiki/Reverse_proxy">reverse-proxy</a></span>.
|
|
Dans ce dernier cas, il est recommandé de sécuriser le
|
|
lien entre le reverse-proxy et le serveur masqué car
|
|
l'accès direct à ce serveur peut se faire sans
|
|
authentification. Un simple .htaccess ou un échange de
|
|
certificats peuvent convenir suivant le niveau de sécurité
|
|
du réseau hôte.</li>
|
|
</ul>Trois bases de données sont nécessaires :
|
|
|
|
<ul class="star">
|
|
<li>la base de configuration : par défaut, il s'agit d'un simple
|
|
répertoire, mais on peut utiliser une base de données pour
|
|
permettre le fonctionnement si tous les éléments ne se
|
|
trouvent pas sur le même serveur,</li>
|
|
|
|
<li>l'<span class="wikiexternallink"><a href=
|
|
"http://fr.wikipedia.org/wiki/Ldap">annuaire LDAP</a></span> : outre les
|
|
authentifications (qui peuvent être effectuées par un autre
|
|
moyen), il est utilisé pour récupérer les
|
|
caractéristiques de l'utilisateur et calculer ses droits,</li>
|
|
|
|
<li>la base des sessions : Lemonldap::NG utilise les modules
|
|
Apache::Session pour gérer les sessions. Par défaut, c'est
|
|
le module Apache::Session::File qui est utilisé et donc cette
|
|
base est un simple répertoire. En utilisant
|
|
Apache::Session::MySQL par exemple, la base devient accessible au
|
|
travers du réseau permettant le déploiement de la solution
|
|
sur plusieurs serveurs.</li>
|
|
</ul>
|
|
|
|
<h3 class="heading-1-1"><span id=
|
|
"HCinC3A9matique">Cinématique</span></h3>
|
|
|
|
<p class="paragraph"></p>
|
|
|
|
<div class="c1"><img src="lemonldap-ng-cinematique.png" alt=
|
|
"lemonldap-ng-cinematique.png" /></div>
|
|
|
|
<p class="paragraph"></p>Détail du fonctionnement :
|
|
|
|
<ul class="star">
|
|
<li>1 et 2 : l'utilisateur non authentifié (c'est à dire
|
|
ne présentant pas un <span class="wikiexternallink"><a href=
|
|
"http://fr.wikipedia.org/wiki/Cookie_%28informatique%29">cookie</a></span>
|
|
valide) est redirigé vers le portail d'authentification,</li>
|
|
|
|
<li>3 : requête d'authentification de l'utilisateur (login et
|
|
mot-de-passe validé sur l'annuaire LDAP ou autre
|
|
mécanisme),</li>
|
|
|
|
<li>4 : récupération des attributs de l'utilisateur,</li>
|
|
|
|
<li>5 : calcul des attributs supplémentaires demandé dans
|
|
la configuration (macros et groupes) et stockage des données
|
|
utilisateur dans la base de données des sessions,</li>
|
|
|
|
<li>6 : génération du cookie et redirection vers l'URL
|
|
demandée initialement,</li>
|
|
|
|
<li>7 : interception du cookie par l'agent de protection (module Apache)
|
|
et récupération des données utilisateur,</li>
|
|
|
|
<li>8 : vérification de l'autorisation d'accès à
|
|
l'URL demandée et transmission à l'application
|
|
(application directement installée sur le serveur Apache ou
|
|
reverse-proxy) si l'utilisateur y est autorisé,</li>
|
|
|
|
<li>9 et 10 : les autres requêtes sont traitées directement
|
|
avec les données utilisateur en cache. Le droit d'accès
|
|
est calculé pour chaque URL,</li>
|
|
</ul>Lorsque l'utilisateur se présente sur un autre serveur
|
|
protégé, seules les phases 7 à 10 sont
|
|
rejouées en toute transparence pour l'utilisateur.
|
|
|
|
<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
|
|
chapitre 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 tels les <span class="wikiexternallink"><a href=
|
|
"http://fr.wikipedia.org/wiki/Certificat_%C3%A9lectronique">certificats
|
|
x509</a></span> (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 quel 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: le cookie n'est plus autorisé à circuler en
|
|
dehors de connexions chiffrées (<span class=
|
|
"wikiexternallink"><a href=
|
|
"http://fr.wikipedia.org/wiki/Https#HTTPS">https</a></span>).
|
|
|
|
<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 suite à un changement de configuration.
|
|
|
|
<h4 class="heading-1-1-1"><span id=
|
|
"HAutorisation">Autorisation</span></h4>
|
|
|
|
<p class="paragraph"></p>Les autorisations sont contrôlées
|
|
seulement par les agents protégeant les applications. En effet, le
|
|
portail ne peut connaître à l'avance les applications sur
|
|
lesquelles 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 =~ /\bgroup1\b/
|
|
<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 =~ /\bgroup2\b/
|
|
^/(js|css) => accept
|
|
<span class="java-keyword">default</span> => deny
|
|
</pre>
|
|
</div>
|
|
|
|
<p class="paragraph"></p>NB: \b signifie "délimiteur de mot" dans
|
|
les expressions régulières.
|
|
|
|
<h5 class="heading-1-1-1-1"><span id=
|
|
"HPerformances">Performances</span></h5>
|
|
|
|
<p class="paragraph"></p>Vous pouvez utiliser des expressions Perl aussi
|
|
complexes que nécessaire et vous pouvez utiliser tous les attributs
|
|
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és 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 =~ /\bgroup1\b/
|
|
</pre>
|
|
</div><br />
|
|
<br />
|
|
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 seules deux
|
|
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 transmises 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égeant 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éparément. 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 tels 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 <span class="wikiexternallink"><a href=
|
|
"http://perl.apache.org/">mod_perl</a></span> (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 à moins
|
|
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="3-Table-of-contents-fr.html">la
|
|
page complète de documentation</a></span> pour la procédure
|
|
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::* au choix utilisé par le portail
|
|
lemonldap::NG::Portal pour stocker les données après
|
|
authentification,</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 utilisant 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="HCopyrightetlicence">Copyright et
|
|
licence</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>
|
|
|
|
<p class="footer"><a href="index.html">Index</a></p>
|
|
</body>
|
|
</html>
|