Vous êtes sur la page 1sur 18

Services Réseaux

TP 8
Mise en place et administration d’un serveur
LDAP
1. Mise en garde
Les TP réseaux sont difficiles pour plusieurs raisons :
 l’interaction avec la machine n’est pas toujours triviale ;
 trouver l’erreur commise peut s’avérer long et fastidieux ; le temps perdu ne se rattrape
pas ;
En conséquence :
 soyez attentif à ce que vous faites lors de la configuration des machines ;
 soyez attentif à votre voisin, sachez travailler ensemble et suivez le rythme de
progression de la salle ;
 soyez calme et discret : le bruit est le principal élément perturbateur et nuit gravement à
la compréhension ; la quiétude dans une salle de TP permet d’éviter de nombreuses
erreurs.
Remarques préliminaires :
 utilisez Ctrl & Alt & F1-6 pour passer d’une console à l’autre ; l’utilisation de
l’interface graphique de Linux est autorisée uniquement pour les analyses réalisées
avec Wireshark ;
 le seul éditeur de texte autorisé pendant les TP est vi !
 une fois connectés en tant que root changez le mot de passe de root en utilisant la
commande passwd (vous éviterez ainsi d’être perturbés par les éventuelles mauvaises
blagues de vos collègues).

2. Objectifs du TP
1. Construction de la base de données de l’annuaire LDAP.
2. Administration et consultation de LDAP en ligne de commande et à l’aide d’un outil graphique.
3. Création des comptes utilisateurs et l’authentification simple sous LDAP.
4. Sécurisation avec TLS du serveur LDAP.

3. Matériel mis à disposition et architecture du réseau


Chaque binôme utilisera une machine fixe qui jouera le rôle de serveur et d’un PC portable qui
jouera le rôle de machine cliente (demander à l’enseignant qu’il vous en fournisse un). Avant de
démarrer le TP, il est préconisé de restaurer les deux machines. Une fois la restauration effectuée,
vous lancerez la dernière version de Debian.
Vous pouvez vous connecter avec le login elec. Le mot de passe est elec. Le même mot de
passe sert aussi pour le compte root.

Nom machine Adresse IP


serveur 192.168.0.1
client 192.168.0.2
Tab. 1 – Caractéristiques des machines connectées en réseau

4. Installation de paquets
Afin de pouvoir réaliser convenablement le tp, il est indispensable d’installer un ensemble de
paquets qui seront utilisés par le service ldap.

1
Installer les paquets suivants sur le serveur et le client (connecté vous en Wifi avec votre login
et mot de passe de l’ent => Wifi réseau Eduroam):
- apt-get install libnss-db
- apt-get install nss-updatedb
- apt-get install libpam-ldap
- apt-get install libnss-ldap
Si besoin, mettre à jour la liste des dépôts : apt-get update

5. Configuration de la carte réseau


Question : Configurer de manière statique les interfaces eth1 de votre serveur et eth0 de
votre client. Configurer la résolution statique de nom pour vos machines sachant que le domaine est
ltr.tp. Tester le réseau à l’aide de la commande ping.
 Comme vous ne disposez que d’une seule machine, elle jouera le rôle de client et de serveur.
Configurez votre machine comme suit :
Nom machine Adresse IP
serveur 192.168.0.1

Réponse

6. Arborescence de la structure
Durant ce TP, nous allons mettre en place un annuaire LDAP pour une université dont le nom
correspond à celui de votre machine serveur. La représentation de l’arbre se fera suivant la
répartition en nom de domaine. L’entreprise est amenée à recevoir un publique varié, qui se
compose entre autre des enseignants et des étudiants. Vous allez devoir mettre en place le
découpage suivant :

dc=ltr.tp

dc=nom_machine

ou=People ou=Groups

ou=Enseignant ou=Etudiant

2
7. Initialisation du serveur LDAP

