Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > a30e324be723ed0caa14fc5758ff15f0 > files > 98

lemonldap-ng-0.9.2-3mdv2010.0.i586.rpm

<?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&eacute; sur les modules Apache::Session. Il simplifie la construction
    d'une aire prot&eacute;g&eacute;e en minimisant les impacts sur les
    applications. Il g&egrave;re &agrave; la fois les authentifications et les
    autorisations et fournit des en-t&ecirc;tes HTTP pour la
    tra&ccedil;abilit&eacute;. 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&eacute;&eacute;criture
    compl&egrave;te de Lemonldap <i class="italic">(<span class=
    "wikilink"><a href=
    "faq-fr.html#HQu27apporteLemonldap3A3ANGparrapportauxautresSSO3F">voir les
    diff&eacute;rences</a></span>)</i>. Tous les &eacute;l&eacute;ments
    n&eacute;cessaires &agrave; son exploitation et son administration sont
    fournis dans le package. En revanche les composants
    d&eacute;velopp&eacute;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&eacute;matique</a></li>

      <li>
        <a href=
        "#HMC3A9canismesd27authentification2Cd27autorisationetdetraC3A7abilitC3A9">
        M&eacute;canismes d'authentification, d'autorisation et de
        tra&ccedil;abilit&eacute;</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&ccedil;abilit&eacute;</a>

            <ul>
              <li><a href="#HTracerlesaccC3A8sauportail">Tracer les
              acc&egrave;s au portail</a></li>

              <li><a href="#HTracerlesaccC3A8sauxapplications">Tracer les
              acc&egrave;s aux applications</a></li>
            </ul>
          </li>
        </ul>
      </li>

      <li><a href="#HInstallation">Installation</a></li>

      <li><a href="#HSystC3A8medestockagedessessions">Syst&egrave;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&eacute; de 3
    &eacute;l&eacute;ments s'appuyant sur 3 bases de donn&eacute;es&nbsp;:

    <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&eacute;rer la configuration de
      Lemonldap::NG,</li>

      <li>le portail est l'&eacute;l&eacute;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&egrave;gent les applications. Ces derniers peuvent prot&eacute;ger
      une aire d'un serveur Apache qui peut &ecirc;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&eacute; de s&eacute;curiser le
      lien entre le reverse-proxy et le serveur masqu&eacute; car
      l'acc&egrave;s direct &agrave; ce serveur peut se faire sans
      authentification. Un simple .htaccess ou un &eacute;change de
      certificats peuvent convenir suivant le niveau de s&eacute;curit&eacute;
      du r&eacute;seau h&ocirc;te.</li>
    </ul>Trois bases de donn&eacute;es sont n&eacute;cessaires&nbsp;:

    <ul class="star">
      <li>la base de configuration : par d&eacute;faut, il s'agit d'un simple
      r&eacute;pertoire, mais on peut utiliser une base de donn&eacute;e pour
      permettre le fonctionnement si tous les &eacute;l&eacute;ments ne se
      trouvent pas sur le m&ecirc;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 &ecirc;tre effectu&eacute;es par un autre
      moyen), il est utilis&eacute; pour r&eacute;cup&eacute;rer les
      caract&eacute;ristiques de l'utilisateur et calculer ses droits,</li>

      <li>la base des sessions : Lemonldap::NG utilise les modules
      Apache::Session pour g&eacute;rer les sessions. Par d&eacute;faut, c'est
      le module Apache::Session::File qui est utilis&eacute; et donc cette
      base est un simple r&eacute;pertoire. En utilisant
      Apache::Session::MySQL par exemple, la base devient accessible au
      travers du r&eacute;seau permettant le d&eacute;ploiement de la solution
      sur plusieurs serveurs.</li>
    </ul>

    <h3 class="heading-1-1"><span id=
    "HCinC3A9matique">Cin&eacute;matique</span></h3>

    <p class="paragraph"></p><img src="lemonldap-ng-cinematique.png" alt=
    "lemonldap-ng-cinematique.png" />

    <p class="paragraph"></p>D&eacute;tail du fonctionnement :

    <ul class="star">
      <li>1 et 2 : l'utilisateur non authentifi&eacute; (c'est &agrave; dire
      ne pr&eacute;sentant pas un <span class="wikiexternallink"><a href=
      "http://fr.wikipedia.org/wiki/Cookie_%28informatique%29">cookie</a></span>
      valide) est redirig&eacute; vers le portail d'authentification,</li>

      <li>3 : requ&ecirc;te d'authentification de l'utilisateur (login et
      mot-de-passe valid&eacute; sur l'annuaire LDAP ou autre
      m&eacute;canisme),</li>

      <li>4 : r&eacute;cup&eacute;ration des attributs de l'utilisateur,</li>

      <li>5 : calcul des attributs suppl&eacute;mentaires demand&eacute; dans
      la configuration (macros et groupes) et stockage des donn&eacute;es
      utilisateur dans la base de donn&eacute;es des sessions,</li>

      <li>6 : g&eacute;n&eacute;ration du cookie et redirection vers l'URL
      demand&eacute;e initialement,</li>

      <li>7 : interception du cookie par l'agent de protection (module Apache)
      et r&eacute;cup&eacute;ration des donn&eacute;es utilisateur,</li>

      <li>8 : v&eacute;rification de l'autorisation d'acc&egrave;s &agrave;
      l'URL demand&eacute;e et transmission &agrave; l'application
      (application directement install&eacute;e sur le serveur Apache ou
      reverse-proxy) si l'utilisateur y est autoris&eacute;,</li>

      <li>9 et 10 : les autres requ&ecirc;tes sont trait&eacute;es directement
      avec les donn&eacute;es utilisateur en cache. Le droit d'acc&egrave;s
      est calcul&eacute; pour chaque URL,</li>
    </ul>Lorsque l'utilisateur se pr&eacute;sente sur un autre serveur
    prot&eacute;g&eacute;, seules les phases 7 &agrave; 10 sont
    rejou&eacute;es en toute transparence pour l'utilisateur.

    <h3 class="heading-1-1"><span id=
    "HMC3A9canismesd27authentification2Cd27autorisationetdetraC3A7abilitC3A9">M&eacute;canismes
    d'authentification, d'autorisation et de
    tra&ccedil;abilit&eacute;</span></h3>

    <p class="paragraph"></p>Tous les param&egrave;tres abord&eacute;s dans ce
    chap&icirc;tre sont accessibles via l'interface d'administration (voir la
    <span class="wikiexternallink"><a href=
    "http://lemonldap.objectweb.org/NG/ManagerDemo/fr/">d&eacute;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&eacute; et tente de se connecter &agrave; une aire
    prot&eacute;g&eacute;e par un agent Lemonldap::NG, il est redirig&eacute;
    vers le portail. Celui-ci authentifie l'utilisateur par d&eacute;faut par
    une connexion LDAP, mais vous pouvez &eacute;galement utiliser un autre
    sch&eacute;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&eacute;n&eacute;r&eacute;s par le module Apache::Session soit aussi
    s&eacute;curis&eacute; que n'importe quelle syst&egrave;me bas&eacute; sur
    des cookies al&eacute;atoires de 128 bits. Il est recommand&eacute;
    d'activer l'option "cookie s&eacute;curis&eacute;" pour &eacute;viter les
    vols de session: le cookie n'est plus autoris&eacute; &agrave; circuler en
    dehors de connexions chiffr&eacute;es (<span class=
    "wikiexternallink"><a href=
    "http://fr.wikipedia.org/wiki/Https#HTTPS">https</a></span>).

    <p class="paragraph"></p>Par d&eacute;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&egrave;s
    avoir perdu ses droits suite &agrave; un changement de configuration.

    <h4 class="heading-1-1-1"><span id=
    "HAutorisation">Autorisation</span></h4>

    <p class="paragraph"></p>Les autorisations sont contr&ocirc;l&eacute;es
    seulement par les agents prot&eacute;geant les applications. En effet, le
    portail ne peut conna&icirc;tre &agrave; 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&ccedil;abilit&eacute;,</li>

      <li>cr&eacute;er d'&eacute;ventuelles expressions Perl pour
      d&eacute;finir des groupes d'utilisateur (en utilisant les attributs
      LDAP),</li>

      <li>cr&eacute;er des r&egrave;gles d'acc&egrave;s associant des
      expressions r&eacute;guli&egrave;res triant les URL &agrave; des
      expressions Perl calculant le droit d'acc&egrave;s correspondant.</li>
    </ul>Exemple (Voir Lemonldap::NG::Manager::Conf(3) pour comprendre le
    stockage de la configuration) :

    <ul class="star">
      <li>Variables export&eacute;es (attributs LDAP):</li>
    </ul>

    <div class="code">
      <pre>
