Poum - Mot-clé - REMOTE_USERDe la qualité logicielle, méthodes agiles et outils logiciels libres ...2023-08-25T16:53:12+01:00Poumurn:md5:6b5c625a812aff31ffa1cd1f3648e14bDotclearCMDBuild et Kerberos ADurn:md5:ca17287befc318f49e1c580db93b1c922016-01-16T17:55:00+01:002016-01-16T18:54:00+01:00PoumTrucs & astucesCMDBuildExtJSFirebugJasperReportJavaKerberoskeytabmod_ajpmod_auth_kerbmod_headersPostgresREMOTE_USERTomcatvirtualhost<p><img alt="cmdbuild.png" title="cmdbuild.png, janv. 2016" src="http://philippe.poumaroux.free.fr/public/cmdbuild.png" /></p><p><a hreflang="en" title="Site officiel de CMDBuild" href="http://www.cmdbuild.org/en/">CMDBuild</a> est une CMDB libre très souple bâtie sur <a href="http://philippe.poumaroux.free.fr/index.php?tag/Java">Java</a>, <a href="http://philippe.poumaroux.free.fr/index.php?tag/Postgres">Postgres</a>, <a href="http://philippe.poumaroux.free.fr/index.php?tag/ExtJS">ExtJS</a>, <a href="http://philippe.poumaroux.free.fr/index.php?tag/JasperReport">JasperReport</a> et d'<a hreflang="en" title="Briques logicielles uttilisées par CMDBuild" href="http://www.cmdbuild.org/en/prodotti/en/progetto/caratteristiche/tecnologia">autres</a>.</p><p>CMDBuild permet d'identifier les utilisateurs en créant des comptes dans sa base de données ou sur une source extérieure: LDAP, CAS ou, et c'est le sujet ici, <strong>Kerberos</strong>. Comme la documentation ne traite que de la configuration de CMDBuild, voici le reste.</p> <p>CMDBuild est une application Java web servie par <a href="http://philippe.poumaroux.free.fr/index.php?tag/Tomcat">Tomcat</a>. Dire que CMDBuild gère <a href="http://philippe.poumaroux.free.fr/index.php?tag/Kerberos">Kerberos</a> est un peu exagéré: en fait, CMDBuild peut faire confiance à un système tiers du moment que celui-ci passe dans un en-tête de la requête un champ indiquant l'identifiant d'un utilisateur qu'il connait.</p><p>Le principe est donc le suivant:</p><ul><li>on crée un utilisateur dans l'administration de CMDBuild. Le mot de passe associé peut être quelconque, il ne sera normalement pas utilisé.</li><li>on crée un compte de service et une <a href="http://philippe.poumaroux.free.fr/index.php?tag/keytab">keytab</a> sur le serveur Kerberos (non traité ici).</li><li>on utilise un serveur Apache HTTP qui aura trois choses à faire:<ul><li>faire proxy pour relayer les requêtes vers Tomcat (via le module <strong><a href="http://philippe.poumaroux.free.fr/index.php?tag/mod_ajp">mod_proxy_ajp</a></strong>)</li><li>faire l'authentification sur un Kerberos via le module <strong><a href="http://philippe.poumaroux.free.fr/index.php?tag/mod_auth_kerb">mod_auth_kerb</a></strong></li><li>ajouter dans la requête un en-tête contenant l'identifiant de l'utilisateur authentifié via la variable système <a href="http://philippe.poumaroux.free.fr/index.php?tag/REMOTE_USER">REMOTE_USER</a> (via le module <strong><a href="http://philippe.poumaroux.free.fr/index.php?tag/mod_headers">mod_headers</a></strong>)</li></ul></li><li>on configure CMDBuild pour lui dire d'utiliser en premier ce mode d'authentification et lui indiquer le nom de l'en-tête lui permettant de faire de lien avec les utilisateurs qu'il connait.</li></ul><p>Note: mod_proxy_ajp et mod_headers sont en principe déjà installés avec httpd. Seul mod_auth_kerb devra être installé en plus. Cette installation devrait également modifier la configuration pour charger le module au démarrage.</p><p>Donc, sur le serveur, on installe le serveur httpd d'Apache puis on ajoute une configuration de <a href="http://philippe.poumaroux.free.fr/index.php?tag/virtualhost">virtualhost</a> dans /etc/httpd/conf.d:</p><pre><code class="apache">
<virtualhost>
ServerName cmdbuild.poum.fr
ServerAlias cmdbuild
ProxyRequests Off
ProxyPreserveHost on
ErrorLog /var/log/httpd/tomcat.error.log
CustomLog /var/log/httpd/tomcat.log combined
<location />
AuthName "Connexion windows"
AuthType Kerberos
Krb5Keytab /etc/cmdbuild.keytab
KrbAuthRealms POUM.FR
KrbMethodNegotiate On
#KrbMethodK5Passwd Off
KrbVerifyKDC off
KrbServiceName HTTP
KrbSaveCredentials on
Require valid-user
<strong>RequestHeader</strong> set <em>X-Forwarded-User</em> %{REMOTE_USER}<strong>s</strong>
</location>
<proxy>
Order deny,allow
Allow from all
</proxy>
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
</virtualhost>
</code></pre><p>Notez :</p><ul><li>qu'on utilise la commande RequestHeader et pas <del>Header</del> car ce sont les requêtes entrantes qu'on veut modifier (sinon, çà marche pas, 3 heures de perdues !)</li><li>le 's' après %{REMOTE_USER}s pour indiquer qu'on utilise une variable système (par opposition à 'e' par exemple pour une variable d'environnement</li><li>que X-Forwarded-User est un nom arbitraire qu'il faudra indiquer dans la configuration de CMDBuild</li><li>que KrbMethodK5Passwd permet de demander un identifiant / mot de passe à un utilisateur hors Kerberos mais qui aurait un compte par ailleurs. Sinon, décommenter la ligne.</li></ul><p>Ensuite, on modifie le fichier webapp/cmdbuild/WEB-INF/conf/auth.conf pour:</p><ul><li>modifier les modes d'authentification: auth.methods=<strong>HeaderAuthenticator</strong>,DBAuthenticator (on garde un mode secours sur le système interne)</li><li>indiquer le nom du champ: header.attribute.name=X-Forwarded-User</li></ul><p>Voilà, il ne reste plus qu'à <strong><ins>ET DANS CET ORDRE</ins></strong>:</p><ul><li>(re)lancer le serveur tomcat : # service tomcat restart</li><li>(re)lancer le serveur httpd: # service httpd start</li><li>aller à l'URL de CMDBuild (sur le port 80, pas le 8080)</li></ul><p>Çà devrait fonctionner. Dans le cas contraire, voir les logs:</p><ul><li>de httpd: /var/log/httpd/tomcat.error.log</li><li>de tomcat: /var/lib/tomcat7/logs/catalina.out ou cmdbuild.log</li></ul><p>ou regarder les requêtes (via <a href="http://philippe.poumaroux.free.fr/index.php?tag/Firebug">Firebug</a> par exemple)</p>