Le serveur LDAP se gère à partir d’un répertoire de configuration slapd.d qui est accessible à
l’adresse /etc/ldap/slapd.d. Un serveur LDAP peut posséder plusieurs bases de données dans le cas
où il est nécessaire de gérer plusieurs structures. L’avantage de ce type de répertoire de
configuration est qu’il est possible de réaliser des modifications à chaud sur les bases de données
sans avoir le besoin de redémarrer le service.

Le répertoire de configuration contient un ensemble de fichier représentant la définition des objets


ou des attributs qui peuvent être utilisés pour définir les entités de l’annuaire.

Le répertoire cn=config contient l’ensemble des définitions des bases de données de chaque
annuaire ldap. Il est directement possible d’éditer les fichiers des bases (uniquement dans des cas
extrêmes comme pour résoudre des problèmes de conversion de version) et d’en modifier le
contenu. Dans un tel cas, il sera indispensable de relancer le serveur ldap. Cette méthode est donc
déconseillée dans le cadre d’annuaire avec un très grand nombre d’utilisateurs.

Le démon ldap s’appelle slapd. Il s’exécute sur le port 389 pour le protocole ldap et 636 pour le
protocole ldaps.

Question : Vérifier avec la commande netstat –atnp si le serveur est lancé. Sur quel port le
serveur est-il en écoute de base ? Dans le cas où il n’est pas lancé, lancez le et refaites la
manipulation.
Réponse :

Openldap fournit également un ensemble d’utilitaires clients ldapxxx qui peuvent faire des
opérations diverses (ajout, modification, recherche) pendant que le serveur est en fonctionnement.
Les entrées saisies lors de l’ajout ou de modification doivent respecter la syntaxe ldif.

Afin d’ajouter une nouvelle base de données, il est nécessaire de pouvoir s’authentifier au niveau du
serveur ldap. Les bases de données déjà présentes ne sont pas forcément configurées pour accepter
des connexions en utilisant une méthode d’authentification simple. Il est donc préférable de se
connecter en utilisant une méthode SASL. La méthode SASL permet uniquement à l’utilisateur root
de se connecter au serveur s’il est connecté localement à la machine. Les commandes nécessaires à
une telle connexion sont les suivantes :

- Pour l’ajout d’une base :


ldapadd –Y EXTERNAL –H ldapi:/// -f database.ldif

- Pour la modification d’une base :


ldapmodify –Y EXTERNAL –H ldapi:/// -f database.ldif

Pour créer une nouvelle base de données, vous devez au préalable chercher le prochain numéro
disponible (les bases de données sont ordonnées numériquement par ldap).

3
Question : Consulter le répertoire cn=config, et trouver quel est le prochain numéro de la base de
données.
Réponse :

Créez le fichier database.ldif suivant :

dn: olcDatabase={2}mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: {2}mdb
olcSuffix: dc=serveur,dc=ltr.tp
olcDbDirectory: /var/lib/ldap
olcRootDN: cn=admin,dc=nom_machine,dc=ltr.tp
olcRootPW: password

Question : Ajouter cette base de données aux bases déjà existantes.


Réponse :

Lors de la configuration de la base de données, nous avons rentré le mot de passe de


l’administrateur de la base en clair. Pour des raisons certaines de sécurité, ceci est à éviter. La
commande slappasswd permet de faire un hachage de votre mot de passe en fonction d’un protocole
de hachage bien connu (md5 ou ssha ou crypt). Dans notre cas utilisé le protocole de hachage MD5.

Question : Utiliser la commande slappasswd –h "{protocole_hachage}" -s mot_de_passe.

Réponse :

4
Question : Editez le fichier olcDatabase={2}mdb.ldif et remplacez le mot de passe en clair de
l’administrateur par le mot de passe obtenu précédemment. Le mot de passe crypté commence par
{MD5} et finie normalement par =. Lorsque vous le copiez, pensez à enlever un des :.. Relancez le
serveur ldap.

Réponse :

Maintenant que notre base est configurée, il est nécessaire d’y ajouter des entités. Pour cela, nous
allons définir des entrées de l’arborescence en syntaxe ldif.