# Nom-choisi     =&gt; attribut LDAP
cn               =&gt; cn
departmentUID    =&gt; departmentUID
login            =&gt; uid
</pre>
    </div>

    <ul class="star">
      <li>Groupes d'utilisateurs :</li>
    </ul>

    <div class="code">
      <pre>
# Nom-choisi  =&gt; d&eacute;finition du groupe
group1        =&gt; { $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&ocirc;te
      r&eacute;el) Apache dispose de ses propres r&egrave;gles d'acc&egrave;s:

        <ul class="star">
          <li>www1.domain.com :</li>
        </ul>
      </li>
    </ul>

    <div class="code">
      <pre>
^/<span class=
"java-keyword">protected</span>/.*$  =&gt; $groups =~ /\bgroup1\b/
<span class="java-keyword">default</span>          =&gt; accept
</pre>
    </div>

    <ul class="star">
      <li>www2.domain.com :</li>
    </ul>

    <div class="code">
      <pre>
^/site/.*$       =&gt; $uid eq <span class=
"java-quote">"admin"</span> or $groups =~ /\bgroup2\b/
^/(js|css)       =&gt; accept
<span class="java-keyword">default</span>          =&gt; deny
</pre>
    </div>

    <p class="paragraph"></p>NB: \b signifie "d&eacute;limiteur de mot" dans
    les expressions r&eacute;guli&egrave;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&eacute;cessaire et vous pouvez utiliser tous les attibuts
    LDAP (et cr&eacute;er vos propres attributs additionnels avec le
    m&eacute;canisme des macros) dans les d&eacute;finitions de groupes, les
    r&egrave;gles d'acc&egrave;s et les en-t&ecirc;tes HTTP
    personnalis&eacute;s: vous devez seulement utiliser le nom choisi
    pr&eacute;c&eacute;d&eacute; d'un "$".

    <p class="paragraph"></p>Vous devez toutefois bien choisir vos
    expressions:

    <ul class="star">
      <li>les groupes et les macros ne sont &eacute;valu&eacute;es que lorsque
      l'utilisateur est renvoy&eacute; vers le portail,</li>

      <li>les r&egrave;gles d'acc&egrave;s et les en-t&ecirc;tes
      export&eacute;s sont &eacute;valu&eacute;s &agrave; chaque requ&ecirc;te
      sur un site prot&eacute;g&eacute;.</li>
    </ul>Il est donc recommand&eacute; d'utiliser le m&eacute;canisme des
    groupes pour &eacute;viter de calculer de longues expressions &agrave;
    chaque requ&ecirc;te:

    <div class="code">
      <pre>
