Outils pour utilisateurs

Outils du site


braveo:docinstall:cas:pam

CASsification via PAM

Tuto en cours de rédaction …..

Objectif et intérêt de la démarche

Nous souhaitons CASsifier un serveur que ce soit un serveur imap, Jabber (XMPP) ou autre …….

Par CASsifier, j'entends faire en sorte que notre serveur accepte des tickets CAS et qu'il soit capable de les vérifier auprès du CAS en plus de l'identification classique via le LDAP.

Je vous conseille de lire l’aspect théorique d'abord.

Nous n'allons bien entendu pas chercher une solution qui corresponde à chacun de ces services (ce serait un peu long :-)), par contre il existe un point commun entre tous ces services (et même la majorité des applications, serveurs ftp par exemple). Ce point commun c'est Pluggable Authentication Modules PAM.

PAM est conçu comme son nom l'indique pour gérer l'authentification et il est possible de relier des applications tel qu'un serveur imap (dovecot) ou un serveur XMPP (ejabberd) à ce module PAM.

Pour ce faire nous allons mettre au point un pile d'authentification PAM de la façon suivante :

  • On vérifie si les identifiant ne sont pas déjà dans le cache (pam_ccreds)
  • Si le mot de passe a la structure d'un ticket de CAS (commençant par ST ou PT), on vérifie la validité du ticket auprès du CAS (pam_cas)
  • Sinon si l'étape précédente échoue, on va vérifier les identifiants auprès du LDAP (pam_ldap)
  • …. on peut rajouter autre chose si on veux se compliquer la vie :-) mais on ne va pas le faire
  • Enfin en tout dernier on met en cache l'identification, car je vous rappelle qu'on ticket n'est valide qu'une seule fois (pam_ccreds)

Voilà il y a plus qu'a tout installer ;-)

courage c'est pas si long que ça …..



pam_ldap

Installation des paquets :

apt-get install libpam-ldap

Configuration de libnss-ldap :

URI du ldap : ldap://ldap.mdl29:389/
Base DN : dc=mdl29,dc=net
Version : 3 (la dernière)
SuperUilisateur: cn=admin,dc=mdl29,dc=net (ou ne rien mettre si on ne veut pas passer par le super utilisateur)
Mot de passe : ******* (ou ne rien mettre si on ne veut pas passer par le super utilisateur)
Modification des mot de passes locaux : non
La base de données LDAP demande-t-elle une identification ? : Non

Cette conf est ensuite dispo ici /etc/pam_ldap.conf

Pour tester, getent passwwd devrait retourner les utilisateurs contenus dans LDAP.

Si ça ne fonctionne pas allez chercher les logs ici : /var/log/auth.log Vou pouvez aussi ajouter dans /etc/pam_ldap.conf :

debug 9

Autres docs utilisées :




pam_cas

Installation

On commence par télécharger les sources sur le site d'esup.

Décompressez les sources (adaptez le commande en changeant la version) :

tar xvzf Pam_cas-2.0.11-esup-X.X.X.tar.gz

Compiler les sources (dossier sources), choisissez le bon make en fonction de votre OS, pour debian :

cd sources
cp Makefile.Redhat Makefile
make

Nous allons aussi utiliser l'outil de test castest, il faut donc le compiler aussi :

