Introduction
Ce document va expliquer la configuration d’un client Linux pour s’authentifier sur un serveur LDAP.
Cela s’applique aussi bien à une distribution Linux, testé sur Debian Sarge & Etch, que sur FreeBSD, testé en 6.2.
Nous utiliserons PAM LDAP et LibNSS LDAP.
Prérequis
Il faudra biensûr avoir un serveur LDAP fonctionnel avec des entrées LDAP pour les utilisateurs et les groupes. Je considère que vous avez suivi les explications provenant du document: Configuration LDAP du serveur.
Voir les utilisateurs et groupes du serveur LDAP: nss_ldap
Pour cela nous allons utiliser nss_ldap. Sur FreeBSD, le nom du port est nss_ldap et sur Debian, le nom du paquet est libnss-ldap.
Définition de l’accès au serveur LDAP
Il faut éditer le fichier de configuration: /etc/libnss-ldap.conf sur Debian GNU/Linux et le fichier /usr/local/etc/nss_ldap.conf. Il devra être la forme suivante:
# Le base DN de notre annuaire base o=free-4ever,dc=net # L'adresse pour joindre notre serveur slapd uri ldaps://annuaire.free-4ever.net # La version du protocole de communication ldap_version 3 # Un DN qui a suffisament de droit sur nos utilisateurs et groupes # Son mot de passe correspondant est dans le fichier ldap.secret rootbinddn cn=admin,o=free-4ever,dc=net # On indique où aller chercher les utilisateurs et les groupes # Cela évite les recherches sur tout l'annuaire nss_base_passwd ou=users,o=free-4ever,dc=net?one nss_base_shadow ou=users,o=free-4ever,dc=net?one nss_base_group ou=groups,o=free-4ever,dc=net?one # On utilise une communication SSL ssl start_tls ssl on
Il faudra placer le mot de passe correspondant au rootbinddn dans le fichier /etc/libnss-ldap.secret sur Debian et dans le fichier /usr/local/etc/nss_ldap.secret sur FreeBSD. Attention aux droits sur ce fichier.
Quelles informations récupérer dans le LDAP
Il faudra éditer le fichier: /etc/nsswitch.conf que l’on soit sur Debian ou FreeBSD. Le mot clef ici sera ldap que l’on devra ajouter sur les lignes correspondant aux informations que l’on souhaite récupérer dans le LDAP. Le fichier sera de la forme suivante:
[...] passwd: files ldap group: files ldap shadow: files ldap [...]
Tester la récupération des informations
Il suffit d’utiliser la commande getent pour tester nos modifications.
Pour les utilisateurs, taper la commande suivante: getent passwd. La sortie doit être de la forme suivante:
[...] guillaume:x:10000:10000:guillaume lohez:/home/guillaume:/bin/bash [...]
On doit biensûr voir les utilisateurs locaux aussi !
Pour les groupes, taper la commande suivante: getent group. La sortie doit être de la forme suivante:
[...] utilisateurs:x:10000:guillaume [...]
On doit biensûr voir les groupes locaux aussi !
S’authentifier avec les utilisateurs: pam_ldap
Pour cela nous allons utiliser pam_ldap. Sur FreeBSD, le nom du port est pam_ldap et sur Debian, le nom du paquet est pam-ldap.
Définition de l’accès au serveur LDAP
Il faut éditer le fichier de configuration: /etc/pam_ldap.conf sur Debian GNU/Linux et le fichier /usr/local/etc/ldap.conf. Il devra être la forme suivante:
# Le base DN de notre annuaire base o=free-4ever,dc=net # L'adresse pour joindre notre serveur slapd uri ldaps://annuaire.free-4ever.net # La version du protocole de communication ldap_version 3 # Un DN qui a suffisament de droit sur nos utilisateurs et groupes # Son mot de passe correspondant est dans le fichier ldap.secret rootbinddn cn=admin,o=free-4ever,dc=net # Facon de hashé les passwords # On laisse faire le serveur LDAP pam_password exop # On indique où aller chercher les utilisateurs et les groupes # Cela évite les recherches sur tout l'annuaire nss_base_passwd ou=users,o=free-4ever,dc=net?one nss_base_shadow ou=users,o=free-4ever,dc=net?one nss_base_group ou=groups,o=free-4ever,dc=net?one # On utilise une communication SSL ssl start_tls ssl on
Il faudra placer le mot de passe correspondant au rootbinddn dans le fichier /etc/pam_ldap.secret sur Debian et dans le fichier /usr/local/etc/ldap.secret sur FreeBSD. Attention aux droits sur ce fichier.
Cela ressemble étrangement au fichier libnss-ldap.conf… Il n’y a que la ligne sur le hashage des passwords en plus… comme elle ne gène pas pour nss_ldap, certains systèmes ne font qu’un seul fichier et des liens avec les noms réels des fichiers.
Quels services utilisent le LDAP pour l’authentification ?
Il faudra éditer un ou plusieurs fichiers se trouvant dans le répertoire: /etc/pam.d. Il y a un fichier par service qui utilise PAM.
Par exemple, si on souhaite que racoon utilise PAM pour authentifier nos utilisateurs IPsec roadwarrior(Voir le document: RoadWarrior Server). On éditera le fichier /etc/pam.d/racoon.
Il devra être de la forme suivante:
auth sufficient pam_ldap.so account sufficient pam_ldap.so password sufficient pam_ldap.so
Dans ce cas, racoon ne pourra utiliser que le LDAP pour authentifier ses utilisateurs !
Mais on peut très bien mélanger les sources d’authentification entre les utilisateurs locaux, le fichier /etc/passwd et les utilisateurs LDAP.
Si on souhaite faire cela pour les logins via SSH, on édite le fichier /etc/pam.d/ssh et il devra être de la forme suivante:
[...] auth sufficient pam_ldap.so auth required pam_unix.so nullok_secure try_first_pass account sufficient pam_ldap.so account required pam_unix.so session required pam_unix.so password sufficient pam_ldap.so password required pam_unix.so nullok obscure min=4 max=8 md5 [..]
Pour les logins locaux, il faudra éditer le fichier /etc/pam.d/login.
Sur Debian, il y a un mécanisme d’inclusion de fichiers qui a été utilisé. Toutes les services utilisant PAM incluent dans leur fichier propre, des fichiers common-*. Cela permet de donner les différentes sources d’authentification à tous les services sans modifier les fichiers un par un.
Prenons un exemple avec le login local.
Le fichier /etc/pam.d/login est de la forme suivante:
[...] # Standard Un*x authentication. The "nullok" line allows passwordless # accounts. @include common-auth # Standard Un*x account and session @include common-account @include common-session # Standard Un*x account and session @include common-password [...]
on y inclut donc, entre autres directives, les fichiers communs.
Dans le cas d’une authentification mixte entre utilisateurs locaux et LDAP, ils sont de la forme suivante:
# /etc/pam.d/common-auth - authentication settings common to all services auth sufficient pam_ldap.so auth required pam_unix.so nullok_secure try_first_pass
# /etc/pam.d/common-account - authorization settings common to all services account sufficient pam_ldap.so account required pam_unix.so
# /etc/pam.d/common-password - password-related modules common to all services password sufficient pam_ldap.so password required pam_unix.so nullok obscure min=4 max=8 md5
Il n’est pas nécessaire de faire des modifications au fichier common-session.
Du côté FreeBSD, il y a aussi un mécanisme d’inclusion de fichier pour ne pas devoir tous les éditer un par un.
Il n’y a qu’un seul fichier qui est inclut dans les fichiers spécifiques à chaque service. Il s’appelle system et se trouve dans /etc/pam.d.
Il est de la forme suivante:
# auth auth sufficient pam_opie.so no_warn no_fake_prompts auth requisite pam_opieaccess.so no_warn allow_local #auth sufficient pam_krb5.so no_warn try_first_pass #auth sufficient pam_ssh.so no_warn try_first_pass auth sufficient /usr/local/lib/pam_ldap.so no_warn try_first_pass auth required pam_unix.so no_warn try_first_pass nullok # account #account required pam_krb5.so account required pam_login_access.so account sufficient /usr/local/lib/pam_ldap.so account required pam_unix.so # session #session optional pam_ssh.so session required pam_lastlog.so no_fail # password #password sufficient pam_krb5.so no_warn try_first_pass password sufficient /usr/local/lib/pam_ldap.so no_warn try_first_pass password required pam_unix.so no_warn try_first_pass
Les lignes contenant pam_ldap.so ont été ajoutées pour utiliser l’authentification LDAP.
Tester l’authentification
Rien de particulier à dire, il suffit de s’authentifier sur un service sur lequel on a déclaré les utilisateurs LDAP.
Plusieurs remarques quand même:
- L’utilisateur en question doit avoir un mot de passe dans son entrée LDAP.
- Si le login/password ne fonctionne pas, vous pouvez redémarrer le daemon nscd si il est installé… c’est un cache d’authentification, donc il pourrait avoir mis en cache des informations invalides avant que les accès au serveur LDAP ne soient configurés correctement.
Mot de la fin
Nos utilisateurs peuvent maintenant s’authentifier sur les différentes machines avec un seul et même couple login/password.
Le serveur où le daemon slapd est installé peu biensûr être configuré comme client en même temps !
Il reste une limitation majeure… les répertoires home des utilisateurs sont sur une seule machine… Le serveur LDAP ou même un autre serveur lui-même client du LDAP pour l’authentification !
Pour corriger cela, nous allons utiliser le NFS comme expliqué dans le document suivant: Partage des répertoires home.