5. Configuration de l'accès client au serveur LDAP

Dans cette section, on suppose qu'un annuaire LDAP existe et qu'il contient des comptes utilisateurs. On se propose de configurer un poste client pour qu'il obtienne de façon transparente les informations sur les comptes utilisateurs desservis par l'annuaire.

5.1. Interrogation à distance de l'annuaire LDAP

On reprend ici les requêtes de consultation des entrées de l'annuaire vues dans la Section 4.4, « Composition d'un nouvel annuaire LDAP ». Cette fois-ci les requêtes sont émises depuis un hôte réseau différent du serveur LDAP.

Q20.

Quel est le paquet qui fournit, entre autres, la commande de consultation des entrées de l'annuaire ?

Interroger la base de données des paquets pour obtenir les informations demandées.

# aptitude install ldap-utils

Le paquet ldap-utils apparaît à la question sur la liste des paquets relatifs au service LDAP. Si on recherche les commandes présentes dans la liste des fichiers de ce paquet, on obtient les informations suivantes.

$ dpkg -L ldap-utils | grep bin
/usr/bin
/usr/bin/ldapmodrdn
/usr/bin/ldappasswd
/usr/bin/ldapdelete
/usr/bin/ldapsearch
/usr/bin/ldapmodify
/usr/bin/ldapexop
/usr/bin/ldapurl
/usr/bin/ldapcompare
/usr/bin/ldapwhoami
/usr/bin/ldapadd

Une fois ce paquet installé, il est possible d'utiliser toutes les commandes disponibles pour manipuler les enregistrements de l'annuaire.

Q21.

Quelle est la syntaxe d'interrogation de l'annuaire qui permet d'obtenir tous les attributs de l'enregistrement correspondant à un utilisateur particulier ?

On reprend la commande ldapsearch en spécifiant un attribut uid particulier.

# ldapsearch -LLL -H ldap://192.0.2.12 \
        -b dc=lab,dc=stri -D cn=admin,dc=lab,dc=stri -W uid=padme
Enter LDAP Password:
dn: uid=padme,ou=people,dc=lab,dc=stri
objectClass: inetOrgPerson
objectClass: shadowAccount
objectClass: posixAccount
cn: Padme
sn:: UGFkbcOpIEFtaWRhbGEgU2t5d2Fsa2Vy
uid: padme
uidNumber: 10000
gidNumber: 10000
loginShell: /bin/bash
homeDirectory: /ahome/padme
userPassword:: e1NTSEF9THJQRnZjNllla1RHU0VZaU1lenhZeGNtRS8wWkUvOUw=
gecos: Padme Amidala Skywalker

Q22.

Quelle est la syntaxe de la commande permettant de changer le mot de passe de l'utilisateur dont on an affiché les attributs à la question précédente ?

On utilise la commande ldappasswd fournie par le paquet ldap-utils comme dans le cas de la commande de recherche. Après consultation des pages de manuels, on obtient la syntaxe suivante.

# ldappasswd -x -H ldap://192.0.2.12 \
        -D cn=admin,dc=lab,dc=stri -W -S uid=padme,ou=people,dc=lab,dc=stri
New password:
Re-enter new password:
Enter LDAP Password:

En posant exactement la même requête que dans la question précédente, on peut vérifier que le mot de passe utilisateur a bien été modifié.

# ldapsearch -LLL -H ldap://192.0.2.12 \
        -b dc=lab,dc=stri -D cn=admin,dc=lab,dc=stri -W uid=padme
Enter LDAP Password:
dn: uid=padme,ou=people,dc=lab,dc=stri
objectClass: inetOrgPerson
objectClass: shadowAccount
objectClass: posixAccount
cn: Padme
sn:: UGFkbcOpIEFtaWRhbGEgU2t5d2Fsa2Vy
uid: padme
uidNumber: 10000
gidNumber: 10000
loginShell: /bin/bash
homeDirectory: /ahome/padme
gecos: Padme Amidala Skywalker
userPassword:: e1NTSEF9blZYUG9NTTNOdVdoZWFSOTBMZFBkY1lGZGRvSEVlTEY=

5.2. Configuration Name Service Switch

Les manipulations présentées ici ont pour but de rendre transparent l'accès aux attributs des comptes utilisateurs. Le mécanisme Name Service Switch assure un aiguillage de l'accès à ces attributs entre les fichiers locaux et les différents services réseau disponibles. Ici, l'annuaire LDAP constitue un dépôt de référence pour le stockage des attributs des comptes utilisateurs.

Q23.

Quel est le nom du paquet relatif au mécanisme Name Service Switch permettant d'accéder aux ressources de l'annuaire LDAP ?