make test
Si vous avez une architecture 64bit, vous allez devoir modifier/patcher le Makefile (plus d'info ici) :
diff Makefile.redhat Makefile
8c8
< CPFLAGS	=	-O2
---
> CPFLAGS	=	-O2 -fPIC
49a50,53
> 
> install:
> 	install -s -o0 -g0 -m644 pam_cas.so $(DESTDIR)/lib/security
> 	install -m640 ../pam_cas.conf $(DESTDIR)/etc/security

J'ai généré un fichier patch, pour l'appliquer (dans le dossier source) :

patch -p0 < patch.diff

Vérifiez bien que la librairie, pam_cas.so est généré, vous pouvez aussi tester castest avec un ./castest qui normalement devrait générer un erreur.

Vous allez ensuite copier le module pam_cas.so dans /lib/security/ :

cp pam_cas.so /lib/security/pam_cas.so



Configuration

Le fichier de configuration est : /etc/pam_cas.conf

Voici par exemple celui que nous utilisons :

host cas.mdl29.net
port 80
uriValidate /proxyValidate
ssl no
#LOG_DEBUG 10
#debug on
trusted_ca /etc/pam.d/ssl/Gandi.pem

Comme vous pouvez le constater, il est possible d'activer le débuggage et de régler son niveau, vous retrouverez les logs dans /var/log/auth.log.

Vous trouverez plus de détail sur la configuration dans ce tuto d'esup.

Nous avons étaient contrait d'utiliser le port 80 à cause d'un problème de certificat SSL (pris chez Gandhi) que la librairie n'acceptait pas.



On test

C'est maintenant que castest entre en action (à exécuter dans le dossier sources) :

./castest "imap://192.168.10.143" "ticket=ST-224-DFL5XDQ5s1Gf7PoZwCBl-localhost"

Castest fonction avec les arguments suivants :

./castest <service> <ticket> <fichier_de_configuration>

<Service> représente le libellé du service par exemple imap://mail.mdl29.net

Pour générer un ticket au niveau du CAS vous pouvez utiliser une url du type :

https://cas.mdl29.net/login?service=imap://mail.mdl29.net

ou si le CAS n'est pas à la racine https://cas.mdl29.net/cas/login?service=imap://mail.mdl29.net

Si vous rencontrez des problèmes, viellez vous référer à ce tuto d'esup.

Pile pam (simple)

Nous allons maintenant relier tout ceci à pam avec une petite pile pam.

Une pile pam représente la successions de module d'identification par lesquels vont passer les identifiants.
Si quelqu'un peut préciser la note précédente merci de le faire :)

Exemple d'une pile pam (CAS puis ldap) :

auth sufficient /lib/security/pam_cas.so -simap://mail.mdl29.net -f/etc/pam_cas.conf
auth sufficient /lib/security/pam_ldap.so
auth required /lib/security/pam_pwdb.so shadow nullok
Voir pour mettre une petite procédure de test de la pile, via la commande login par exemple utilisant la pile /etc/pam.d/login, ainsi rappeler la présence du mode de débuggage …

Un problème se pose, souvenez-vous un ticket n'est valide qu'une seule fois, par conséquent si on prend l'exemple d'un serveur mail, il n'est pas concevable de demander un nouveau ticket à cette requête imap.

La solution est simple mettre en cache le ticket, ce que nous allons faire avec pam_ccreds.



Sources utilisées

Pam_ccreds

Installer pam_ccreds :

apt-get install libpam-ccreds

Vérifier rapidement si /lib/security/pam_ccreds.so existe, si oui continuer.




Préparation de pile pam :

La pile PAM que nous utilisons

Voici la pile PAM que nous utilisons pour dovecot, l'intégration de cette pile pam et la configuration de dovecot sont ici.

auth    sufficient                                              /lib/security/pam_ccreds.so action=validate service_specific
auth    [success=1 new_authtok_reqd=done default=ignore]        /lib/security/pam_cas.so -simap://mail.mdl29.net -f/etc/pam_cas.conf
auth    [success=ok new_authtok_reqd=done default=die]          /lib/security/pam_ldap.so
auth    optional                                                /lib/security/pam_ccreds.so action=store timeout=300 service_specific

#La suite ne traite pas de l'authentification elle peut donc être exclue :
account required        /lib/security/pam_ldap.so

@include common-auth
@include common-account
@include common-session

Changez le libellé du service en fonction de vos besoins.

Cette pile peut certainement être amélioré, mais a le mérite de fonctionner FIXME



Comprendre la pile PAM

Une pile PAM c'est la suite des instructions que PAM va suivre pour authentifier un utilisateur, les identifiants vont passer dans les différentes librairies que nous avons installées en suivant certain règles.


Je vous rappelle le déroulement :

  • On vérifie si les identifiant ne sont pas déjà dans le cache (pam_ccreds)
  • Si le mot de passe a la structure d'un ticket de CAS (commençant par ST ou PT), on vérifie la validité du ticket auprès du CAS (pam_cas)
  • Sinon si l'étape précédente échoue, on va vérifier les identifiants auprès du LDAP (pam_ldap)
  • …. on peut rajouter autre chose si on veut se compliquer la vie :-) mais on ne va pas le faire
  • Enfin en tout dernier on met en cache l'identification, car je vous rappelle qu'on ticket n'est valide qu'une seule fois (pam_ccreds)


Chacune de ces étapes sera représentée par une ligne Auth dans la pile PAM.


A cela on ajoute quelques évidences :

  • Si pam_ccreds (ligne 1) retourne OK pas besoin de vérifier le reste sinon on continue, on l'indique par le mot clé : sufficient
  • pam_cas :
    • Si OK : il faut mettre en cache le ticket via pam_ccreds, on saute donc la ligne pam_ldap pour passer à la dernière ligne de mise en cache via pam_ccreds (dernière ligne) ceci est indiqué par : success=1 si on veut sauter 2 lignes success=2 ….
    • Sinon on continue dans la pile
  • pam_ldap, si OK, la pile est validée et c'est bon l'utilisateur est identifié, indiqué par : success=ok
  • pam_ccreds mise en cache : elle peut échouer ceci n'a pas d'importance d'ou le optional

Pour plus d'informations je vous propose cette doc.

Maintenant qu'on a notre pile PAM, reste plus qu'à la tester et à la mettre en place sur un serveur imap par exemple.

Comment tester si c'est bon ?

On va se baser sur la commande login à laquelle correspond la pile PAM /etc/pam.d/login : On fait un backup de la pile login :

cp /etc/pam.d/login /etc/pam.d/login.back

Puis on met notre pile PAM (du paragraphe précédant) dans le fichier /etc/pam.d/login :

nano /etc/pam.d/login

Enfin on tente de se connecter avec la commande login :

login

Essayez avec un compte ldap.

Je vous conseille d'utiliser castest pour les test avec des tickets CAS.

Cette méthode ne semble pas fonctionner avec des tickets du CAS FIXME

N'oubliez pas, les logs sont dans /var/logs/auth.log.

Après avoir effectué vos tests vous devez impérativement restaurer la pile login d'origine :

mv /etc/pam.d/login.back /etc/pam.d/login







Prêts a poursuivre ? Appliquons cette pile à un serveur imap (dovecot) : CASsification de dovecot
Ou a un serveur XMPP ejabberd CASsification d'ejabberd


Rédigé par Benjamin Bernard
Source : très diverses, doc d'esup, échanges de mails ….

braveo/docinstall/cas/pam.txt · Dernière modification : 2024/04/16 22:28 de 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki