Installation et paramétrage de pam_cas


Vincent  Mathieu 
Université Nancy 2

Dates de modification
Revision 1.0 11 février 2006
Revision 1.01 23 février 2006 ajout du paramètre --no-check-certificate au wget
Revision 1.2 6 avril 2006 ajout du paragraphe sur le cache PAM
Revision 1.2.1 7 mars 2007 changement du lien sur le téléchargement (sourcesup)
1. Téléchargement
2. Généralités
3. Modifications esup
3.1. fichier de configuration
3.2. Gestion des connexions http(s)
3.3. possibilités de debug
3.4. Comportements optionnels
3.5. Divers
4. Compilation du module
5. Fichier de configuration
6. Utilisation du module
6.1. Paramètres du module
6.2. Exemple de fichier /etc/pam.d/imap
7. En cas de problème
7.1. logs 'normaux'
7.2. castest
7.3. testImap.php
8. Cache des tickets
8.1. mécanismes de cache
8.1.1. cyrus - saslauthd
8.1.2. pam_ccreds
8.1.3. imapproxy

1. Téléchargement

Ce package est disponible en téléchargement ici.

2. Généralités

pam_cas est un module qui permet à un 'service' UNIX sachant authentifier via pam d'utiliser le mécanisme de SSO du CAS.

La version originale a été dévelopée par l'Université de Yale. Elle est disponible ici.

Des modifications esup-portail ont été apportées afin de le rendre paramétrable.

Le fonctionnement global du module est le suivant :

3. Modifications esup

Les modifications apportées par rapport à la version de yale sont les suivantes :

3.1. fichier de configuration

Il n'y a plus de paramètres 'en dur' dans les programmes.

La distribution proposée utilise un fichier de paramètres (par défaut, /etc/pam_cas.conf).

3.2. Gestion des connexions http(s)

La partie de code consacrée à la connexion http ou https a été entièrement ré-écrite. Elle s'appuie toujours sur l'API openssl, mais en utilisant des fonctions de plus haut niveau qu'auparavant (objet BIO).

3.3. possibilités de debug

Il est possible maintenant de débuguer le module sans avoir à retoucher le code, par simple modification d'un paramètre du fichier de configuration.

De nombreuses informations de débugging ont été rajoutées. Les messages dans la log d'erreurs sont maitenant explicites.

Enfin, le binaire castest a été complétement ré écrit afin de pouvoir tester hors module pam la partie communication avec le serveur CAS.

3.4. Comportements optionnels

3.5. Divers

4. Compilation du module

En pré-requis, openssl doit être installé.

Sur redhat, le package pam-devel doit également être installé.

Faire un contrôle du binaire généré : ldd pam_cas.so.

Si des fichiers d'include ou des librairies manquent, adapter l'entête du Makefile.

Tenter un ./castest sans paramètre : il doit afficher un message d'erreur du genre :

unable to open config file "/etc/pam_cas.conf"
Error while reading config file. Error 1
cannot open it

5. Fichier de configuration

Par défaut, le fichier de configuration est /etc/pam_cas.conf.

Les directives doivent commencer en début de ligne.

Les lignes vides sont autorisées.

Une ligne 'active' se compose d'une directive, suivie d'espaces et/ou tabulation, puis d'une valeur.

Les directives ne sont pas sensibles à la casse.

Les directives de type booléen acceptent les valeurs "on" ou "off".

Les directives sont les suivantes :

host

obligatoire. C'est le nom de host du serveur CAS (ex : secure.its.yale.edu).

port

facultatif. C'est le port TCP pour contacter le serveur CAS en http ou https.

Par défaut : 80 si http, ou 443 si https

uriValidate

facultatif. C'est l'URI utilisée pour la validation d'un Ticket.

Par défaut, /proxyValidate

ssl

facultatif, booléen. Si on, la connexion se fera en https, si off en http

Par défaut, prend la valeur on

debug

facultatif, booléen. Si on, des informations de debug sont envoyées dans le syslog (niveau LOG_DEBUG).

par défaut, prend la valeur off

proxy

facultatif. On y paramètre le nom du proxy CAS qui a obtenu le Proxy Ticket.

Il peut y avoir plusieurs directives proxy.

Si pas de directive proxy, pam_cas n'effectue pas ce contrôle.

ex : proxy https://uportal1.its.yale.edu/CasProxyServlet

trusted_ca

facultatif si ssl a la valeur off.

Contient le nom d'un fichier qui contient un ou plusieurs certificats au format pem.

Ce certificat sert à valider la connexion https.

Si le certificat X509 du serveur CAS est auto-signé, ce certificat doit être dans le fichier.

Si le certificat a été signé par une Autorité de Certification, c'est le certificat de l'AC de plus haut niveau de la chaine de cetification qui doit être dans le fichier.

Voici un exemple de fichier de configuration.

6. Utilisation du module

On va prendre pour exemple l'intégration pour le serveur imap

6.1. Paramètres du module

6.2. Exemple de fichier /etc/pam.d/imap

Ce fichier suppose que imap tente l'authentification CAS, puis LDAP, puis UNIX

   auth sufficient /lib/security/pam_cas.so -simap://imap.univ.fr -f/etc/pam_cas.conf
   auth sufficient /lib/security/pam_ldap.so
   auth required /lib/security/pam_pwdb.so shadow nullok
   account required /lib/security/pam_pwdb.so shadow nullok

A remarquer qu'on peut mettre pam_cas sans craintes de surcharge du serveur imap : il ne fait de requêtes auprès du serveur CAS que si le mot de passe reçu ressemble à un PT ou un ST.

