<?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 6 November 2007), see www.w3.org" /> <title>Lemonldap::NG documentation: overview-fr.html</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><img src="logo_lemonldap-ng.png" alt= "logo_lemonldap-ng.png" /> <p class="paragraph"></p>Lemonldap::NG est un <span class= "wikilink"><a href= "faq-fr.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 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 <i class="italic">(<span class= "wikilink"><a href= "faq-fr.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="#HCopyrightetlicense">Copyright et license</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><img src="lemonldap-ng-architecture.png" alt= "lemonldap-ng-architecture.png" /> <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ée 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><img src="lemonldap-ng-cinematique.png" alt= "lemonldap-ng-cinematique.png" /> <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 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 <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 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: 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 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 =~ /\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 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 =~ /\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 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 <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= "advanced-install.html">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::* 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 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>