Authentification centralisée – Configuration client

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.

 

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s