Pour ajouter des entrées dans l’annuaire, il est nécessaire d’utiliser une méthode d’authentification
simple. Pour cela, vous utiliserez comme identifiant l’administrateur que vous avez défini lors de la
création de la base. La syntaxe de la commande est la suivante :

ldapadd -D "cn=admin,dc=nom_machine,dc=ltr.tp" -x -W -f nom_fichier.ldif

Créer le fichier initialisation_ldap.ldif qui contient les entités de notre arborescence et dont le
contenu est le suivant. Pour des raisons certaines de sécurité, le mot de passe des utilisateurs doivent
être crypté. Utiliser la commande suivante pour les crypter :
slappasswd -c ‘$6$ %.8s’ -s mot_de_passe

Editez le fichier initialisation_ldap.ldif et remplacez le nom_machine par le nom de votre serveur et


le mot de passe en clair de l’utilisateur david par le mot de passe crypté.

dn: dc=nom_machine,dc=ltr.tp
objectClass: top
objectClass: dcObject
objectClass: organizationalUnit
dc: nom_machine
ou: nom_machine

dn: cn=admin,dc=nom_machine,dc=ltr.tp
objectClass: top
objectClass: person
cn: admin
sn: Administrateur
userPassword: password_admin

dn: ou=people,dc=nom_machine,dc=ltr.tp
objectClass: organizationalUnit
ou: people

dn: ou=groups,dc=nom_machine,dc=ltr.tp
objectClass: organizationalUnit

5
ou: groups

dn: ou=enseignant,ou=people,dc=nom_machine,dc=ltr.tp
objectClass: organizationalUnit
ou: enseignant

dn: ou=etudiant, ou=people,dc=nom_machine,dc=ltr.tp


objectClass: organizationalUnit
ou: etudiant

dn: uid=david,ou=enseignant,ou=people,dc=nom_machine,dc=ltr.tp
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: david
sn: Espes
userPassword: mot de passe crypte
givenName: David
cn: David Espes
uidNumber: 1005
gidNumber: 10000
gecos: David Espes
loginShell: /bin/bash
homeDirectory: /home/david
shadowExpire: -1
shadowFlag: 0
shadowWarning: 7
shadowMin: 8
shadowMax: 999999
shadowLastChange: 10877
mail: david.espes@nom_machine.ltr.tp
postalCode: 29200
l: Brest
o: nom_machine
mobile: +33 (0)6 xx xx xx xx
homePhone: +33 (0)5 xx xx xx xx
title: System Administrator
postalAddress:
initials: DE

dn: cn=personnelGroup,ou=groups,dc=nom_machine,dc=ltr.tp
objectClass: posixGroup
cn: personnelGroup
gidNumber: 10000

Ce fichier contient l’ensemble des unités de l’université (définit par la classe organizationalUnit)
ainsi qu’un utilisateur David Espes (définit par la classe inetOrgPerson et posixAccount pour la
gestion des identifiants linux) qui appartient à l’unité des enseignants. Un groupe personnelGroup a
été également définit (avec la classe posixGroup) qui représente les attributs d’un groupe linux.

Question : Ajouter le contenu de ce fichier à votre base.

Réponse :

6
Question : Créer un fichier initialisation2.ldif et ajoutez-vous en tant qu’étudiant (choisissez un
uidNumber et gidNumber différent du précédent) en respectant la syntaxe précédente (pensez à
crypter le mot de passe de l’utilisateur).

Réponse :

8. Consultation, modification et contrôle d’accès

Cette partie va permettre de prendre en main l’ensemble des utilitaires fournis par Openldap. Les
clients ldap consultent le fichier /etc/ldap/ldap.conf pour connaître la configuration qu’ils doivent
utiliser.

Configurez ce fichier en y ajoutant les lignes suivantes :

BASE dc=nom_machine,dc=ltr.tp
URI ldap://127.0.0.1
ldap_version 3

Contrairement à la commande ldapadd qui permet d’ajouter une nouvelle entrée à la base de
données, la commande ldapmodify permet de modifier une entrée déjà existante (par ex : ajout,
modification ou suppression d’un attribut).

Créer le fichier suivant :


