EPFL-ENAC | Informatique ENAC-IT

Authentification avec PAM & LDAP

1. Introduction

1.1 Résumé

Sur un système Linux, les utilisateurs sont par défaut authentifiés localement grace aux fichiers de configuration : /etc/passwd , /etc/shadow et /etc/group .
Dans le cas où plusieurs utilisateurs sont amenés à utiliser un ou plusieurs postes de travail, il peut devenir intéressant de sous-traiter l'authentification à LDAP.

1.2 Systèmes d'exploitation testés

Certaines opérations sont spécifiques à une version de l'OS. Le logo qui précède le précise.

1.3 Changement des paramètres Unix

Par défaut à l'EPFL, le shell attribué aux utilisateurs est le tcsh.
Si cela ne vous convient pas, vous pouvez le changer ici : https://cadiwww.epfl.ch/accountprefs

2. Installation et configuration PAM_LDAP

2.1 Suppression d'un paquet

Suppression d'un paquet qui pose problème avec des annuaires LDAP comportant des milliers de comptes : ubuntu 8.04 ubuntu 8.10 ubuntu 9.04
sudo aptitude remove fast-user-switch-applet
Accepter de dés-installer le paquet dépendant ubuntu-desktop

2.2 Installation des paquets nécessaires :

ubuntu 8.04 ubuntu 8.10 ubuntu 9.04
sudo aptitude install libpam-ldap auth-client-config ldap-auth-client ldap-auth-config libnss-ldap nscd tcsh
L'installation de ldap-auth-config va poser quelques questions qui serviront à pré-configurer libpam-ldap :

2.3 Modification des fichiers de configuration :

ubuntu 8.04 ubuntu 8.10 ubuntu 9.04
sudo cp -p /etc/ldap.conf /etc/ldap.conf.0
Éditer le fichier /etc/ldap.conf
host ldap.epfl.ch
base o=epfl,c=ch
ldap_version 3
pam_member_attribute memberuid
pam_password md5
nss_map_attribute memberuid
ssl start_tls
tls_checkpeer yes
tls_cacertfile /etc/ssl/epfl.pem
nss_initgroups_ignoreusers avahi,avahi-autoipd,backup,bin,daemon,dhcp,games,gdm,gnats,haldaemon,hplip,irc,klog,libuuid,list,lp,mail,man,messagebus,news,polkituser,proxy,pulse,root,sshd,statd,sync,sys,syslog,uucp,www-data
# pam_filter utile pour limiter les ayant-droit. Ex pour ENACIT :
# pam_filter ou=enac-it
ubuntu 8.04 ubuntu 8.10 ubuntu 9.04
Éditer le fichier /etc/ssl/epfl.pem et y coller le contenu de la clef PEM depuis la page http://certauth.epfl.ch/CA/cacert.html .
!!! Attention, les lignes contenant "BEGIN CERTIFICATE" et "END CERTIFICATE" font partie intégrante du certificat !!!

ubuntu 8.04 ubuntu 8.10 ubuntu 9.04
sudo cp -p /etc/ldap/ldap.conf /etc/ldap/ldap.conf.0
Éditer le fichier /etc/ldap/ldap.conf
HOST         ldap.epfl.ch
BASE         o=epfl,c=ch
TLS_REQCERT  never
ubuntu 8.04 ubuntu 8.10 ubuntu 9.04
sudo cp -p /etc/nsswitch.conf /etc/nsswitch.conf.0
Éditer le fichier /etc/nsswitch.conf
passwd:         files ldap
group:          files ldap
shadow:         files ldap
hosts:          files dns
networks:       files
protocols:      db files
services:       db files
ethers:         db files
rpc:            db files
netgroup:       nis
ubuntu 8.04
sudo cp -p /etc/pam.d/common-account /etc/pam.d/common-account.0
Éditer le fichier /etc/pam.d/common-account
account sufficient	pam_ldap.so
account	required	pam_unix.so
ubuntu 8.04
sudo cp -p /etc/pam.d/common-auth /etc/pam.d/common-auth.0
Éditer le fichier /etc/pam.d/common-auth
auth	required	pam_group.so use_first_pass
auth	sufficient	pam_ldap.so
auth	required	pam_unix.so nullok_secure use_first_pass
ubuntu 8.04
sudo cp -p /etc/pam.d/common-password /etc/pam.d/common-password.0
Éditer le fichier /etc/pam.d/common-password
password   sufficient  pam_ldap.so
password   required    pam_unix.so nullok obscure md5
ubuntu 8.04
sudo cp -p /etc/pam.d/common-session /etc/pam.d/common-session.0
Éditer le fichier /etc/pam.d/common-session
session sufficient	pam_ldap.so
session	required	pam_unix.so

2.4 Clear du cache ldap :

ubuntu 8.04 ubuntu 8.10 ubuntu 9.04
sudo /etc/init.d/nscd reload

3. Configuration pour la création du home directory

Dans le cas où un utilisateur se connecterait pour la première fois grace à LDAP, il n'a par défaut pas de "home directory" déjà présent. Nous pouvons combler ce manque avec le module pam_mkhomedir.so.

3.1 Activation du module pam_mkhomedir.so :

ubuntu 8.04 ubuntu 8.10 ubuntu 9.04
sudo cp -p /etc/pam.d/common-session /etc/pam.d/common-session.1
Éditer le fichier /etc/pam.d/common-session
# ajout en première instruction non commentée :
session required	pam_mkhomedir.so skel=/etc/skel/

4. Filtre de sécurité

ubuntu 8.04 ubuntu 8.10 ubuntu 9.04
Une fois l'authentification configurée, toute personne ayant un compte sur le ldap utilisé (ici celui de l'epfl) peut s'authentifier sur la machine.
Ceci est pratique, mais comporte un grand risque de sécurité (imaginez qu'il suffit d'un seul compte utilisateur avec un mot de passe "faible").
Il vous est donc nécessaire de configurer le paramètre pam_filter du fichier /etc/ldap.conf selon vos besoins.

Exemples de configuration :

Pour un "Organization Unit" spécifique
pam_filter ou=enac-it
Pour plusieurs "Organization Units" (opération "ou" logique)
pam_filter |(ou=enac-it)(ou=enac-sg)
Pour un groupe donné (au sens unix)
pam_filter gidNumber=10184
Pour plusieurs utilisateurs (version numérique)
pam_filter |(uidNumber=90989)(uidNumber=6843)
Pour plusieurs utilisateurs (version nommée)
pam_filter |(uid=bancal)(uid=dameylan)

Il est possible de connaître tous les critères sur lesquels on peut appliquer un filtre et les valeurs qui leurs sont associées.
Pour cela utiliser l'outil ldapsearch (Attention, manipuler avec précautions).
Installation :

sudo aptitude install ldap-utils
Utilisation :
ldapsearch -x -H ldap://ldap.epfl.ch -b o=epfl,c=ch uid=bancal

5. Références