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)

Activer le provider CAS sur votre LemonLDAP

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

Patcher Jappix

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

<file auth_cas.patch diff> diff -Nur -x '*.orig' -x '*.rej' jappix/php/desktop.php mezzanine_patched_jappix/php/desktop.php --- jappix/php/desktop.php 2011-08-28 15:59:58.000000000 +0200 +++ mezzanine_patched_jappix/php/desktop.php 2011-12-20 15:37:10.000000000 +0100 @@ -16,6 +16,30 @@ Someone is trying to hack us? if(!defined('JAPPIX_BASE')) exit; +if (AUTH_CAS == 'on'){ + 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('plain',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 +64,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 2011-08-28 15:59:58.000000000 +0200 +++ mezzanine_patched_jappix/php/read-main.php 2011-12-20 15:38:53.000000000 +0100 @@ -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']); +

?>

</code>

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é).

Configurer votre serveur Jabber pour qu'il utilise une authentification CAS

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 http://repo.firewall-services.com/centos/dépôt