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.
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']); + ?>
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:
[...] % 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))"}. [...]
#%PAM-1.0 auth sufficient pam_cas.so -sxmpp://domain.tld -f/etc/pam_cas.conf auth include system-auth account include system-auth
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