Configuration d'une machine Linux cliente du LDAP

L'idée est d'utiliser un annuaire LDAP pour authentifier les utilisateurs qui se connecterons sur la machine Linux. L'approche classique sur des systèmes Unix pour avoir une base centrale d'utilisateurs est d'utiliser NIS. Nous allons voir comment utiliser une base LDAP pour faire le même travail.

Introduction

On suppose ici qu'un serveur LDAP tourne sans problème. Les entrées qui seront utilisées pour representer un compte doivent héritées des schémas posixAccount et shadowAccount. Ces schémas fournissent tous les attributs nécessaires pour remplacer les fichiers /etc/passwd et /etc/shadow. Pour changer le processus d'authentification classique, il faut installer PAM (Pluggable Authentification Module). C'est une bibliothèque qui permet de remplacer la source d'authentification par à peu près n'importe quoi (LDAP, SQL, fichier à plat, NIS, ...).

Installation des paquets

Installer les paquets suivants :

apt-get install libpam-ldap libpam0g libldap2 libpam-cracklib libnss-ldap nscd

Sous Debian lors de l'installation, répondre non à toutes les questions, puisque les fichiers de configuration seront écrasés par la suite.

Fichiers de configuration

/etc/pam.d/common-account

Le fichier common-account gère l'authorisation de connexion. On peut donner des restriction en fonction du login, de la date, de l'heure, etc. Modifier le fichier /etc/pam.d/common-account :

# Aucun paramètre n'est donnée pour la connexion
# c'est a dire que si l'utilisateur possede un compte
# local ou sur le ldap, il aura le droit de se connecter
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

Ici 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:         compat ldap
shadow:         compat ldap
group:          compat 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

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
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

/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

NSCD

A la fin de la configuration il faut redemarrer NSCD, pour qu'il prenne en compte la base LDAP. Un restart ne suffit pas, car il faut invalider la base :

/etc/init.d/nscd stop
/etc/init.d/nscd start