^/<span class=
"java-keyword">protected</span>/.*$   =&gt; $groups =~ /\bgroup1\b/
</pre>
    </div><br />
    <br />
    Dans la d&eacute;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&eacute;es par {} :

    <div class="code">
      <pre>
group1 =&gt; (|(uid=xavier.guimard)(ou=unit1))
group1 =&gt; {$uid eq <span class=
"java-quote">"xavier.guimard"</span> or $ou eq <span class=
"java-quote">"unit1"</span>}
group1 =&gt; (|(uid=xavier.guimard){$ou eq <span class=
"java-quote">"unit1"</span>})
</pre>
    </div>

    <p class="paragraph"></p>Pour limiter les requ&ecirc;tes LDAP, il est
    conseill&eacute; d'utiliser les expressions Perl. Ainsi seuls 2
    sollicitations de l'annuaire sont n&eacute;cessaires.

    <h4 class="heading-1-1-1"><span id=
    "HTraC3A7abilitC3A9">Tra&ccedil;abilit&eacute;</span></h4>

    <h5 class="heading-1-1-1-1"><span id="HTracerlesaccC3A8sauportail">Tracer
    les acc&egrave;s au portail</span></h5>

    <p class="paragraph"></p>Lemonldap::NG::Portal n'enregistre pas les
    &eacute;v&eacute;nements de connexion par d&eacute;faut, mais il est
    tr&egrave;s facile de surcharger la m&eacute;thode "log".

    <h5 class="heading-1-1-1-1"><span id=
    "HTracerlesaccC3A8sauxapplications">Tracer les acc&egrave;s aux
    applications</span></h5>

    <p class="paragraph"></p>Comme un Web-SSO ne peut interpr&eacute;ter le
    contenu des requ&ecirc;tes HTTP transmise aux applications
    prot&eacute;g&eacute;es, il ne peut enregistrer au mieux que les URL. Et
    comme Apache le fait parfaitement, Lemonldap::NG::Handler(3) lui fournit
    le nom &agrave; enregistrer dans les journaux. Le param&egrave;tre
    optionnel "whatToTrace" indique la variable &agrave; utiliser ($uid par
    d&eacute;faut).

    <p class="paragraph"></p>La trace r&eacute;elle doit &ecirc;tre
    effectu&eacute;e par l'application seule capable d'interpr&eacute;ter le
    r&eacute;sultat des transactions.

    <p class="paragraph"></p>Lemonldap::NG peut exporter des en-t&ecirc;tes
    HTTP aussi bien en utilisant Apache en reverse-proxy qu'en
    prot&eacute;gent directement les applications. Par d&eacute;faut, le champ
    Auth-User est utilis&eacute; mais vous pouvez choisir les en-t&ecirc;tes
    que vous transmettez &agrave; chaque application s&eacute;paremment. Les
    expressions d&eacute;finissant les en-t&ecirc;tes associent :

    <ul class="star">
      <li>le nom d'en-t&ecirc;te,</li>

      <li>une expression Perl utilisant les donn&eacute;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     =&gt; $uid