Rechercher dans les bases du gestionnaire de paquets un paquet dont le nom débute par la chaîne libnss.

La liste ci-dessous permet d'identifier le paquet libnss-ldapd.

# aptitude search ^libnss-
p   libnss-cache      - NSS module for using nsscache-generated files
p   libnss-db         - Module NSS pour utiliser des bases de données Berkeley
                                                comme service de noms
p   libnss-docker     - nss module for finding Docker containers
p   libnss-extrausers - nss module to have an additional passwd, shadow and
                                                group file
p   libnss-gw-name    - nss module that names the current gateway’s IP address
p   libnss-ldap       - NSS module for using LDAP as a naming service
p   libnss-ldapd      - NSS module for using LDAP as a naming service
p   libnss-libvirt    - nss plugin providing IP add ress resolution for virtual
                                                machines
p   libnss-lwres      - NSS module for using bind9's lwres as a naming service
i A libnss-mdns       - module NSS pour la résolution de nom Multicast DNS
p   libnss-myhostname - nss module providing fallback resolution for the
                                                current hostname
p   libnss-mymachines - nss module to resolve hostnames for local container
                                                instances
v   libnss-pgsql1     -
p   libnss-pgsql2     - NSS module for using PostgreSQL as a naming service
p   libnss-rainbow2   - nss library for rainbow
p   libnss-resolve    - module NSS pour la résolution de nom avec
                                                systemd-resolved
p   libnss-securepass - NSS (Name Service Switch) module for Securepass
p   libnss-sss        - Nss library for the System Security Services Daemon
p   libnss-systemd    - nss module providing dynamic user and group name
                                                resolution
p   libnss-winbind    - greffons d'intégration de service de nom pour Samba
p   libnss-wrapper    - NSS wrapper library
[Avertissement] Avertissement

Relativement au paquet libnss-ldap, le paquet libnss-ldapd modifie directement les paramètres des fichiers /etc/pam.d/common-*.

Q24.

Quels sont les paquets supplémentaires qui sont ajoutés lors de l'installation des bibliothèques LDAP pour le mécanisme Name Service Switch ?

Utiliser les informations fournies par le gestionnaire de paquets pour chaque ajout.

Le lancement de l'installation du paquet libnss-ldapd donne la liste suivante.

# aptitude install libnss-ldapd                                     
Les NOUVEAUX paquets suivants vont être installés :                                           
  libnss-ldapd libpam-ldapd{a} nscd{a} nslcd{a} nslcd-utils{a}                                
0 paquets mis à jour, 5 nouvellement installés, 0 à enlever et 0 non mis à jour.              
Il est nécessaire de télécharger 669 ko d'archives. Après dépaquetage,
1 286 ko seront utilisés.                                                                                             
Voulez-vous continuer ? [Y/n/?]

Plusieurs paquets supplémentaires apparaissent :

  • libpam-ldapd fournit les fonctions PAM nécessaires à l'authentification, aux autorisations et à la gestion de session via un annuaire LDAP.

  • nscd (Name Service Cache Daemon) est un démon qui gère la recherche des mots de passe, des groupes et hôtes des programmes en cours d’exécution, et met en cache le résultat pour une prochaine recherche.

  • nslcd fournit una autre démon pour la collecte des informations sur les comptes utilisateurs depuis un serveur LDAP.

  • nslcd-utils fournit des outils pour l'interrogation et la mise à jour des entrées d'annuaire LDAP.

[Avertissement] Avertissement

Pour les besoins des travaux pratiques ou de la mise au point de l'authentification via LDAP, il est utile de désactiver les services de cache qui ne sont utiles qu'en exploitation avec un grand nombre d'entrées dans l'annuaire.

# systemctl stop nscd

Q25.

Quel est le rôle de l'interface entre les fonctions PAM (Pluggable Authentication Modules) et l'annuaire LDAP ?

Par définition, PAM est un mécanisme qui permet d'intégrer différents modes d'authentification en les rendant transparents vis à vis de l'utilisateur et des logiciels qui accèdent aux ressources du système. Dans le contexte de ces travaux pratiques, il s'agit de permettre à l'utilisateur de se connecter, d'accéder au système de fichiers, de changer son mot de passe, etc sans avoir à lancer des commandes spécifiques.

Q26.

Quelles sont les principales étapes de la configuration des paquets de bibliothèques NSS et PAM ?

Lors de l'installation des principaux paquets de bibliothèques LDAP, on passe par une série de menus debconf qu'il faut renseigner correctement pour accéder au serveur LDAP de façon transparente.

[Avertissement] Avertissement