Fichier exemple_modif.ldif
dn: uid=david,ou=enseignant,ou=people,dc=nom_machine,dc=ltr.tp
changetype: modify
add: carLicense

7
carLicense: 1234 AB 45
-
add: roomNumber
roomNumber: C020
-
replace: telephoneNumber
telephoneNumber: 31010

Question : Ajouter à la base de données de l’annuaire les enregistrements contenus dans ce


fichier en utilisant la commande ldapmodify.
Réponse

La commande ldapsearch permet de consulter les attributs d’une entité ou plusieurs entités de
l’arborescence. La syntaxe de la commande ldapsearch est la suivante :
ldapsearch -D "dn_utilisateur" -W -x -b "dn_base" -s profondeur attribut=valeur

L’option –D permet de spécifier un nom d’utilisateur avec lequel faire la recherche. Vous n’êtes pas
obligé de la spécifier. Si vous voulez faire une recherche avec les droits d’administrateur, utilisez le
dn de l’entrée correspondant à votre administrateur : cn=admin, dc=nom_machine, dc=ltr.tp.

L’option –W permet de demander le mot de passe de l’utilisateur spécifié par –D.

L’option –x permet de dire de ne pas utiliser l’authentification SASL.

L’option –b spécifie la base à partir de laquelle on cherche dans l’arborescence ex :


dc=nom_machine,dc=ltr.tp.

L’option –s correspondant à la profondeur de la recherche. Elle peut prendre la valeur base, one ou
sub.

Question : Une fois le serveur lancé, faites une recherche sans spécifier d’utilisateur et donc de
mot de passe associé sur l’attribut uid=david. Arrivez-vous à voir le mot de passe de l’utilisateur ?
Trouvez-vous ça normal ?

Réponse :

Pour éviter qu’un utilisateur quelconque puisse modifier des entités dont il n’est pas propriétaire ou
consulter des informations qu’il ne devrait pas pouvoir voir, nous allons spécifier des contrôles
d’accès à notre base de données (fichier /etc/ldap/lapd.conf).

La syntaxe pour un ACL est la suivante :

8
olcAccess: {n°_ACL}to <what> by <who> <access>

Exemple :

#Le numéro d’ACL a pour valeur {0} car c’est le premier ACL défini
olcAccess: {0}to * by * read

Question : Spécifiez que l’attribut userPassword (attrs=userPassword) est modifiable par le


propriétaire (self) par l’utilisateur anonyme (anonymous) s’il s’authentifie (auth) et non accessible
pour tous les autres. Spécifiez que tout le monde peut lire l’ensemble des autres attributs.

Réponse :

Pour ajouter ces ACLs à notre base de données, créez un fichier modifbase_x.ldif par ACL
dont le contenu est le suivant :

dn: olcDatabase={2}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}1er ACL defini précédemment

fichier modifbase_1.ldif

dn: olcDatabase={2}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {1}2eme ACL defini précédemment
fichier modifbase_2.ldif

Question : Ajouter le contenu de ces fichiers à la base à l’aide de la commande suivante :

ldapmodify –Y EXTERNAL –H ldapi:/// -f /modifbase_X.ldif


9
. Réponse :

Question : Que donnent les recherches suivantes :


monpc:/home/elec# ldapsearch -x -b "dc=nom_machine,dc=ltr.tp" -s sub
"(sn=Espes)"
monpc:/home/elec# ldapsearch -D "cn=admin,dc=nom_machine,dc=ltr.tp" -W -x -b
"dc=univ-brest,dc=fr" -s sub "(sn=Espes)"
monpc:/home/elec# ldapsearch -D "uid=david,ou=enseignant,
ou=people,dc=nom_machine,dc=ltr.tp" -W -x -b "dc=nom_machine,dc=ltr.tp" -s sub
"(sn=Espes)"
monpc:/home/elec# ldapsearch -D "uid=votre_uid,ou=etudiant,ou=people,
dc=nom_machine,dc=ltr.tp " -W -x -b "dc=nom_machine,dc=ltr.tp" -s sub
"(sn=Espes)"
monpc:/home/elec# ldapsearch -x -b "dc=nom_machine,dc=ltr.tp" -s one
"(sn=votre_sn)"
monpc:/home/elec# ldapsearch -x -b "ou=etudiant,ou=people,dc=nom_machine
,dc=ltr.tp" -s one "(cn~=votre_cn_approximatif)"