Unit          =&gt; $ou
</pre>
    </div>

    <ul class="star">
      <li>www2.domain.com :</li>
    </ul>

    <div class="code">
      <pre>
Authorization =&gt; <span class=
"java-quote">"Basic "</span>.encode_base64($employeeNumber.<span class=
"java-quote">":dummy"</span>)
Remote-IP     =&gt; $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&eacute;rent de Lemonldap et
      contient tous les &eacute;l&eacute;ments n&eacute;cessaires &agrave; 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 &agrave; la fois
      avec les versions 1.3 et 2.x d'Apache, c'est &agrave; 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 &ecirc;tre
      &eacute;dit&eacute;e qu'avec l'interface d'administration &agrave; moins
      que vous ne sachiez exactement ce que vous faites. Les param&egrave;tres
      pr&eacute;sent&eacute;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&egrave;me de stockage des
    sessions</span></h3>

    <p class="paragraph"></p>Lemonldap::NG utilise 3 niveaux de cache pour les
    donn&eacute;es des utilisateurs authentifi&eacute;s :

    <ul class="star">
      <li>un module Apache::Session::* au choix utilis&eacute; par le portail
      lemonldap::NG::Portal pour stocker les donn&eacute;es apr&egrave;s
      authentification,</li>

      <li>un module Cache::Cache* au choix utilis&eacute; par l'agent
      Lemonldap::NG::Handler pour partager les donn&eacute;es entre les
      threads et les processus d'Apache et bien sur entre les h&ocirc;tes
      virtuels h&eacute;berg&eacute;s sur le m&ecirc;me serveur,</li>

      <li>les variables internes &agrave; l'agent Lemonldap::NG::Handler : si
      le m&ecirc;me utilisateur utilise de nouveau le m&ecirc;me thread ou
      processus, aucune requ&ecirc;te n'est n&eacute;cessaire pour calculer le
      droit d'acc&egrave;s. Ceci est particuli&egrave;rement
      int&eacute;ressant avec le syst&egrave;me de connexions persistantes du
      protocole HTTP/1.1 (Keep-Alive).</li>
    </ul>Ainsi, le nombre de requ&ecirc;tes au cache principal est
    limit&eacute; &agrave; 1 par utilisateur actif toutes les 10 minutes.

    <p class="paragraph"></p>Lemonldap::NG est tr&egrave;s rapide, mais vous
    pouvez encore am&eacute;liorer les performances en utilisnt un module
    Cache::Cache ne n&eacute;cessitant pas d'acc&egrave;s au disque.

    <h3 class="heading-1-1"><span id="HAuteur">Auteur</span></h3>

    <p class="paragraph"></p>Xavier Guimard, &lt;x.guimard@free.fr&gt;

    <h3 class="heading-1-1"><span id="HCopyrightetlicense">Copyright et
    license</span></h3>

    <p class="paragraph"></p>Copyright &copy; 2005-2007 par Xavier Guimard
    &lt;x.guimard@free.fr&gt;

    <p class="paragraph"></p>Ce logiciel est libre, vous pouvez le
    redistribuer et/ou le modifier sous les m&ecirc;mes termes que Perl
    lui-m&ecirc;me en version 5.8.4 ou &agrave; votre guise en version Perl 5
    sup&eacute;rieure.
  </div>
</body>
</html>