tuto:webapps:llng:jappix

Jappix

Jappix est un client XMPP entièrement écrit en javascript. Il est possible d'en protéger l'accès par LemonLDAP en utilisant une authentification CAS (jappix servira alors de proxy CAS pour votre serveur Jabber)

Le première étape est d'activer le module fournisseur CAS sur votre serveur LemonLDAP

Ensuite, il faut appliquer un patch à Jappix pour qu'il puisse utiliser une authentification CAS.

auth_cas.patch
diff -Nur -x '*.orig' -x '*.rej' jappix/php/desktop.php mezzanine_patched_jappix/php/desktop.php
--- jappix/php/desktop.php      2012-01-16 22:51:37.000000000 +0100
+++ mezzanine_patched_jappix/php/desktop.php    2012-07-13 14:23:02.625826144 +0200
@@ -16,6 +16,31 @@
 // Someone is trying to hack us?
 if(!defined('JAPPIX_BASE'))
        exit;
+if (AUTH_CAS == 'on'){
+    ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.'/usr/share/pear');
+    require_once('CAS.php');
+    if (DEVELOPER == 'on'){
+        phpCAS::setDebug(session_save_path() . '/cas.log');
+    }
+    phpCAS::proxy(CAS_VERSION_2_0,CAS_SERVER,443,CAS_URI);
+    phpCAS::setPGTStorageFile(session_save_path());
+    if (CAS_CACERT != '' && file_exists (CAS_CACERT)){
+        phpCAS::setCasServerCACert(CAS_CACERT);
+    } else {
+        phpCAS::setNoCasServerValidation();
+    }
+    phpCAS::forceAuthentication();
+    $user=phpCAS::getUser();
+    $pt=phpCAS::retrievePT('xmpp://'.HOST_MAIN,$err_code,$output);
+
+    if(preg_match('/^PT\-/', $pt)){
+        $js="doLogin('" . $user . "', '".HOST_MAIN."', '" . $pt . "', '".JAPPIX_RESOURCE."', '80',false)";
+    } else{
+        $js="";
+    }
+    // Destroy PHP Session now, so that the user will be able to reconnect later
+    session_destroy();
+}
 
 ?>
 <!DOCTYPE html>
@@ -40,7 +65,7 @@
        } ?>
 </head>
 
-<body class="body-images">
+<body class="body-images" onload="<?=$js;?>">
 
 <?php
 
diff -Nur -x '*.orig' -x '*.rej' jappix/php/read-main.php mezzanine_patched_jappix/php/read-main.php
--- jappix/php/read-main.php    2012-01-16 22:51:37.000000000 +0100
+++ mezzanine_patched_jappix/php/read-main.php  2012-07-13 14:21:44.472679462 +0200
@@ -33,7 +33,11 @@
                'https_force'           => 'off',
                'compression'           => 'off',
                'multi_files'           => 'off',
-               'developer'             => 'off'
+               'developer'             => 'off',
+               'auth_cas'              => 'off',
+               'cas_server'            => 'https://cas.domain.tld',
+               'cas_uri'               => '',
+               'cas_cacert'            => ''
             );
 
 // Define a default values array
@@ -73,5 +77,10 @@
 define('COMPRESSION', $main_conf['compression']);
 define('MULTI_FILES', $main_conf['multi_files']);
 define('DEVELOPER', $main_conf['developer']);
+define('AUTH_CAS', $main_conf['auth_cas']);
+define('CAS_SERVER', $main_conf['cas_server']);
+define('CAS_URI', $main_conf['cas_uri']);
+define('CAS_CACERT', $main_conf['cas_cacert']);
+
 
 ?>
Ce patch est une adaptation de ce qui est expliqué ici: http://mdl29.net/doku.php?id=braveo:docinstall:cas:jappix je n'en suis donc pas l'auteur d'origine, j'ai juste changé 2/3 trucs, dont la possibilité de valider le certificat du serveur CAS, ce qui me parait important

Télécharger ensuite la dernière version de phpCAS ici: https://wiki.jasig.org/display/CASC/phpCAS et décompressez l'archive à la racine de votre installation de jappix.

Éditez maintenant le fichier de configuration read-main.php et adaptez les valeurs des variables auth_cas (à mettre à on) cas_server (le nom DNS de votre seveur LemonLDAP::NG, en général auth.domain.tld), cas_uri (/cas par défaut sur LemonLDAP::NG) et cas_cacert (mettez le chemin vers la CA qui a signé le certificat de votre serveur CAS, si cette variable est vide ou si le fichier n'existe pas, Jappix ne validera pas l'authenticité de votre serveur CAS, ce qui n'est pas top d'un point de vue sécurité).

La dernière étape est de configurer votre serveur Jabber pour qu'il utilise une authentification CAS. Nous utilisons Ejabberd et pam_cas qui fonctionnent très bien avec ces directives:

  • /etc/ejabberd/ejabberd.cfg:
[...]
% Use pam for authentication (to get pam_cas support)
% LDAP for everything else
{auth_method, pam}.
{ldap_servers, ["localhost"]}.
{ldap_base, "ou=Users,dc=domain,dc=tld"}.
{ldap_filter, "(|(posixMemberOf=equipe)(posixMemberOf=jabber))"}.
[...]
  • /etc/pam.d/ejabberd
#%PAM-1.0

auth    sufficient      pam_cas.so -sxmpp://domain.tld -f/etc/pam_cas.conf
auth       include      system-auth
account    include      system-auth
  • /etc/pam_cas.conf
host auth.lapiole.org

uriValidate /cas/proxyValidate

trusted_ca /etc/pki/tls/certs/cacert.pem

Pour les systèmes CentOS 5 et 6 ou compatibles, nous avons une version packagées en rpm de pam_cas sur notre dépôt

  • tuto/webapps/llng/jappix.txt
  • Dernière modification: 21/09/2013 12:27
  • de dani