Réponse :

10
9. Création de comptes utilisateurs et authentification simple avec LDAP =>
Configuration du client

Nous allons maintenant configurer le PC client. Pour pouvoir s’authentifier sous un système linux
à travers un annuaire ldap, il est nécessaire d’installer un certain nombre de paquets libpam-ldap
libnss-ldap nss-updatedb libnss-db. Ces paquets sont déjà installés donc vous n’avez
pas besoin de le faire.

Un certain nombre de fichiers de configuration doivent être modifiés.

Les fichiers /etc/libnss-ldap.conf et /etc/pam_ldap.conf permettent de spécifier les éléments


permettant de trouver et d’accéder au serveur ldap lors d’une authentification.

Modifiez les lignes suivantes et les remplacer par :

base dc=nom_machine,dc=ltr.tp
uri ldap:// @IP du serveur
rootbinddn cn=admin,dc=nom_machine,dc=ltr.tp

Pour pouvoir accéder à votre base de données en administrateur, vous devez lui spécifier le mot de
passe à utiliser :

echo -n "mdp_non_crypté" > /etc/libnss-ldap.secret

echo -n "mdp_non_crypté" > /etc/pam_ldap.secret


Lorsque cela est fait, il faut spécifier au module d’authentification de linux d’aller chercher les mots
de passe à travers le démon nscd sur l’annuaire ldap.

Pour cela, modifiez les fichiers comme suit :


Fichier /etc/pam.d/common-account Fichier /etc/pam.d/common-session
(contenu) (contenu)
account sufficient pam_ldap.so session sufficient pam_ldap.so
account required pam_unix.so session required pam_unix.so

Fichier /etc/pam.d/common-auth (contenu)


auth sufficient pam_ldap.so
auth required pam_unix.so nullok_secure use_first_pass

Fichier /etc/pam.d/common-password (contenu)


password sufficient pam_ldap.so
password required pam_unix.so nullok

Fichier /etc/pam.d/login (lignes à rajouter Fichier /etc/pam.d/su (lignes à rajouter si


si nécessaire) nécessaire)
@include common-auth @include common-auth
@include common-account @include common-account
@include common-session @include common-session
@include common-password @include common-password

Fichier /etc/nsswitch.conf (seulement les lignes à modifier)

11
passwd: compat ldap
group: compat ldap
shadow: compat ldap

Pour que tout puisse fonctionner, il est nécessaire de spécifier au démon nscd dans quelle branche
se situe les utilisateurs et les groups d’utilisateur. Pour cela, modifiez le fichier /etc/ldap/ldap.conf
en ajoutant les lignes :
rootbinddn cn=admin,dc=nom_machine,dc=ltr.tp
nss_base_passwd dc=nom_machine,dc=ltr.tp?sub
nss_base_shadow dc=nom_machine,dc=ltr.tp?sub
nss_base_group dc=nom_machine,dc=ltr.tp?sub

Relancer le démon nscd pour que les changements soient pris en compte.

Lorsque vos utilisateurs vont se connecter, ils accèderont à leur répertoire de base. Il est nécessaire
que vous créiez ces répertoires au préalable et que vous les rattachiez à l’uid de l’utilisateur
(uidNumber) et au gid du groupe (gidNumber).
Exemple pour l’utilisateur david :
monpc:/home/elec# mkdir /home/david/
monpc:/home/elec# chown 1005:10000 /home/david/

Question : A quels utilisateurs et groupes appartiennent les répertoires créés sous /home
(utiliser ls avec l’option –l).
Réponse :

Lancez Wireshark et écoutez l’interface de loopback.