7. En cas de problème

7.1. logs 'normaux'

Des logs sont produits en cas d'erreur, aux niveaux LOG_NOTICE et LOG_ERR

Des logs de debug sont générés si debug=on dans le fichier de configuration. Ils sont alors produits au niveau LOG_DEBUG.

7.2. castest

C'est un utilitaire fourni dans le 'package' pam_cas. Il permet de générer des requêtes de validation de ticket auprès du serveur CAS. Il utilise les mêmes librairies que le module pam_cas, et utilise également le fichier de config.

Il est vivement conseillé de l'utiliser avant la mise en service du module pam_cas ; cela permet de debuguer la configuration.

Il affiche sa configuration, puis tente de valider le ticket. Il affiche alors les messages que sort pam_cas en mode debug, plus d'autres informations.

Il supporte les arguments suivants (tous facultatifs) :

Donc, pour l'utiliser, préparez déja votre fichier de configuration.

exemple d'utilisation :

$PAM_CAS_SOURCES/castest <service> <ticket> <fichier_de_configuration>

Il est possible de le lancer sans paramètres. Avec un fichier de configuration correctement paramétré, la sortie est la suivante :

---------------------------------------------------------------
                    Parameters from test :
host = auth.univ-nancy2.fr
port = 443
uri = /proxyValidate
ssl = on
trusted_ca = /Cert/ac-racine.pem
debug = localtest
proxy = https://imp.univ.fr/cas/casProxy.php
proxy = https://ent.univ.fr/CasProxyServlet
service = https://foo.fr
ticket = PT-1-xxx
---------------------------------------------------------------
authentication failure
<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
  <cas:authenticationFailure code='INVALID_TICKET'>
    ticket 'PT-1-xxx' not recognized
  </cas:authenticationFailure>
</cas:serviceResponse>
---------------------------------------------------------------
invalid ticket : bad CAS ticket

On a donc validé les paramètres de communication avec le serveur CAS très simplement.

Si problème, s'assurer avec wget que la machine qui supporte pam_cas arrive bien à communiquer avec le serveur CAS. Par exemple :

wget --ca-certificate=/Cert/ac-racine.pem -O /tmp/cas.log "https://auth.univ.fr:443/proxyValidate?ticket=PT-1-xxx&service=https://foo.fr"

Le contenu du fichier /tmp/cas.log contient la réponse du serveur CAS ; il devrait être :

<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
  <cas:authenticationFailure code='INVALID_TICKET'>
    ticket 'PT-1-xxx' not recognized
  </cas:authenticationFailure>
</cas:serviceResponse>

Rem : si on ne veut pas valider le certificat du serveur https lors du wget, il suffit de remplacer --ca-certificate=/Cert/ac-racine.pem par --no-check-certificate ; un warning sera néammoins affiché lors du wget.

7.3. testImap.php

Cet utilitaire permet de tester le fonctionnement d'un serveur IMAP CAS-ifié.

8. Cache des tickets

pam_cas permet de valider un ticket (PT ou ST) présenté comme un simple mot de passe.

Pour des raisons de performance, il est souvent nécessaire de "cacher" ce ticket afin de pouvoir le rejouer plusieurs fois.

Ce document décrit l'exemple d'imap. Imap est utilisé par les webmail (cassifiés), l'ent (cassifié) et les clients de messagerie (non cassifié).

Les Webmails ont la particularité de générer de nombreuses connexions imap, au moins une par chargement de page.

Il serait très couteux que le webmail redemande un nouveau ticket pour chaque ouverture de connexion IMAP ; un cache doit donc être installé côté serveur, et le code du client webmail doit être modifié afin de gérer au mieux ce mécanisme de cache.

8.1. mécanismes de cache

Deux mécanismes de cache coté serveur sont connus, cyrus-saslauthd et pam_ccreds ; il existe aussi la solution imapproxy.

8.1.1. cyrus - saslauthd

C'est un démon qui est livré avec la distribution cyrus-imap.

cyrus-imap peut être paramétré pour authentifier les connexions (imap, pop, ...) à l'aide de ce démon, via une socket unix.

saslauthd peut être paramétré pour authentifier à l'aide de pam. Il est alors possible d'utiliser pam_cas pour cassifier saslauthd, donc cyrus-imap.

Et il est possible de paramétrer saslauthd pour qu'il implémente un cache de mot de passe (donc, éventuellement, de tickets).

Un intérêt essentiel de saslauthd est le fait qu'il est capable de conserver en cache plusieurs mots de passe pour un utilisateur ; ceci permet d'optimiser le mécanisme lorsque des sources différentes (ent, webmail, client lourd) génèrent en parralèle des requêtes IMAP, avec chacune un mot de pase différent.

8.1.2. pam_ccreds

C'est un module pam qui permet de cacher les mots de passe.

Il est développé par PADL Software.

Des patchs ont été proposés par Nicolas Bouillis fin de l'adapter au cache de ticket, et à apporter des fonctionnalités supplémentaires.

Une documentation de mise en oeuvre est proposée par Damien Mascré (IUT Villetaneuse - Paris 13).

Voir également un échange de mails à ce sujet sur la liste esup-devel.

Pour les personnes qui ne sont pas abonnées à cette liste, ce mail est également disponible, ainsi que le document attaché (patchs).

8.1.3. imapproxy

C'est une solution utilisée par certains établissements, qui semble donner satisfaction.

Voir les documents suivants :