Pre-réquis:
Vérifier la présence des packages libpam-ldap(librairie de connexion entre pam(pluggable authentication module) et ldap) et libnss-ldap(librairie de connexion entre nsswitch(name service switch configuration) et ldap(Lightweight Directory Access Protoco)):
#dpkg -l ‘lib*ldap’
Vérifier la présence du package gdm(Gnome Display Manager: gestionnaire interface graphique sous gnome)(kdm pour KDE)
#dpkg -l ‘lib*ldap’ gdm
Sinon les installer comme dans l’exemple ci-dessous:
#apt-get install libpam-ldap libpam0g libldap2 libpam-cracklib libnss-ldap nscd gdm ldap-utils(outils requetes ldap)
Vérifier que les comptes des utilisateurs dans ldap héritent des schémas posixAccount et shadowAccount
Configuration de l’authentification pam+ldap:
Fichiers de configuration à modifier
/etc/pam.d/common-account (Le fichier common-account gère l’autorisation de connexion. On peut donner des restrictions en fonction du login, de la date, de l’heure, etc. Modifier le fichier /etc/pam.d/common-account)
account required pam_unix.so
account sufficient pam_ldap.so
/etc/pam.d/common-auth(Le fichier commmon-auth gère l’authentification. On y met les modules que l’on souhaite voir tester les couples login/mot de passe. Modifier le fichier /etc/pam.d/common-auth )
# Les variables d’environement par defaut sont placees dans /etc/security/pam_env.conf
auth required pam_env.so
# interroge le fichier /etc/passwd et si l’authentification est bonne, alors
# PAM retourne ok et quitte
auth sufficient pam_unix.so
# interroge le LDAP et si l’authentification est bonne, alors PAM retourne ok
# et quitte
auth sufficient pam_ldap.so use_first_pass
# si tout a echoue alors PAM retourne mauvaise authentification et quitte
auth required pam_deny.so
/etc/pam.d/common-password(Le fichier common-password gère le changement de mot de passe. Modifier le fichier /etc/pam.d/common-password):
password required pam_cracklib.so retry=3 minlen=6
password sufficient pam_unix.so use_authtok md5 shadow
password sufficient pam_ldap.so use_authtok
password required pam_deny.so
/etc/pam.d/common-session(Le fichier common-session gère l’ouverture de session. Modifier le fichier /etc/pam.d/common-session):
# charge le fichier /etc/security/limits.conf et pose de limites pour
# l’utilisateur qui se connecte
session required pam_limits.so
session required pam_unix.so
session optional pam_ldap.so
/etc/nsswitch.conf(on met files avant ldap pour que le root de la machine cliente puisse se connecter en s’authentifiant avec un mot de passe local. Modifier le fichier /etc/nsswitch.conf, pour qu’il soit):
passwd: files ldap
shadow: files ldap
group: files ldap
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
/etc/nscd.conf(L’intérêt d’installer nscd est d’avoir un meilleur temps de réponse lorsque l’on interroge un service qui doit accèder à la liste des utilisateurs. Modifiez le fichier /etc/nscd.conf, si nscd est installé. Le point sensible semble être les groupes):
# enable-cache : booleen yes ou no.
# positive-time-to-live : nombre de secondes après lesquelles
# les entrées mises en cache sont retirées.
# negative-time-to-live : pour les entrées non trouvées
# précédement, nombre de secondes après lesquelles les
# entrées mises en cache sont retirées.
# suggested-size : taille du hachage qui sera utilisé pour stocker
# les entrées. La taille doit être plus grande que le nombre de
# données que l’on veux stocker et être un nombre premier.
# check-files : test si les fichiers ont changé depuis la
# derniere fois.
enable-cache passwd yes
positive-time-to-live passwd 300
negative-time-to-live passwd 20
suggested-size passwd 3001
check-files passwd yes
enable-cache group yes
positive-time-to-live group 3600
negative-time-to-live group 20
suggested-size group 211
check-files group yes
enable-cache hosts no
positive-time-to-live hosts 3600
negative-time-to-live hosts 20
suggested-size hosts 211
check-files hosts yes
/etc/ldap/ldap.conf ou /etc/ldap.conf(Modifier le fichier /etc/ldap/ldap.conf (mode 644). Pour la prise en compte du TLS il faut télécharger le certificat de l’autorité de certification du serveur LDAP et le copier dans le répertoire /etc/ldap/ (ou ailleurs mais alors il faut modifier les lignes qui suivent). Attention : La clé du serveur est générée en fonction de son nom (FQDN), il faut donc toujours faire référence au serveur LDAP par son FQDN et pas par son IP si on veut faire du TLS):
# L’attribut BASE indique le DN de la base ldap
BASE dc=example,dc=com
# le nom du serveur ou uri ldap://ldap.example.com/
HOST ldap.example.com
# Les commande suivant indique sont utiles uniquement si
# on souhaite se connecter en TLS
TLS_CACERT /etc/ldap/cachain.txt
TLS_REQCERT demand
#attention a la configuration du rootbinddn
rootbinddn uid=admin,dc=….
/etc/libnss-ldap.conf(Le fichier /etc/libnss-ldap.conf configure l’access de Name Service Switch au LDAP. Attention ce fichier doit être en mode 644 sinon au login le nom de l’utilisateur sera “I have no name!”):
host ldap.example.com
base dc=example,dc=com
ldap_version 3
/etc/pam_ldap.conf(Le fichier /etc/pam_ldap.conf configure l’access de PAM au LDAP (mode 644) ):
host ldap.example.com
base dc=exemple,dc=net
ldap_version 3
pam_password md5
# pour filter les personnes en fonction de certain de leur attributs LDAP on peut utiliser la directive suivant (a adapter)
#pam_filter &(attribut=valeur)(objectClass=person)
# utilise tls pour la connexion
ssl start_tls
# demande et verifie le certificat serveur
tls_checkpeer yes
# certificat CA du serveur
tls_cacertfile /etc/ldap/cachain.txt
il faut redemarrer/lancer pam-auth-update et NSCD, pour qu’il prenne en compte la base LDAP(stop+start).
Vérifier le log systems si necessaire /var/log/auth.log
Création automatique du compte de l’utilisateur ldap localement
Ajouter à la fin du fichier /etc/pam.d/common-account les lignes suivantes:
session required pam_mkhomedir.so umask=0022 skel=/etc/skel/ silent
Debogage de la connexion:
1)Stopper le service nscd
#nscd stop
2) Stopper le service nlscd
#nlscd stop
3) Lance le service nlscd en mode debug:
#nlscd -d