Mettez à jour le fichier /etc/passwd et /etc/group en utilisant la commande :
monpc:/home/elec# getent passwd
Question : Dorénavant, a quel utilisateur et groupe sont associés les répertoires sous /home ?
Comment ont transité les données de l’utilisateur ?
Réponse :

12
Question : A partir d’un terminal simple utilisateur, connectez vous avec l’utilisateur david en
tapant la commande (su david).
Réponse :

10. Connexion sécurisée avec LDAP

Le transfert de données entre le client et le serveur ldap s’est effectué sans chiffrement particulier.
L’ensemble des mots de passe de l’utilisateur a transité en clair. Pour des soucis de confidentialité,
il est nécessaire de mettre en place une connexion sécurisée par un tunnel TLS.

Openldap utilise GnuTLS pour réaliser le tunnel TLS. Pour créer nos certificats, il est donc
nécessaire d’installer le paquet gnutls-bin (déjà installé sur les machines de la salle).

Nous allons tout d’abord créer une autorité de certification qui signera nos certificats.

13
monpc:/home/elec# mkdir /etc/ldap/ssl

monpc:/etc/ldap/ssl# mkdir private certs

monpc:/etc/ldap/ssl# certtool --generate-privkey >


/etc/ldap/ssl/private/cakey.pem

Créez un fichier ca.info qui contient :

cn = nom_machine.ltr.tp
ca
cert_signing_key

monpc:/etc/ldap/ssl# certtool --generate-self-signed --load-privkey


/etc/ldap/ssl/private/cakey.pem --template
/etc/ldap/ssl/ca.info --outfile /etc/ldap/ssl/certs/cacert.pem

Nous allons maintenant créer le certificat du serveur :


Question : Générez la clef du serveur que vous appellerez ldap_key.pem.
Réponse :

Créez un fichier ldap.info qui contient :

organization = nom_machine.ltr.tp
cn = nom_machine.ltr.tp
tls_www_server
encryption_key
signing_key

Générez le certificat :
monpc:/etc/ldap/ssl# certtool --generate-certificate --load-privkey
/etc/ldap/ssl/private/ldap_key.pem --load-ca-certificate
/etc/ldap/ssl/certs/cacert.pem --load-ca-privkey
/etc/ldap/ssl/private/cakey.pem --template /etc/ldap/ssl/ldap.info --
outfile /etc/ldap/ssl/certs/ldap_cert.pem

Une fois les certificats créés, il vous reste à configure le serveur ldap pour qu’il sache où chercher
les certificats. Pour cela, il est nécessaire d’ajouter à la configuration globale du serveur les chemins
pour accéder aux différents certificats. Tapez les lignes suivantes :

14
monpc:/etc/ldap/ssl# ldapmodify –Y EXTERNAL –H ldapi:///
dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ldap/ssl/certs/cacert.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ldap/ssl/certs/ldap_cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ldap/ssl/private/ldap_key.pem

Après avoir donné les droits aux certificats, vous devez également spécifier au serveur qu’il doit
écouter sur le port 636, en modifiant le fichier /etc/default/slapd :
SLAPD_SERVICES="ldap:/// ldaps:///"

Pour que les clients puissent accéder au serveur en mode sécurisé, modifier le fichier
/etc/ldap/ldap.conf du serveur :
URI ldaps://nom_machine.ltr.tp
TLS_REQCERT allow
TLS_CACERT /etc/ldap/ssl/certs/cacert.pem

Pour que l’authentification puisse être effectuée en mode sécurisé, modifiez les fichiers
/etc/libnss-ldap.conf et /etc/pam_ldap.conf du client :
uri ldaps://nom_machine.ltr.tp:636

Relancez le serveur slapd et le démon nscd.

Question : Testez avec la requête ldapsearch –xLLL –H


ldaps://nom_machine.ltr.tp –b "dc=univ-brest,dc=fr" uid=david. Visualisez à
travers wireshark que l’échange soit bien sécurisé.
Réponse :

15
Question : Vérifier avec Wireshark que l’authentification à votre machine linux se fasse de
manière sécurisée (utilisez la commande getent passwd).
Réponse :

16

Vous aimerez peut-être aussi