En cas d'erreur de saisie dans la série de menus ci-dessous, il faut reprendre la configuration de chacun des deux paquets individuellement. Classiquement, on passe par la commande dpkg-reconfigure.

# dpkg-reconfigure libnss-ldapd
# dpkg-reconfigure libpam-ldapd
# dpkg-reconfigure nslcd

Q27.

Quelles sont les modifications apportées au fichier de configuration /etc/nsswitch.conf pour activer l'accès aux ressources de l'annuaire LDAP ?

Lors de l'installation des paquets à l'étape précédente, le fichier /etc/nsswitch.conf a été modifié.

# grep ldap /etc/nsswitch.conf 
passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap

Q28.

Comment illustrer simplement le fonctionnement du mécanisme Name Service Switch intégrant l'utilisation de l'annuaire LDAP ?

Rechercher la commande de récupération des entrées depuis les bases de données d'administration dans les outils fournis avec les bibliothèques standard (paquet libc-bin).

La commande getent fournie avec le paquet libc-bin donne la liste des entrées accessibles pour chaque catégorie du fichier de configuration. Voici un exemple pour la catégorie passwd qui fait apparaître les entrées de l'annuaire LDAP à la suite des comptes utilisateurs système issus des fichiers locaux.

# getent passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
Debian-exim:x:101:103::/var/spool/exim4:/bin/false
statd:x:102:65534::/var/lib/nfs:/bin/false
sshd:x:103:65534::/var/run/sshd:/usr/sbin/nologin
etu:x:1000:1000:Etudiant,,,:/home/etu:/bin/bash
rdnssd:x:104:65534::/var/run/rdnssd:/bin/false
systemd-timesync:x:105:108:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:106:109:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:107:110:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:108:111:systemd Bus Proxy,,,:/run/systemd:/bin/false
messagebus:x:109:113::/var/run/dbus:/bin/false
uuidd:x:100:101::/run/uuidd:/bin/false
_apt:x:110:65534::/nonexistent:/bin/false
avahi:x:111:116:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/usr/sbin/nologin
nslcd:x:112:117:nslcd name service LDAP connection daemon,,,:/var/run/nslcd/:/usr/sbin/nologin
padme:x:10000:10000:Padme Amidala Skywalker:/ahome/padme:/bin/bash
anakin:x:10001:10001:Anakin Skywalker:/ahome/anakin:/bin/bash
leia:x:10002:10002:Leia Organa:/ahome/leia:/bin/bash
luke:x:10003:10003:Luke Skywalker:/ahome/luke:/bin/bash

Q29.

Comment valider l'authentification d'un utilisateur déclaré dans l'annuaire LDAP ?

Choisir un service qui nécessite une authentification sur le système et qui utilise une entrée de l'annuaire LDAP.

[Avertissement] Avertissement

Après chaque manipulation sur la configuration des paquets libnss-ldapd et nslcd, il faut impérativement relancer le démon de gestion du cache des services de noms : # systemctl restart nscd.

Sans le redémarrage de ce démon, il est fréquent que les tests de connexion échouent alors que la configuration système est correcte.

Les exemples de services nécessitant une authentification ne manquent pas. La commande su qui permet de changer d'identité est le plus immédiat.

etu@LDAP-Client:~$ su luke
Mot de passe : 
luke@LDAP-Client:/home/etu$ cd
bash: cd: /ahome/luke: Aucun fichier ou dossier de ce type

Dans les journaux du système, on retrouve les mêmes éléments.

# grep luke /var/log/auth.log
LDAP-Client su[1676]: pam_unix(su:auth): authentication failure; logname=etu
                uid=1000 euid=0 tty=/dev/pts/0 ruser=etu rhost=  user=luke
LDAP-Client su[1676]: Successful su for luke by etu
LDAP-Client su[1676]: + /dev/pts/0 etu:luke
LDAP-Client su[1676]: pam_unix(su:session): session opened for user luke by
                etu(uid=1000)
LDAP-Client su[1676]: pam_unix(su:session): session closed for user luke

Voici un autre exemple d'accès avec SSH.

$ ssh anakin@fe80::b8ad:caff:fefe:65%vlan10
Warning: Permanently added 'fe80::b8ad:caff:fefe:65%vlan10' (ECDSA) to the list
of known hosts.
anakin@fe80::b8ad:caff:fefe:65%vlan10's password: 
Linux LDAP-Client 4.12.0-1-686-pae #1 SMP Debian 4.12.6-1 (2017-08-12) i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Could not chdir to home directory /ahome/anakin: No such file or directory

Il ne manque que l'accès au système de fichiers pour que la configuration soit vraiment complète.