Tutorial LDAP

65
Tutorial OpenLDAP Installation et configuration (clients/serveurs) Migration NIS LDAP dans GRID5000 ecurisation par SSL et optimisations [email protected] Version : 0.3 – F´ evrier 2005 esum´ e Ce document a pour objectif de familiariser le lecteur avec l’installation et la configuration d’un service d’annuaire LDAP dans un environnement Linux, plus particuli` erement dans l’objectif de remplacer NIS. La premi` ere partie (§1) est consacr´ ee ` a ceux qui n’ont pas de temps ` a perdre et qui souhaitent disposer rapidement d’un environnement fonc- tionnel. Les sections suivantes d´ etaillent plus amplement le fonctionnement de LDAP. Ainsi, apr` es quelques rappels et d´ efinitions de principe (§2), on trouvera une explication d´ etaill´ ee de l’installation d’un serveur LDAP (§3) et de sa configuration (§4). La section 5 est consacr´ ee au principales commandes impl´ ement´ ees dans LDAP qui sont illustr´ ees par des exemples tandis que la section 6 d´ etaillera plus particuli` erement les manipulations `a effectuer pour migrer les tables NIS et plus g´ en´ eralement les fichiers syst` emes dans la base LDAP de fa¸ con ` a ce que la gestion des comptes utilisateurs passe par LDAP. Alors que la section 7 d´ etaille l’installation et la configuration des clients LDAP, un derni` ere partie (§8) traite des manipulations effectu´ ees et des ´ evolutions envisag´ ees dans le cadre du projet Grid5000, cadre exp´ e- rimental de ce document. A noter que le d´ emon du service d’annuaire LDAP est slapd et qu’il est impl´ ement´ e sur la plupart des plateformes UNIX. Les diverses mani- pulations pr´ esent´ ees dans ce document sont largement orient´ ees vers la distribution Debian, mais elles restent similaire dans le cadre d’autres dis- tributions comme RedHat ou Mandrake. 1

Transcript of Tutorial LDAP

Page 1: Tutorial LDAP

Tutorial OpenLDAP

Installation et configuration (clients/serveurs)

Migration NIS → LDAP dans GRID5000

Securisation par SSL et optimisations

[email protected] Version : 0.3 – Fevrier 2005

Resume

Ce document a pour objectif de familiariser le lecteur avec l’installationet la configuration d’un service d’annuaire LDAP dans un environnementLinux, plus particulierement dans l’objectif de remplacer NIS.

La premiere partie (§1) est consacree a ceux qui n’ont pas de tempsa perdre et qui souhaitent disposer rapidement d’un environnement fonc-tionnel. Les sections suivantes detaillent plus amplement le fonctionnementde LDAP.

Ainsi, apres quelques rappels et definitions de principe (§2), on trouveraune explication detaillee de l’installation d’un serveur LDAP (§3) et de saconfiguration (§4). La section 5 est consacree au principales commandesimplementees dans LDAP qui sont illustrees par des exemples tandis quela section 6 detaillera plus particulierement les manipulations a effectuerpour migrer les tables NIS et plus generalement les fichiers systemes dansla base LDAP de facon a ce que la gestion des comptes utilisateurs passepar LDAP.

Alors que la section 7 detaille l’installation et la configuration desclients LDAP, un derniere partie (§8) traite des manipulations effectueeset des evolutions envisagees dans le cadre du projet Grid5000, cadre expe-rimental de ce document.

A noter que le demon du service d’annuaire LDAP est slapd et qu’ilest implemente sur la plupart des plateformes UNIX. Les diverses mani-pulations presentees dans ce document sont largement orientees vers ladistribution Debian, mais elles restent similaire dans le cadre d’autres dis-tributions comme RedHat ou Mandrake.

1

Page 2: Tutorial LDAP

Table des matieres

1 Pour les plus presses : Ultra Quick Guide 5

1.1 Prerequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.2 Cote serveur... . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.3 Gestion des fichiers de configurations par LDAP . . . . . . . . . 5

1.4 Cote client... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.4.1 Initialisation et configuration de base du client . . . . . . 6

1.4.2 Gestion de l’authentification des utilisateurs via LDAP . . 6

1.4.3 Note a propos de la cohabitation NIS/LDAP . . . . . . . 7

2 Introduction 8

2.1 Notion d’annuaire electronique . . . . . . . . . . . . . . . . . . . 8

2.2 Mais qu’apporte LDAP? . . . . . . . . . . . . . . . . . . . . . . . 9

2.3 LDAP, comment ca marche ? . . . . . . . . . . . . . . . . . . . . 9

2.3.1 Serveur local . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.3.2 Annuaire local avec referrals . . . . . . . . . . . . . . . . . 9

2.3.3 Annuaire replique . . . . . . . . . . . . . . . . . . . . . . 10

2.3.4 Annuaire distribue . . . . . . . . . . . . . . . . . . . . . . 10

2.4 Le modele de donnees LDAP . . . . . . . . . . . . . . . . . . . . 10

2.4.1 Le Directory Information Tree (DIT) . . . . . . . . . . . . 11

2.4.2 Les schemas . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.4.3 LDIF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.5 La securite dans LDAP . . . . . . . . . . . . . . . . . . . . . . . 13

2.5.1 Authentification . . . . . . . . . . . . . . . . . . . . . . . 13

2.5.2 Controle d’acces . . . . . . . . . . . . . . . . . . . . . . . 14

2.5.3 Protection des mots de passe . . . . . . . . . . . . . . . . 15

2.6 Replications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2.7 Referrals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3 Installation du serveur LDAP 17

3.1 Pre-requis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.1.1 Installation de OpenSSL . . . . . . . . . . . . . . . . . . . 17

3.1.2 Mise en place des certificats SSL . . . . . . . . . . . . . . 17

3.1.3 Installation de Berkeley DB . . . . . . . . . . . . . . . . . 19

3.1.4 Installation de SASL . . . . . . . . . . . . . . . . . . . . . 20

3.1.5 Choix de l’espace de nommage . . . . . . . . . . . . . . . 20

3.2 Installation de slapd . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.2.1 Cas d’une installation sur une Debian stable . . . . . . . 20

3.2.2 Autres cas . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

3.2.3 Dans tous les cas.... . . . . . . . . . . . . . . . . . . . . . 21

4 Configuration du serveur LDAP 22

4.1 Configurations globales . . . . . . . . . . . . . . . . . . . . . . . . 22

4.1.1 Inclusion des schemas . . . . . . . . . . . . . . . . . . . . 22

4.1.2 Logging, configuration d’execution . . . . . . . . . . . . . 23

4.1.3 Options SASL . . . . . . . . . . . . . . . . . . . . . . . . 24

2

Page 3: Tutorial LDAP

4.1.4 Options SSL/TLS . . . . . . . . . . . . . . . . . . . . . . 24

4.1.5 Autres options de securite . . . . . . . . . . . . . . . . . . 25

4.2 Configuration des Bases de Donnees . . . . . . . . . . . . . . . . 25

4.2.1 Ajout d’une base . . . . . . . . . . . . . . . . . . . . . . . 25

4.2.2 Configuration des ACLs . . . . . . . . . . . . . . . . . . . 26

4.3 Insertions minimales requises dans la base de donnees . . . . . . 27

4.4 Modification du script de demarrage /etc/init.d/slapd . . . . . . 28

4.4.1 Cas Debian stable . . . . . . . . . . . . . . . . . . . . . . 28

4.4.2 Autres cas . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

4.5 Faire en sorte que le serveur ne se lance pas sous root . . . . . . 29

4.6 Verifier que le serveur marche . . . . . . . . . . . . . . . . . . . . 29

5 Les principales commandes LDAP 31

5.1 Lancement du serveur slapd . . . . . . . . . . . . . . . . . . . . . 31

5.2 Commandes online/offline . . . . . . . . . . . . . . . . . . . . . . 31

5.3 Ajouter des entrees dans la base LDAP . . . . . . . . . . . . . . 32

5.4 Recherches dans la base LDAP . . . . . . . . . . . . . . . . . . . 33

5.5 Modifier/Supprimer des entrees dans la base . . . . . . . . . . . . 34

5.6 Quelques outils graphiques . . . . . . . . . . . . . . . . . . . . . . 36

6 Gestion des fichiers de configurations par LDAP 37

6.1 Les outils de migration des fichiers de configuration . . . . . . . . 37

6.1.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . 37

6.1.2 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . 37

6.2 Migration les fichier passwd, group et hosts . . . . . . . . . . . . 39

6.2.1 Recuperation du contenu des tables NIS . . . . . . . . . . 39

6.2.2 Conversion au format LDIF . . . . . . . . . . . . . . . . . 39

6.2.3 Insertion dans la base LDAP . . . . . . . . . . . . . . . . 39

6.3 Migration des fichiers de configuration d’automount . . . . . . . 40

6.3.1 Installation du package autofs-ldap . . . . . . . . . . . . . 40

6.3.2 Migration du fichier /etc/auto.home . . . . . . . . . . . . 40

7 Installation du client LDAP 42

7.1 Initialisation et configuration de base du client . . . . . . . . . . 42

7.1.1 Cas d’une installation sur une Debian stable . . . . . . . 42

7.1.2 Autres cas . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

7.1.3 Dans tous les cas.... . . . . . . . . . . . . . . . . . . . . . 42

7.1.4 Verifier que ca marche . . . . . . . . . . . . . . . . . . . . 43

7.2 Authentification des utilisateurs via LDAP . . . . . . . . . . . . 44

7.2.1 NSS (Name Service Switch) et LDAP . . . . . . . . . . . 45

7.2.2 PAM (Pluggable Authentication Module) et LDAP . . . . 47

7.3 Configuration automount : le fichier auto.master . . . . . . . . . 49

7.4 Utilisation de NSCD . . . . . . . . . . . . . . . . . . . . . . . . . 49

3

Page 4: Tutorial LDAP

8 Evolution au sein du projet Grid5000 508.1 Premiere experimentation : configuration locale . . . . . . . . . . 50

8.1.1 Contexte . . . . . . . . . . . . . . . . . . . . . . . . . . . 508.1.2 Description . . . . . . . . . . . . . . . . . . . . . . . . . . 508.1.3 Contribution des autres sites . . . . . . . . . . . . . . . . 50

8.2 Seconde experimentation : utilisation des referrals . . . . . . . . . 51

9 Quelques liens utiles 52

A Fichier de configuration slapd.conf 55

B Fichier de configuration ldap.conf 57

C Fichiers de configuration NSS 58C.1 le fichier /etc/libnss-ldap.conf . . . . . . . . . . . . . . . . . . . . 58C.2 le fichier /etc/nsswitch.conf . . . . . . . . . . . . . . . . . . . . . 58

D Fichiers de configuration PAM 59D.1 le fichier /etc/pam ldap.conf . . . . . . . . . . . . . . . . . . . . 59D.2 Le fichier /etc/pam.d/ssh . . . . . . . . . . . . . . . . . . . . . . 59D.3 Le fichier /etc/pam.d/su . . . . . . . . . . . . . . . . . . . . . . . 60

E le fichier automount.schema 61

F Quelques astuces et messages d’erreurs rencontres 62

G Programmation Perl avec LDAP 63

4

Page 5: Tutorial LDAP

1 Pour les plus presses : Ultra Quick Guide

1.1 Prerequis

1. Installation de openssl : apt-get install openssl

2. Mise en place des certificats SSL : suivre les instruction du §3.1.2 page 17.

3. Installation de Berkeley DB :> apt-get install libdb3 libdb3-dev

4. Installation de SASL : en cours d’investigation...

1.2 Cote serveur...

1. Installation de slapd

(a) Sous debian stable : suivre les instructions du §3.2.1 page 20.

(b) Autres cas : apt-get install slapd libldap2 libldap2-dev ldap-

utils

2. Configuration du serveur :

(a) Quelques initialisations :

> mkdir -p /var/lib/ldap/grid5000.net

> chmod 700 /var/lib/ldap/grid5000.net

> cp /etc/ldap/slapd.conf /etc/ldap/slapd.conf_DEB-orig

(b) Recuperer le fichier slapd.conf fourni en annexe A page 55 et le placerdans /etc/ldap/slapd.conf

(c) configurer syslog pour gerer les logs du serveur : ajouter la lignesuivante dans /etc/syslog.conf :local4.debug /var/log/slapd.log

et relancer le service (’/etc/init.d/sysklogd restart’) Le fichier/etc/log/slapd.log sera une aide precieuse pour le debuggage.

(d) Initialisation du contenu de la base LDAP : suivre les instructionsdu §4.3 page 27.

(e) Modification du script de demarrage /etc/init.d/slapd : suivre lesinstructions du §4.4 page 28.

(f) Faire en sorte que le serveur ne se lance pas sous root : en coursd’investigations...

3. Verifier que le serveur fonctionne : suivre les instructions du §4.6 page 29.

1.3 Gestion des fichiers de configurations par LDAP

1. Installer les outils de migration :

(a) Sous Debian stable : forcer l’install en testing :apt-get install -t testing migrationtools

(b) Autres cas : apt-get install migrationtools

2. Configurer les outils de migration : suivre les instructions du §6.1.2 page 37.

5

Page 6: Tutorial LDAP

3. Migration les fichier passwd, group et hosts : suivre les instructions du§6.2 page 39.

4. Migration des fichiers de configuration d’automount : Dans le cas ou unemap automount est initialement geree par NIS (/etc/auto.home dansnotre cas) et que cette gestion doit passer par LDAP, suiver les instructionssuivantes :

(a) Installation du package autofs-ldap : apt-get install autofs-ldap

(b) copier le fichier fourni en annexe E page 61 dans /etc/ldap/schema/automount.schema

(c) Decommenter dans le fichier de configuration slapd.conf la ligne :include /etc/ldap/schema/automount.schema

(d) Migration du fichier /etc/auto.home sur le serveur LDAP suivre lesinstructions du §6.3.2 page 40.

1.4 Cote client...

1.4.1 Initialisation et configuration de base du client

1. Installation

(a) Cas Debian stable : compte tenu des remarques relatives a la gestionSSL pour le package client stable (voir §7.1 page 42), il convient deforcer l’installation en testing :

> apt-get install -t testing ldap-utils

> apt-get install openssl

(b) Autres cas : apt-get install ldap-utils openssl

2. cp /etc/ldap/ldap.conf /etc/ldap/ldap.conf_DEB-orig

3. Recuperer le fichier fourni en annexe B page 57 et le placer dans /etc/

ldap/ldap.conf

4. copier le certificat du CA (qui a signe le certificat du serveur) et le placerdans /etc/ldap/CA-cert.pem

5. Verifier que tout fonctionne : suivre les instructions du §7.1.4 page 43.

1.4.2 Gestion de l’authentification des utilisateurs via LDAP

1. NSS (Name Service Switch) et LDAP :

(a) Installation : apt-get install libnss-ldap (en forcant en testingsi vous etes sur une Debian stable)

(b) cp /etc/libnss-ldap.conf /etc/libnss-ldap.conf.old

(c) Recuperer le fichier fourni en annexe C.1 page 58 et le placer dans/etc/libnss-ldap.conf

(d) chmod 0600 /etc/libnss-ldap.conf

(e) Recuperer le fichier fourni en annexe C.2 page 58 et le placer dans/etc/nsswitch.conf

6

Page 7: Tutorial LDAP

(f) Pour verifier que ca marche... : suivre les instructions du paragrapheassocie au §7.2.1 page 46.

2. PAM (Pluggable Authentication Module) et LDAP : Meme si cette sectionest dedie aux utilisateurs presses, il est bon, compte tenu l’importance dePAM dans un systeme Linux, de lire completement le §7.2.2 page 47 etd’en suivre les instructions.

1.4.3 Note a propos de la cohabitation NIS/LDAP

Il est tout a fait possible de faire cohabiter une gestion des fichiers de confi-guration par NIS et par LDAP. En supposant que les etapes precedentes sontvalidees, il suffit de suivre les instructions suivantes :

1. Sauvegarder le fichier /etc/nsswitch.conf :cp /etc/nsswitch.conf /etc/nsswitch.conf.old

2. modifier /etc/nsswitch.conf pour qu’il contienne les entrees suivantes :

passwd: files nis ldap

shadow: files nis ldap

group: files nis ldap

hosts: files nis ldap dns

Pour verifier que ca a bien ete pris en compte utiliser la commande getentfichier’ ou fichier peut-etre *passwd, group ou hosts. Vous pourrez constaterque le entrees de ces fichiers sont recuperer dans l’ordre suivant :fichier local −→ map NIS −→ map LDAP

7

Page 8: Tutorial LDAP

2 Introduction

2.1 Notion d’annuaire electronique

Un annuaire electronique est une base de donnees specialisee qui permet departager des bases d’informations sur un reseau. Ces bases peuvent contenirtoute sorte d’informations, comme des coordonnees telephoniques ou des don-nees systemes.

Dans le cadre d’un cluster de machine, un service d’annuaire permettra parexemple de diffuser des donnees systemes, comme celles contenues dans les prin-cipaux fichiers de configuration systemes (/etc/passwd, /etc/shadow, /etc/group, /etc/hosts ou encore /etc/auto.home etc...) Classiquement, ce ser-vice est rendu par le service NIS1 developpe par SUN. C’est un protocoleclient/serveur qui permet de diffuser des donnees de configuration (utilisateurs,mots de passe, hote etc...) entre les ordinateurs sur un reseau.

LDAP signifie Lightweight Directory Access Protocol, un protocole d’annuairesur TCP/IP utilisant les memes concepts que DNS2, le service de nommageutilise sur l’Internet pour faire correspondre un nom explicite (comme www-id.

imag.fr) a une adresse IP (129.88.69.11). Le spectre des informations quipeuvent ainsi etre diffusees est tres large : cela va des coordonnees adminis-tratives aux donnees du compte utilisateur (login, passwd), en passant par lesdonnees systemes de routage, de montage de partitions automatiques etc...

Comme on l’a dit, un annuaire electronique fonctionne de facon similaire a unebase de donnees meme si quelques differences subsistent :

– il est optimise pour la lecture ; l’ajout et la modification de donnees peuventetre couteuses ;

– il fournit des fonctions de recherches plus avancees ;– les donnees sont stockees sur un modele distribue et des techniques de repli-

cations sont possibles, ce qui facilite un passage a l’echelle efficace.– la structure des donnees stockees, appelee schema, peut etre etendue en fonc-

tion de besoins locaux ;– il est base sur des standards etablis qui assurent l’interoperabilite entre plu-

sieurs implementations sur plusieurs supports (notamment OS). Ce documents’interessera a l’implementation open source de LDAP developpee a l’univer-site du Michigan, OpenLDAP3 version 2.x sous Linux.

LDAP apporte egalement de nombreuses garanties en terme de securite, puisquedes mecanismes de chiffrement (SSL ou TLS) et d’authentification (SASL4),couples a des mecanismes de regles d’acces (ACL) permettent de proteger lestransactions et l’acces aux donnees.

Par tous ces avantages, LDAP est un support de choix pour remplacer NIS dansla gestion des comptes machines et l’authentification des utilisateurs.

1Network Information System, ou Yellow Pages yp2Domain Name System3http ://www.openldap.org4Simple Authentication and Security Layer

8

Page 9: Tutorial LDAP

Nous nous interessons ici a la version 3 de LDAP, referencee sous le nomLDAPv3 [16].

2.2 Mais qu’apporte LDAP?

Cote utilisateur, LDAP fournit les services suivants :

– un protocole d’acces a l’information contenue dans l’annuaire ;– un modele d’information definissant le type de donnees contenues dans l’an-

nuaire ;– un modele de nommage definissant comment l’information est organisee et

referencee ;– un modele fonctionnel qui definit comment on accede a l’information ;– un modele de securite qui definit comment les donnees et les acces sont pro-

teges,– un modele de duplication qui definit comment la base est repartie entre ser-

veurs,– des APIs pour developper des applications clientes,– LDIF, un format d’echange de donnees.

2.3 LDAP, comment ca marche ?

Le service d’annuaire LDAP est base sur un modele client/serveur. Un ou plu-sieurs serveurs LDAP contiennent les donnees. Un client LDAP se connecte aun serveur et lui pose sa question. Il recoit en retour une reponse ou un pointeur(on parle de referral) sur l’endroit (typiquement un autre serveur) ou le clientpourra trouver plus d’informations. Quelque soit le serveur auquel le client seconnectera, il aura la meme vue de l’annuaire :un nom referera a une memeentree quelque soit le serveur accede, comme pour DNS.

Il existe plusieurs configurations possibles qui sont detaillees dans la suite.

2.3.1 Serveur local

Dans ce cadre, il n’y a pas d’interactions entre le serveur slapd du domaine etun quelconque autre serveur. Ce mode de fonctionnement est illustre dans lafigure 1

Client Serveur2. Réponse

1. Requete

Fig. 1 – Configuration locale (source :[2])

Cette configuration est particulierement adapte au cas d’un intranet local.

2.3.2 Annuaire local avec referrals

Ici, le serveur est configure sur le domaine local pour rendre les services d’an-nuaires et de renvoyer un ”referral” (une sorte de pointeur) vers un serveur

9

Page 10: Tutorial LDAP

superieur capable de repondre aux requetes en dehors du domaine local. Il est anoter que par defaut et pour eviter de surcharger le serveur, le client a a chargede relancer la requete vers le serveur pointe (figure 2).

Client Serveur

SupérieurServeur

2. Referral

1. Requete

3. Nouvelle requete

Fig. 2 – Configuration locale avec referral (source :[2])

Ce mode de fonctionnement est particulierement adapte au cas des grilles degrappes, donc au cadre du projet Grid5000.

2.3.3 Annuaire replique

Dans ce cadre, le demon slurpd est charge de propager les changements effectuesd’un serveur slapd maıtre vers un ou plusieurs serveurs slapd esclave (figure 3).

Fig. 3 – Configuration par replication (source :[2])

On permet ainsi de garantir une certaine qualite de service. L’utilisation deslurpd vient avantageusement complementer le mode de configuration precedentdans le cadre d’une grille.

2.3.4 Annuaire distribue

Dans cette configuration, le service local est partitionne en plusieurs sous-services, qui peuvent eventuellement etre repliques, et qui sont rassembles parun ensemble de referrals vers des serveurs superieurs ou inferieurs.

2.4 Le modele de donnees LDAP

LDAP utilise une approche orientee objet dans sa representation des donnees,ce qui inclue notamment la definition d’objets (par un ensemble de regles etd’attributs) et la notion d’heritage entre objets.

10

Page 11: Tutorial LDAP

2.4.1 Le Directory Information Tree (DIT)

Les donnees LDAP sont structurees dans une arborescence hierarchique com-parable a celle des systemes de fichiers UNIX.

Chaque noeud de l’arbre correspond a une entree5 de l’annuaire. Au sommetde cet arbre (appele Directory Information Tree-DIT) se trouve la racine ousuffixe.

A noter que chaque serveur possede une entree speciale, appelee root directoryspecific entry (rootDSE) qui contient la description de l’arbre et de son contenu.

Les entrees correspondent a des objets abstraits ou issus du monde reel (unepersonne, une ressource de la grille ou des parametres de configuration). Ellescontiennent un certain nombre de champs appeles attributs qui caracterisentchaque entree.

Chaque entree est referencee de maniere unique dans le DIT par son distingui-shed name (DN). Cette unicite est obtenue par la combinaison des attributslistes dans le tableau 1.

DN distinguished name CN common nameDC domain components SN surnameOU organizational unit UID user IDO organization

Tab. 1 – Principales abreviations utilisees dans le champ DN

Le DN represente le nom de l’entree sous la forme du chemin d’acces a celle-ci depuis le sommet de l’arbre. On peut comparer le DN au path d’un fichierUnix. Bien entendu, comme pour le systeme de fichier Unix, on peut utiliserun relative distinguished names (RDNs) pour designer une entree depuis uneposition particuliere de l’arbre.

Ces notions sont illustrees dans la figure 4.

Pour faire le parallele avec la terminologie des bases de donnees relationnelles,les entrees correspondent a un enregistrement dans une table tandis que lesattributs seraient l’equivalent d’un champ d’une table.

2.4.2 Les schemas

Un schema LDAP definit la liste des entrees possibles, appelees alors objectclasses. Celles-ci sont organisees hierarchiquement, en partant de la classe top

a la racine du DIT.

Pour chacune d’entres elles, on trouve la liste des attributs associes, declines parleurs types et leurs syntaxes. Ces attributs peuvent etre requis (ex :le nom d’unepersonne) ou optionnels (comme un numero de FAX). On y ajoute egalementles operations et les flitres de comparaison autorises.

A noter que chaque classe d’objets herite des attributs de ses predecesseurs.dansla hierarchie. Les objet classes et leurs attributs sont normalises dans [15] afind’assurer l’interoperabilite entre les logiciels. Il sont references par un object

5’entry’ ou ’directory service entry’ (DSE) dans la litterature anglaise.

11

Page 12: Tutorial LDAP

cn: g5k

objectClass: topuserPassword: {crypt}xgidNumber: 24560memberUid: svarrettmemberUid: georget

objectClass: posixGroup

uid=svarrett uid=georget

ou=People ou=Group

cn=equipar cn=g5k

entry

DIT

Liste d’attributs associés à uneentry; format <type>:<valeur>

Distinguished Name:

RDN (Relative Distinguished Name) depuis

dc=grid5000,dc=fr

dn: cn=g5k ,ou=Group,dc=grid5000,dc=fr

ou=Group,dc=grid5000,dc=fr

Fig. 4 – Exemple de DIT : cas de la gestion NIS

identifier (OID) unique attribue par l’Internet Assigned Numbers Authority(IANA).

2.4.3 LDIF

LDAP Data Interchange Format (LDIF), definit dans [3], est un format texte6

standard qui permet de representer les donnees LDAP. Il a pour vocation dedonner une meilleur lisibilite des donnees. Il est utilise pour importer,exporterou modifier les donnees de la base et doit obeir aux regles definies dans le schemade l’annuaire (voir §2.4.2)

Un fichier LDAP est constitue d’une suite d’entrees separees par un saut deligne. Le format est le suivant :

<attribut> : <valeur>ou le premier attribut d’une entree est le DN.

Un entree aura donc la forme suivante :

# Ceci est un commentaire

dn: <distinguished name>

objectClass: <object class>

objectClass: <object class>

...

<attribute type:<attribute value>

<attribute type:<attribute value>

Ainsi, comme precise dans la figure 4, le format LDIF pour l’entree de RDNcn=g5k sera :

dn: cn=g5k,ou=Group,dc=grid5000,dc=fr

objectClass: posixGroup

6Le format utilise est l’ASCII, les donnees binaires etant codees en base 64.

12

Page 13: Tutorial LDAP

objectClass: top

cn: g5k

userPassword: {crypt}x

gidNumber: 24560

memberUid: svarrett

memberUid: georget

Comme on le verra dans la section 6, cela traduit la ligneg5k:x:24560:svarrett,georget

du fichier /etc/group.

2.5 La securite dans LDAP

Le succes de LDAP (et son interet dans le cadre de Grid5000) vient de sacapacite a adresser les problemes de securite suivants :– les acces non autorises (authentification)– les droits d’acces aux donnees (autorisation)– la confidentialite et l’integrite des communications avec le serveur.Le gros du travail est de determiner les regles d’acces aux donnees. Pour cela,LDAP utilise les ACLs (Access Control Lists). Le serveur peut etre de type read-only ou read-write. Dans les deux cas il faut determiner pour chaque attributquel est son niveau de confidentialite (un mot de passe est plus sensible qu’uneadresse mail) et quel utilisateur ou quelle application pourra y acceder en lecture(tout le monde, certains utilisateurs, uniquement les administrateurs...) ou enecriture (utilisateur, manager, administrateur).

2.5.1 Authentification

Pour pouvoir acceder a l’annuaire LDAP, le client LDAP doit d’abord s’au-thentifier, c’est a dire specifier qui va acceder aux donnees. Si l’authentificationreussi, alors le client peut envoyer une requete au serveur qui verifiera si leclient est autorise ou non a effectuer la requete. On parle de controle d’acces(voir §2.5.2).Dans LDAP, l’authentification est fournie par une operation ”bind”.LDAPv3 propose plusieurs mecanismes d’authentification :

1. Anonymous Authentication : il s’agit d’une connexion presentant un champDN vide et aucun mot de passe (la requete est directement envoyee). Celapermet de consulter facilement les donnees accessible en lecture pour tous.

2. Simple Authentication : c’est la methode classique ou le DN de l’utilisateurest transmis avec le mot de passe en clair, ce qui doit etre evite bienentendu dans le cadre d’une grille.

3. Simple Authentication Over SSL/TLS : la session entre le serveur et leclient est chiffree par le protocole SSL, qui garantit entre autre la confiden-tialite et l’integrite des communications. Ainsi, le mot de passe ne transiteplus en clair sur le reseau.

Dans ce cadre, l’authentification d’un utilisateur est soit effectuee via sonmot de passe mais on peut imaginer un mode (non encore teste) ou cette

13

Page 14: Tutorial LDAP

authentification se fait sur simple presentation d’un certificat contenantla cle publique de l’utilisateur, la cle privee associee etant stockee sur unsupport sur et personnel (carte a puce, cle USB etc...). Cette derniereapproche sera etudiee dans le cadre de Grid5000.

4. Simple Authentication and Security Layer (SASL) : defini dans [10], est unmode de securite extensible proposant des mecanismes d’authentificationplus elabores pour tout protocole oriente connexion tel que IMAP ouLDAP. Le mecanisme d’authentification est negocier entre le client et leserveur. En voivi les principaux :

PLAIN ou LOGIN ces mecanismes ne presentent pas plus d’avantageque l’authentification simple de LDAP, et peuvent donc etre oublies

DIGEST-MD5 Bien que moins puissant que les approches a tierce par-tie de confiance comme Kerberos ou PKI, ce mecanisme DOIT etreimplemente si l’emploi de de SSL n’est pas envisage. Il presentel’avantage d’etre relativement simple a mettre en place et se basesur un protocole de challenge/reponse qui offre une protection signi-ficative contre un certain nombre d’attaques.

GSSAPI 7 permet d’utiliser les mecanismes de Kerberos V [6, 11], unsysteme d’authentification securise a tierce personne de confianceconcu pour les reseaux TCP/IP. Ce type de systeme est particulie-rement approprie aux environnement de type cluster.

SKEY pour S/Key est un mecanisme de type OTP (One Time Password)base sur MD5.

EXTERNAL permet d’utiliser des mecanismes d’authentification d’unecouche inferieure, comme SSL/TLS

Il y a encore beaucoup d’autres mecanismes possibles, comme SRP (SecureRemote Passwords [17])

2.5.2 Controle d’acces

Il s’agit de definir les droits d’acces des utilisateurs sur les ressources de l’an-nuaire (objets et attributs). La syntaxe est de la forme :

Acces a <quoi> par <qui> : <type d’acces autorise>

ce qui se traduit dans le format du fichier de configuration slapd.conf paraccess to <quoi> by <qui> <type_d’acces_autorise>

Dans la partie <quoi>, on peut specifier :– une expression reguliere, correspondant a un dn : dn=<regular expression>

– une liste d’attributs : attrs=<attribute list>

– un filtre : filter=<ldap filter>

Les possiblites pour <qui> (resp. <type d’acces autorise>) sont resumes dansle tableau 2 (resp. 3).

7Generic Security Service Application Program Interface, defini dans [8]

14

Page 15: Tutorial LDAP

* tous les utilisateurs, aussi bien anonymes qu’authentifies

anonymous utilisateur non authentifie et donc anonyme

self utilisateurs associe a l’entree ciblee

users utilisateur authentifie

dn=<regex> utilisateur qui correspond a l’expression reguliere regex

dn.<scope>=<DN> utilisateur dans le scope (voir §??) du DN

Tab. 2 – possibilite pour la directive <qui> dans les ACLs

Niveau Privilege accorde

write modifie/renomme

read lecture des resultats de recherche

search requis pour l’application de filtre de recherche

compare requis pour les comparaisons

auth requis pour s’authentifier (bind)

none aucun acces

Tab. 3 – possibilite pour la directive <type d’acces autorise> dans les ACLs

A noter que dans le tableau 3, un niveau donne accorde egalement les privilegesdes niveaux inferieurs.Quelques exemples :

– L’exemple suivant donne l’acces en lecture pour tout le monde :access to * by * read

– La directive qui suit autorise un utilisateur a modifier son entree et les autresutilisateurs a lire les entrees.access to *

by self write

by * read

L’evaluation des controles d’acces se fait dans l’ordre ou les regles sont defi-nies dans le fichier de configuration avec un arret d’evaluation a la premierecorrespondance (”first match”).

On verra un exemple de l’impact d’une ACL sur les recherches d’entrees au§5.4.

2.5.3 Protection des mots de passe

Dans LDAP, les mots de passe peuvent posseder un prefixe qui precise la facondont ils sont encoder. Par exemple, si on considere l’entree

dn: cn=svarrett,ou=people,dc=grid5000,dc=fr

objectClass: person

cn: Sebastien Varrette

sn: varrette

userPassword: {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ...

On voit ici que le mot de passe a ete hache avec MD5 puis encode en base64. [4] definit les prefixes de plusieurs algorithmes de chiffrement. Voici les plus

15

Page 16: Tutorial LDAP

communs :

{CRYPT} utilise un hachage par la fonction Unix crypt(), base e sur DES.C’est mode le plus faible en terme de securite par arpport aux autres.

{MD5} hachage par MD5 puis encodage en base64.

{SHA} (Secure Hash Algorithm) hachage par SHA-1 puis encodage en base64.

{SSHA} (Salted Secure Hash Algorithm) : developpe par Netscape, il s’agitdu mode precedent avec une meilleur gestion du seed. {SSHA} est le moderecommande pour le stockage sur de donnees dans LDAP.

2.6 Replications

La replication est une technique permettant a un serveur (maıtre) de diffuserle contenu de sa base LDAP a un ou plusieurs serveurs (esclave).Toute modification apportee sur la base LDAP dans l’annuaire principal estautomatiquement repercutee sur l’esclave des que celui-ci est joignable pourrealiser l’operation.Cette replication permet ainsi d’assurer une continuite du service d’authentifi-cation, meme si l’un des deux serveurs est momentanement indisponible. Maiscela ne dispense absolument pas de la necessite de sauvegarder regulierementla base LDAP.

2.7 Referrals

TODO

16

Page 17: Tutorial LDAP

3 Installation du serveur LDAP

3.1 Pre-requis

Il y a un certain nombre de composants a installer en dehors de OpenLDAPpour etre totalement compatible avec LDAPv3.

3.1.1 Installation de OpenSSL

Sous Debian :> apt-get install openssl

Le site officiel de OpenSSL est : http://www.openssl.org.TODO : donner les details de la compilation from scratchTODO : preciser version minimale ou ca marche

3.1.2 Mise en place des certificats SSL

Le protocole TLS/SSL repose sur la presente de certificats (au moins au niveauserveur). Un certificat est un fichier contenant une cle publique et un certainnombre de renseignements sur le serveur. Ce certificat est signe numeriquementpar une autorite de certification (CA) qui certifie ainsi que le serveur possedeeffectivement la cle privee.On commence par creer sur le serveur le repertoire qui contiendra les certificats :> mkdir -p /etc/ldap/certificates

Depuis la version 2.1 de OpenLDAP, les client verifie completement les certifi-cats des serveurs, ce qui va nous obliger a creer un certificat pour le CA8.On distingue plusieurs etapes :

1. Creation du certificat pour le CA : On utilisera le script CA.sh> locate CA.sh

/usr/lib/ssl/misc/CA.sh

Note : vous aurez certainement besoin de lancer un updatedb avant d’ob-tenir une reponse de locate.

> cd /etc/ldap/certificate/

> /usr/lib/ssl/misc/CA.sh -newca

CA certificate filename (or enter to create)

Making CA certificate ...

Using configuration from /usr/lib/ssl/openssl.cnf

Generating a 1024 bit RSA private key

..........................................++++++

.....................++++++

writing new private key to ’./demoCA/private/./cakey.pem’

Enter PEM pass phrase:

Verifying password - Enter PEM pass phrase:

-----

You are about to be asked to enter information that will be

incorporated into your certificate request.

8Source : http://www.openldap.org/faq/data/cache/185.html

17

Page 18: Tutorial LDAP

What you are about to enter is what is called a Distinguished Name

or a DN. There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter ’.’, the field will be left blank.

-----

Country Name (2 letter code) [AU]:FR

State or Province Name (full name) [Some-State]:Isere

Locality Name (eg, city) []:Grenoble

Organization Name (eg, company) [Internet Widgits Pty Ltd]:IMAG

Organizational Unit Name (eg, section) []:ID

Common Name (eg, YOUR name) []:CA-IDPOT

Email Address []:[email protected]

Cet appel a cree un repertoire (demoCA) contenant notamment le certi-ficat du CA (’cacert.pem’).

2. Creation du certificat du serveur LDAP (le common name doit corres-pondre au nom complet du serveur, rendu par la commande ’hostname -f’) :

> openssl req -new -nodes -keyout newreq.pem -out newreq.pem \

-days 365

Using configuration from /usr/lib/ssl/openssl.cnf

Generating a 1024 bit RSA private key

..........++++++

..............++++++

writing new private key to ’newreq.pem’

-----

You are about to be asked to enter information that will be

incorporated into your certificate request.

What you are about to enter is what is called a Distinguished Name

or a DN. There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter ’.’, the field will be left blank.

-----

Country Name (2 letter code) [AU]:FR

State or Province Name (full name) [Some-State]:Isere

Locality Name (eg, city) []:Grenoble

Organization Name (eg, company) [Internet Widgits Pty Ltd]:IMAG

Organizational Unit Name (eg, section) []:ID

Common Name (eg, YOUR name) []:ldap-idpot.clic.id

Email Address []:[email protected]

L’option -nodes empeche le chiffrement de la cle secrete (il sembleraitque OpenLDAP ne marche qu’avec des cles privees non chiffrees).

Cet appel a genere le fichier newreq.pem qui contient la cle secrete RSAet une requete de signature de certificat par le CA.

3. Signature du certificat du serveur par le CA :

> /usr/lib/ssl/misc/CA.sh -sign

Using configuration from /usr/lib/ssl/openssl.cnf

18

Page 19: Tutorial LDAP

Enter PEM pass phrase:

Check that the request matches the signature

Signature ok

The Subjects Distinguished Name is as follows

countryName :PRINTABLE:’FR’

stateOrProvinceName :PRINTABLE:’Isere’

localityName :PRINTABLE:’Grenoble’

organizationName :PRINTABLE:’IMAG’

organizationalUnitName:PRINTABLE:’ID’

commonName :PRINTABLE:’ldap-idpot.clic.id’

emailAddress :IA5STRING:’[email protected]

Certificate is to be certified until Jun 14 12:25:03 2005 GMT (365 days)

Sign the certificate? [y/n]:y

[...]

Signed certificate is in newcert.pem

4. Installation de tous ces certificats, afin qu’ils soient utilises par OpenL-DAP :

> mv newreq.pem LDAPserver-key.pem

> mv newcert.pem LDAPserver-cert.pem

> ln -s demoCA/cacert.pem CA-cert.pem

> chmod 600 LDAPserver-key.pem

3.1.3 Installation de Berkeley DB

La base LDAP peut etre stockee sous plusieurs formats qui sont resumes dansle tableau 4

Type Description

bdb Berkeley DB transactional backend

dnssrv DNS SRV backend

ldbm Lightweight DBM backend

ldap Lightweight Directory Access Protocol (Proxy) backend

meta Meta Directory backend

monitor Monitor backend

passwd Provides read-only access to passwd(5)

perl Perl programmable backend

shell Shell (external program) backend

sql SQL programmable backend

Tab. 4 – Formats de bases de donnees pour la base LDAP (source :[9])

On se propose ici d’utiliser le format berkeley DB (BDB)

> apt-get install libdb3 libdb3-dev

(Il faudrait peut-etre tester la version 4)

19

Page 20: Tutorial LDAP

3.1.4 Installation de SASL

En cours d’investigations... Pour le moment, une authentification simple secu-risee par SSL nous paraıt suffisante.

3.1.5 Choix de l’espace de nommage

Cette etape consiste a definir comment les entrees de l’annuaire vont etre or-ganisees, nommees et accedees. L’objectif est de faciliter leur consultation etleur mise a jour mais aussi de prevoir leur duplication, leur repartition entreplusieurs serveurs ou leur gestion par plusieurs personnes.

Dans le cadre de la premiere experience grid5000 sur Grenoble,la racine choisieest dc=grid5000,dc=net. Les donnees sont organisees selon le schema exposedans la figure 5, correspondant a une configuration locale (voir §2.3.1).

ou=Hostsou=People ou=auto.home

dc=grid5000,dc=net

(/etc/passwd)ou=Group(/etc/group) (/etc/hosts) (/etc/auto.home)

Grenoble

ldap−idpot.clic.id

Fig. 5 – Architecture de la premiere experience Grid5000 sur Grenoble

Dans un premier temps, les machines des autres site pourront etre configureespour venir completer leur configuration NSS avec les donnees LDAP presentessur le serveur ldap-idpot.clic.id (voir §1)

On verra dans la section 8 l’evolution envisagee pour cette architecture. Laracine changera notamment pour dc=grid5000,dc=org

3.2 Installation de slapd

3.2.1 Cas d’une installation sur une Debian stable

Si vous utilisez une debian stable, le package slapd (version 2.0.23 au momentou ce document est ecrit) n’est pas configure pour supporter TLS.

Il faudra recuperer les sources9 du package et changer une regle de compilation.

> cd ; mkdir slapd_stable-sources

> cd slapd_stable-sources

> apt-get source slapd

> apt-get build-dep slapd

> apt-get install libssl-dev

9Au besoin, ajouter les lignes suivantes dans /etc/apt/sources.list :deb-src http ://security.debian.org/ stable/updates main contrib non-free

deb-src ftp ://ftp.fr.debian.org/debian-non-US stable non-US/main non-

US/contrib non-US/non-free

puis lancer un apt-get update.

20

Page 21: Tutorial LDAP

Pour activer SSL :> cd openldap2-2.0.23

puis editer le fichier debian/rules en changeant --without-tls par --with-tls.Il suffit alors de compiler le package : ./debian/rules binary.Cette commande va creer les packages .deb a installer :

> cd ~/slapd_stable-sources

> dpkg -i slapd_2.0.23-6.3_i386.deb libldap2_2.0.23-6.3_i386.deb \

libldap2-dev_2.0.23-6.3_i386.deb ldap-utils_2.0.23-6.3_i386.deb

Debconf va vous poser une serie de questions :

1. Directory initialization method : auto

2. Directory suffix style : custom

3. Enter your suffix : dc=grid5000,dc=net

4. Admin password : ne rien entrer, idem pour la verification. Ainsi, un motde passe sera genere automatiquement. Nous le changerons par la suite.

5. Replicate to another LDAP server : No

Attention : pour empecher la mise a jour automatique de ces packages viale depot Debian, il faut les marquer HOLD, par exemple avec dselect (enappuyant sur ’=’ pour les packages en question)Cela signifie aussi que vous devrez vous-meme vous assurer des alertes de secu-rite !

3.2.2 Autres cas

Des la version testing, le package slapd (version 2.1.30) est correctementconfigure. La seule manipulation a faire est alors :> apt-get install slapd libldap2 libldap2-dev ldap-utils

Remarque : il semblerait que les versions de slapd > 2.1 utilisent le formatberkeley DB 4.2...De meme, Debconf va vous poser une serie de questions :

1. DNS domain name : entrer grid5000.net afin que la base du DIT soit’dc=grid5000,dc=net’.

2. Enter the name of your organization : Laboratoire ID-IMAG

3. Admin password : tapez ’secret’ par exemple, on le changera par la suite.Re-tapez ’secret’ ensuite.

4. Allow LDAPv2 protocol : No

3.2.3 Dans tous les cas....

– Une fois l’installation terminee, stopper le serveur LDAP par /etc/init.d/slapd stop ;– Les fichiers de configuration seront localises dans /etc/ldap/

21

Page 22: Tutorial LDAP

4 Configuration du serveur LDAP

C’est le fichier slapd.conf qui gere la configuration du serveur. Le formatgeneral de ce fichier est le suivant :

# Fichier /etc/ldap/slapd.conf

####################################

# Section de configurations globales

# Inclusion des schemas

# configuration globales des logs, de SSL etc...

############################

# Database #1 - Berkeley DB

# Parametres de la base de donnees

# ACL de cette base

############################

# Database #2 - Berkeley DB

# Parametres de la base de donnees

# ACL de cette base

Il faut creer le repertoire qui contiendra la base de donnees. Sous root :

> mkdir -p /var/lib/ldap/grid5000.net

> chmod 700 /var/lib/ldap/grid5000.net

Je vous conseille de garder une sauvegarde du fichier fourni par defaut :> cp /etc/ldap/slapd.conf /etc/ldap/slapd.conf_DEB-orig

Le fichier complet pour cette prise en main est fournie dans annexe A. Lessections 4.1 et 4.2 detaillent chaques parties de ce fichier. Si vous souhaitezutiliser directement le fichier fourni sans lire ces explications, n’oubliez pas :

1. de configurer syslog pour gerer les logs du serveur (§4.1.2 page 23).

2. de changer le mot de passe de l’administrateur de la base LDAP (directiverootpw : voir §4.2.1 page 25)

3. de passer directement a la section 4.3 page 27 pour achever la configurationdu serveur.

4.1 Configurations globales

4.1.1 Inclusion des schemas

La premiere chose a definir : quels schemas10 devra supporter le serveur ? . Letableau 5 liste les schemas les plus utiles (et qui sont pour la plupart fournispar defaut). Ce document ne traite pas de la creation de nouveau schemas.Les schemas sont places par defaut dans /etc/ldap/schema.On les ajoute par l’appel include <filename>

Typiquement, on aura donc les inclusions suivantes :

10Les schemas ont ete introduit au §2.4.2, page 11

22

Page 23: Tutorial LDAP

Schema Description

core.schema LE fichier minimal a inclure. Definit les attributs basiquesde LDAPv3 confomement a [16, 15]

cosine.schema support des annuaires COSINE et X500

inetorgperson.schema informations sur les utilisateurs etc... (cf [13])

java.schema stockage d’objets Java ou de references JDNI (cf [12])

misc.schema divers objets et attribut.

nis.schema necessaire pour remplacer NIS par LDAP (cf[4] et §6)

openldap.schema divers objet utilise dans opneldap, pour informations.

automount.schema necessaire pour migrer des map automount ; schema nonfourni par defaut, voir §6.3

Tab. 5 – Liste des principaux schemas disponibles

# Schema and objectClass definitions

include /etc/ldap/schema/core.schema

include /etc/ldap/schema/cosine.schema

include /etc/ldap/schema/nis.schema

include /etc/ldap/schema/inetorgperson.schema

4.1.2 Logging, configuration d’execution

Il s’agit la de configuration la gestion des logs, des fichiers de PID etc...

Niveau Description

-1 enable all debugging

0 no debugging

1 trace function calls

2 debug packet handling

4 heavy trace debugging

8 connection management

16 print out packets sent and received

32 search filter processing

64 configuration file processing

128 access control list processing

256 stats log connections/operations/results

512 stats log entries sent

1024 print communication with shell backends

2048 print entry parsing debugging

Tab. 6 – Liste des niveaux de log (source :[2])

Le niveau des log est specifie par la directive loglevel. Les valeurs possiblessont definies dans le tableau 6. La combinaison de plusieurs Niveau se fait enles ajoutant11.

11Le niveau par defaut est 296=256+32+8

23

Page 24: Tutorial LDAP

A noter que les informations de log utilisent le ’facility’ LOG LEVEL4 de syslog.Il faut donc ajouter la ligne suivante dans /etc/syslog.conf :local4.debug /var/log/slapd.log

et relancer le service (’/etc/init.d/sysklogd restart’)Ce fichier /etc/log/slapd.log sera une aide precieuse pour le debuggage.

D’autres parametres controlent l’execution :– pidfile <filename> : le fichier ou sera stocke le PID de slapd12.– argsfile <filename> : les argument passes a slapd.– schemacheck <on|off> : verifie la conformite de toutes les entrees aux sche-

mas supportes.Dans notre cas, on aura :

## Added logging parameters

loglevel 296

## Added execution control

schemacheck on

pidfile /var/run/slapd.pid

argsfile /var/run/slapd.args

# Where to store the replica logs

replogfile /var/lib/ldap/replog

4.1.3 Options SASL

[ En cours d’investigations...] Typiquement

sasl-host hostname

sasl-realm string

sasl-secprops propertie

4.1.4 Options SSL/TLS

SSL/TLS recquiert la generation d’un certificat valide pour le serveur, avecla cle privee associee. §3.1.2 a permis de creer le certificat pour l’autorite decertification (CA) et le serveur. On trouve ainsi les directives :– TLSCertificateFile : l’emplacement du certificat du serveur.– TLSCertificateKeyFile : l’emplacement de la cle privee associee au certifi-

catdu serveur. Ce fichier ne doit etre lisible que par root ! ! !– TLSCACertificateFile : l’enplacement du certificat du CA qui a signer celui

du serveur. Cette directive est obligatoire depuis OpenLDAP2.1– TLSCipherSuite : les specifications des algorithmes de chiffrement.Dans notre cas :

## TLS options for slapd

TLSCipherSuite HIGH

TLSCACertificateFile /etc/ldap/certificate/CA-cert.pem

TLSCertificateFile /etc/ldap/certificate/LDAPserver-cert.pem

TLSCertificateKeyFile /etc/ldap/certificate/LDAPserver-key.pem

12Ce fichier est principalement utilise par les script de shutdown

24

Page 25: Tutorial LDAP

4.1.5 Autres options de securite

On distingue un certain nombre d’autres directives de securite :

– password-hash : definit le schema de chiffrement des mots de passe pardefaut. Les valeurs possibles sont celles evoquees dans le §2.5.3 page 15, cellepar defaut etant {SSHA}

– security permet de definir un ssf13 (une valeur entiere comprise entre minssfet maxssf, parametres definis dans §4.1.3) Par exemple :security update_sasl=128,update_tls=128

– require : definit les conditions generales d’acces a l’annuaire. les principalesoptions disponibles sont none, authc (pas d’acces anonyme, tout client doits’authentifier), bind (requete bind obligatoire), LDAPv3 (le client doit utiliserla version 3 du protocole LDAP)

– allow/disallow : permet d’activer/desactiver certaines fonctionnalites. Parexemple, allow bind_v2 autorise les requetes bind de clients LDAPv2.

Pour nous, on ne s’interessera qu’a la premiere option :

# Misc security settings

password-hash {SSHA}

4.2 Configuration des Bases de Donnees

Un serveur LDAP est capable de gerer plusieurs bases de donnees en memetemps. On place les details de la configuration de chaque base apres les confi-gurations globales dans le fichier slapd.conf (§4 page 22).

4.2.1 Ajout d’une base

Dans notre exemple, on ajoute au fichier slapd.conf les lignes suivantes :

### Database Directives Berkeley DB ###

database ldbm

suffix "dc=grid5000,dc=net"

rootdn "cn=admin,dc=grid5000,dc=net"

rootpw {SSHA}xxxxxxxxxxxxxxxxxxxxxxxxx

directory "/var/lib/ldap/grid5000.net"

mode 0600

– La directive database precise le format de base de donnees utilise (la listedes formats possibles est donnee dans le tableau 4, page 19)

– suffix permet de definir le DN racine gere– Le rootdn est tres important : il definit l’utilisateur autorise a creer des

entrees dans la base de donnees. Cet utilisateur devra etre ajoute a la base(voir §?? page ??.)

– rootpw correspond au mot de passe de l’utilisateur rootdn. Pour le generer,il suffit d’utiliser la commande suivante :

13security strength factor

25

Page 26: Tutorial LDAP

> slappasswd

New password:

Re-enter new password:

{SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxxxx

La chaine renvoyee peut alors etre ajouter a la directive rootpw.– directory definit le repertoire ou sera physiquement stocke la base de don-

nees, tandis que mode precise les droits d’acces des fichiers crees dans cerepertoire.

On complete ensuite cette configuration par diverses optimisations :

1. La generation d’index qui permettent d’accelerer les recherches.Les types d’index supportes sont les suivants :

– approx (approximate)– eq (equality)– pres (presence)– sub (substring)

2. le parametre cachesize qui definit le nombre d’entrees qui doivent etregardees en memoire (par defaut 1000).

Dans notre cas, on utilisera :

# Indexing options

index objectClass eq

index cn pres,eq

cachesize 2000

Note : voici un indexage optimise trouve sur un site a tester pour lecas de la migration de donnees NIS. Je le place ici en attendant dele placer dans une partie dediee :

index uid eq

index uidNumber eq

index gidNumber eq

index memberUid eq

index cn pres,eq,sub

index sn pres,eq,sub

index objectClass pres,eq

index nisDomain eq

index nisNetgroupTriple pres,eq,sub

index memberNisNetgroup pres,eq,sub

index nisMapName eq

index amdMapName eq

index amdMapKey eq

4.2.2 Configuration des ACLs

Les ACLs, notamment leur syntaxe, ont deja ete abordees dans le §2.5.2 page 14.Elles precisent pour la base de donnees en question qui a acces a quoi.

Voici celle utilisee dans cet exemple :

26

Page 27: Tutorial LDAP

# The userPassword by default can be changed

# by the entry owning it if they are authenticated.

# Others should not be able to see it, except the

# admin entry and the special user ’nss’

access to attribute=userPassword

by dn="cn=admin,dc=grid5000,dc=net" write

by dn="cn=nss,dc=grid5000,dc=net" read

by self write

by anonymous auth

by * none

# The admin dn has full write accesswhereas the special

# user ’nss’ can read everything. Others should authenticate.

access to *

by dn="cn=admin,dc=grid5000,dc=net" write

by dn="cn=nss,dc=grid5000,dc=net" read

by * auth

On peut voir le role particulier du DN cn=nss,dc=grid5000,dc=net qui serautilise pour toutes les requetes de lecture (en particulier des mots de passe)dans la base (et ainsi eviter une lecture anonyme du contenu de la base). Onverra un exemple de l’impact de cette ACL au §5.4.

4.3 Insertions minimales requises dans la base de donnees

A ce stade, la base de donnees est completement vide et il convient d’y integrerau minimum la definition de la structure de la base et de l’utilisateur adminis-trateur et d’un utilisateur special qui sera seul habilite a lire les donnees de labase directement.La section 5 detaillera les commandes que nous allons utiliser ici. Nous utilise-rons des fichiers au format LDIF (voir §2.4.3, page 12) pour ces insertions.Les insertions de base sont incluses dans le fichier init_LDAP-database.ldif :

> cat /etc/ldap/init_Grid5000-database.ldif

## Build the root node.

dn: dc=grid5000,dc=net

dc: grid5000

objectClass: dcObject

objectClass: organization

o: Annuaire LDAP Grid5000

## Entry for the admin root

# userpassword is the same as the one precised in

# the ’rootpw’ attribute of /etc/ldap/slapd.conf

dn: cn=admin,dc=grid5000,dc=net

objectClass: organizationalRole

objectClass: simpleSecurityObject

cn: admin

description: LDAP administrator

27

Page 28: Tutorial LDAP

userPassword: {SSHA}cYIqaZxwiHB8eMbTgV1SFTWBMJKWBi+Y

## Entry for the special user for user-lookups

# here, password corresponds to ’nssLookup’

dn: cn=nss,dc=grid5000,dc=net

objectClass: organizationalRole

objectClass: simpleSecurityObject

cn: nss

description: LDAP NSS user for user-lookups

userPassword: {SSHA}EyAP39vIKLlR1uQR5PIC+liuERtwO0sK

Remarque :

1. N’oubliez pas de changer la valeur du champ userPassword pour cn=

admin,dc=grid5000,dc=net : il doit correspondre a l’entree rootpw dufichier /etc/ldap/slapd.conf.

2. Le mot de passe de l’utilisateur special n’est pas tres important car ilfigurera en clair (malheureusement) dans deux fichiers de configurationau niveau client (voir §7.2.1 et §7.2.2). Cet utilisateur evite simplementles requetes anonymes...

Pour ajouter ces donnees dans la base de donnees :

> slapadd -v -l /etc/ldap/init_Grid5000-database.ldif

added: "dc=grid5000,dc=net" (00000001)

added: "cn=admin,dc=grid5000,dc=net" (00000002)

added: "cn=nss,dc=grid5000,dc=net" (00000003)

4.4 Modification du script de demarrage /etc/init.d/slapd

Pour que le serveur puisse repondre a des requetes via une URL ldap

TODO : expliquer le format des urls

et notamment ldaps, il est necessaire de modifier le script de demarrage de slapd(il s’agit du script /etc/init.d/slapd).

La premiere idee (qui semble la plus logique) serait de placer la ligneSLAPD_OPTIONS="-h ’ldap:/// ldaps:///’"

dans le fichier /etc/default/slapd (qui est cense specifier les options du bi-naire slapd pour le script de demarrage) mais l’usage des guillemets pose pro-bleme.

4.4.1 Cas Debian stable

Curieusement, meme si un fichier /etc/default/slapd existe, les variables qu’ilspecifie ne sont pas utilisees dans le script de demarrage !

Toujours est il qu’on remplacera dans /etc/init.d/slapd--exec /usr/sbin/slapd

dans la fonction start()par :--exec /usr/sbin/slapd -- -h ’ldap:/// ldaps:///’.

28

Page 29: Tutorial LDAP

4.4.2 Autres cas

TODO : dans les versions recentes de slapd, le fichier /etc/default/slapd

contient la ligne

# Example usage:

SLAPD_SERVICES="ldap:/// ldaps:///"

a ajouter...

On modifie /etc/init.d/slapd en remplacant :--exec /usr/sbin/slapd -- $SLAPD_OPTIONS 2>&1‘

dans la fonction start_slapd() par--exec /usr/sbin/slapd -- -h ’ldap:/// ldaps:///’ $SLAPD_OPTIONS 2>&1‘"

Remarque : Il est imperatif que toute requete arrivant sur le serveur soit en-capsulee dans un tunnel SSL, ce qui impose soit l’utilisation d’url ldaps://(configuration par defaut des clients), soit l’utilisation d’url ldap:// avec l’op-tion -ZZ dans la requete (a eviter)

TODO : inclure les modifs proposees dans la section suivante. Inclure tout celadans un fichier propose en download...

4.5 Faire en sorte que le serveur ne se lance pas sous root

Il est possible de faire ne sorte que le serveur ne soit pas lancer par l’utilisateurroot mais par un utilisateur dedie, typiquement slapd.

En terme de securite, c’est evidemment nettement mieux car une attaque sur leserveur LDAP fournira en general a l’attaquant un acces avec les droits utilisespar le serveur. C’est d’autant plus interessant si vous utilisez une Debian stableet que, comme on l’a vu, vous devez vous charger personnellement des misesa jour de securite ce qui laisse du temps pour l’exploitation d’attaques sur leserveur !

->TODO detailler les manips et les tester.

4.6 Verifier que le serveur marche

On lance le serveur :/etc/init.d/slapd start

(penser a jeter un coup d’oeil aux logs en live par un tail -f /var/log/slapd.log

sur une autre console par exemple).

Les commandes suivantes14, lancees sous root, doivent rendre un resultat sanserreur :

ldapsearch -H "ldap://127.0.0.1" -b "dc=grid5000,dc=net" -x

teste une requete non chiffree sur le port standard 389

ldapsearch -H "ldap://ldap-idpot.clic.id" -b "dc=grid5000,dc=net" -x -ZZ

teste une requete chiffree sur le port standard 389. l’option -ZZ montreque StartTLS marche correctement. Le nom specifie dans l’URL (ici,

14en remplacant ldap-idpot.clic.id par le nom de votre serveur

29

Page 30: Tutorial LDAP

ldap-idpot.clic.id) doit correspondre a celui utilise dans le certificatdu serveur, donc au resultat de la commande ’hostname -f’ (voir §3.1.2page 17)

ldapsearch -H "ldaps://ldap-idpot.clic.id" -b "dc=grid5000,dc=net" -x

teste une requete chiffree sur le port standard 636 (ldaps:// est la faconde specifier l’utilisation de SSL). Meme remarque que precedemment pourle nom utilise dans l’URL.

30

Page 31: Tutorial LDAP

5 Les principales commandes LDAP

5.1 Lancement du serveur slapd

Options Description

-h URI list Specifie la liste des URIs LDAP que le demon slapd devra servir.Exemple typique : ldap:/// (LDAP sur port 389 ; par default),ldaps:/// (LDAP sur SSL on port 636) et ldapi:/// (LDAP surIPC).

-u username Specifie l’utilisateur et le groupe effectif pour slapd-g groupname

-d integer Definit le niveau de log

-f filename Utiliser le fichier de configuration specifie

Exemple : slapd -u slapd -h ’ldap :/// ldaps :///’

Tab. 7 – Principales options disponibles pour slapd

Le serveur peut etre lance de deux facons :– Soit directement (voir le tableau 7 pour les options possibles) : /usr/sbin/slapd

On verifie que le serveur est bien lance par ps -ef | grep slapd.ATTENTION : pour stopper proprement15 le serveur lance de cette facon :> kill -INT ‘cat /var/run/slapd.pid‘

– Soit via le script de demarrage : /etc/init.d/slapd <start|stop|restart>

Noter les modifications apportees a ce script au §4.4, page 28.

5.2 Commandes online/offline

Offline Online Description

slapadd ldapadd Ajout d’entrees dans la base LDAP

slapcat Utilitaire pour dumper le contenu de la base au formatLDIF

slappasswd Utilitaire LDAP pour obtenir le chiffrement de motsde passe

ldappasswd Changer le mot de passe d’une entree LDAP

ldapdelete Suppression d’une entree LDAP

ldapmodify Modification d’une entree

ldapsearch Recherche dans la base LDAP

ldapmodrdn Renommage d’une entree LDAP

Tab. 8 – Principales commandes online/offline

On distingue deux modes de fonctionnement :

1. methode offline (sans passer par le serveur LDAP) : Dans ce cas, on uti-lisera la commande slapadd. Ces commandes sont necessairement tapees

15’Shutting down slapd by more drastic means, such as kill -9, can result in data corruptionand should be avoided at all costs.’

31

Page 32: Tutorial LDAP

sur le serveur LDAP.

2. methode online (en passant par le serveur LDAP) : commande ldap*(comme ldapadd, ldapmodify etc...). Ces commandes peuvent etres uti-lisees indifferement depuis le serveur ou un client LDAP16

Le tableau 8 fournit les principales commandes disponibles, selon qu’elles soientonline ou offline. La plupart des commandes online ont des options communes(qui sont en fait les plus utilisees) qui sont detaillees dans le tableau 9.

Options Description

-D binddn specifie le DN utilise pour la connexion au serveur LDAP

-f filename specifie le fichier LDIF contenant les entrees a utiliser pour l’ope-ration

-H URI Definit l’URI LDAP a utiliser pour la requete de connexion

-n ne pas effectuer l’operation, juste dire ce qui aurait ete fait

-v mode verbeux

-w password specifie le mot de passe du DN utilise pour la connexion

-W demande un prompt pour entrer le mot de passe du DN utilisepour la connexion

-x Active la ”simple authentification” et non SASL.en pratique, a ne pas utiliser sans SSL (voir §2.5.1 page 13)

-Z[Z] Genere une requete StartTLS. l’utilisation de -ZZ impose que cetterequete soit reussie.

-d integer specifie les informations de debuggage a afficher (voir tableau 6page 23)

Tab. 9 – Principales options communes a ldapsearch, ldapadd, ldapdelete, ldapmodifyet ldapmodrdn

5.3 Ajouter des entrees dans la base LDAP

Pour ajouter des entrees dans la base :

1. creer un fichier au format LDIF (voir §2.4.3 page 12), par exemple toto_add.ldif,qui contiendra les entrees a ajouter.

2. le plus simple ensuite est d’utiliser la methode offline pour ajouter lecontenu du fichier dans la base (cela suppose que le serveur est arrete) :slapadd -v -l toto_add.ldif

l’option -v fournit des infos supplementaires.

Pour la methode online (si le serveur tourne) :

(a) Definissez un alias pour eviter de retaper toujours les memes op-tions17 : alias MyLdapadd=’ldapadd -W -x -H "ldaps://<votre_serveur>"

-D "cn=admin,dc=grid5000,dc=net"’

16sous reserve evidemment que celui-ci soit correctement installe et configure : voir pourcela la section 7 page 42

17Il faut vraiment toutes ces options ! En particulier, sans l’option -W, l’authentificationde l’adminitrateur echouera forcement et la requete deviendra anonyme. Or, un utilisateuranonyme n’a pas les droits d’ecriture dans la base d’apres les ACLs de slapd.conf (§4.2.2) et’ajout echouera. Voir le tableau 9 pour bien comprendre a quoi chaque option correspond

32

Page 33: Tutorial LDAP

(b) MyLdapadd -v -f toto_add.ldif pour ajouter le contenu du fichiera la base.

A noter l’existence de l’option -c de ldapadd qui permet de continuermalgre les erreurs.

Un exemple d’ajout a deja ete presente au §4.3 page 27.Sinon, voici le contenudu fichier toto_add.ldif utilise en exemple :

> cat toto_add.ldif

## Build the toto ou.

dn: ou=toto,dc=grid5000,dc=net

ou: toto

objectClass: organizationalUnit

En cas de problemes lors de l’ajout simultane de plusieurs entrees (par exempleavec des messages d’erreurs comme ldap_add: Invalid syntax et/ouadditional info: value contains invalid data), assurez vous que les sautsde lignes ne comportent pas d’espace au debut de la ligne18 et que vous incluezles bons schemas dans slapd.conf

5.4 Recherches dans la base LDAP

ldapsearch [standard_options] [special_options] [filter] [attrs]

– le tableau 9 fournis les principales options standards disponibles– les options specifiques de ldapsearch sont fournies dans le tableau 10– le filtre de recherche doit etre represente par une chaine au format specifie

dans [5]. Par defaut, le filtre utilise est (objectClass=*).– si une ou plusieurs entrees sont trouvees, seuls les attributs attrs (tous par

defaut) seront affiches sur la sortie standard.

Options Description

-b basedn definit le DN de base pour la recherche

-l limit definit la duree limite (en seconde) pour la recherche

-L-LL-LLL le resultat est fournit au format LDIFv1, -LL supprime les com-mentaires, comme -LLL qui supprime aussi les infos de version

-s [sub|base|one] definit le scope de la recherche.sub (defaut) : recherche dans le sous-arbre de la basebase : recherche dans les premier fils de la baseone : recherche dans l’entree de base uniquement

-S attribut les resultats sont trie selon les valeurs de l’attribut

-z limit Specifie le nombre maximal d’entrees a renvoye

Tab. 10 – Principales options specifiques de ldapsearch

Voici quelques exemples d’utilisation, qui illustrent egalement le fonctionnementdes ACLs :

18utiliser l’option ’set list’ de vi pour le voir

33

Page 34: Tutorial LDAP

Exemple 1 Voir tout ce que la base contient : ldapsearch -x -b "dc=grid5000,dc=net",identique a : ldapsearch -x -b "dc=grid5000,dc=net" "(objectclass=*)"

Exemple 2 Rechercher l’organizationalUnit ’toto’ :ldapsearch -x -b "dc=grid5000,dc=net" "(ou=toto)"

Exemple 3 idem que l’exemple 2, en ne renvoyant que les attributs ’ou’ :ldapsearch -x -b "dc=grid5000,dc=net" "(ou=toto)" ou

ATTENTION! Si vous utilisez les ACLs fournies au §4.2.2 page 26 ou le fichierde configuration de l’annexe A, les commandes precedentes ne renverront aucunresultat !

En effet, avec ces ACLs, comparer les resultats des commandes suivantes19 :

>ldapsearch -x -b "dc=grid5000,dc=net" "ou=toto" -LLL

>ldapsearch -x -b "dc=grid5000,dc=net" "ou=toto" -LLL \

-D "cn=nss,dc=grid5000,dc=net" -W

Enter LDAP Password: <----- Entrer le mot de passe du DN nss

dn: ou=toto,dc=grid5000,dc=net

ou: toto

objectClass: organizationalUnit

On obtient un resultat dans le second cas et pas dans le premier. Que s’est ilpasse ? Dans le premier cas, la connexion est anonyme et d’apres l’ACL, seulles DN authentifie sont autorises a acceder au contenu de la base : (clauseby * auth ; en remplacant cette clause par by * read, vous obtiendriez biensur un resultat). En revanche dans le second cas et sous reserve que le bonmot de passe soit entre (sinon, la requete devient anonyme), le DN cn=nss,dc=

grid5000,dc=net est authentifie et autorise en lecture

(clause by dn="cn=nss,dc=grid5000,dc=net" read).

5.5 Modifier/Supprimer des entrees dans la base

Comme pour l’ajout, on passera par un fichier LDIF pour modifier des entreesdans la base. On utilisera ensuite la commande ldapmodify. A noter que commeles fichiers LDIF sont lus sequentiellement, il est possible de modifier des entreescreees plus tot dans le fichier

Dans le fichier, chaque entree a modifier contiendra un mot clechangetype: <type_modification>

qui precisera le type de modification apporte. Les valeurs possibles pour lechamp <type modification> sont resumees dans le tableau 11.

Je vous conseille de definir un alias pour ldapmodify et les options que vousutiliserez a chaque fois :alias MyLdapmodify=’ldapmodify -W -x -H "ldaps://<votre_serveur>" \

-D "cn=admin,dc=grid5000,dc=net"’

Voici maintenant un exemple suffisamment commente qui illustre toutes cespossiblitites

19l’option -LLL n’est utilisee que pour limiter la taille des resultats en sortie (voir tableau 10)

34

Page 35: Tutorial LDAP

add ajouter l’entree dans l’annuaire (choix par defaut)

delete supprimer l’entree de l’annuaire

modify modifier les attributs de l’entree. On peut ainsi a la fois ajouter,modifier ou supprimer des attributs

modrdn changer le RDN (Voir tableau 1 page 11) de l’entree

moddn changer le DN de l’entree

Tab. 11 – Valeurs possibles pour le mot cle ’changetype’

> cat toto_modify.ldif

## Add an organization tata under toto.

dn: o=tata,ou=toto,dc=grid5000,dc=net

changetype: add

o: tata

objectClass: organization

## Add a new attribute ’description’ to o=tata

dn: o=tata,ou=toto,dc=grid5000,dc=net

changetype: modify

add: description

description: ajout d’une description

## Change the value of attribute ’description’ for o=tata

dn: o=tata,ou=toto,dc=grid5000,dc=net

changetype: modify

replace: description

description: j’ai modifie la description

## Delete the attribute ’description’ for o=tata

dn: o=tata,ou=toto,dc=grid5000,dc=net

changetype: modify

delete: description

## Change the rdn of tata to turlututu

dn: o=tata,ou=toto,dc=grid5000,dc=net

changetype: modrdn

newrdn: o=turlututu

## Change the dn of o=turlututu to o=leon and

# move the entry at the same level than ou=toto

dn: o=turlututu,ou=toto,dc=grid5000,dc=net

changetype: moddn

# create the new name (RDN)

newrdn: o=leon

# deletes old entry (0 to keep the current entry)

deleteoldrdn: 1

35

Page 36: Tutorial LDAP

# adds to grid5000 hierarchy

newsuperior: dc=grid5000,dc=net

On execute ce fichier par l’appel MyLdapmodify -f toto_modify.ldif

Remarques :– pour supprimer une entree, on aurait aussi pu utiliser la commande :ldapdelete [standard_options] [-r] <dn_to_delete>

Les options standards sont celles specifiees dans le tableau 9 page 32.L’option -r precise que la suppression est recursive (tous les noeuds fils de<dn to delete> seront aussi supprimes).

– pour toutes les modifications relatives au DN et au RDN, on peut aussi uti-liser la commande :ldapmodrdn [standard_options] [-c] [-r] [-s superior_node] <dn> <new_rdn>

L’option -c permet de continuer malgre les erreurs.-r permet de supprimer l’ancienne entree (qui est conservee par defaut).Enfin, l’option -s permet de preciser l’entree sous laquelle se greffera cettenouvelle entree.

5.6 Quelques outils graphiques

On l’aura compris, la manipulation de fichiers LDIF n’est pas forcement aisee.Voici quelques pointeurs vers des outils graphiques (pas encore testes) :– GQ (http://biot.com/gq/)– Java LDAP Browser/Editor (http://www.iit.edu/~gawojar/ldap/)– Softerra LDAP Browser (http://www.ldapbrowser.com/)

36

Page 37: Tutorial LDAP

6 Gestion des fichiers de configurations par LDAP

A ce stade du tutorial, nous disposons d’un serveur operationnel que nous in-terrogeons de maniere securisee. Mais la base de donnees LDAP est vide.Dans le cadre experimental de ce document, nous souhaitons deleguer la ges-tion des comptes machines et de l’authentification des utilisateurs au serviced’annuaire LDAP.Cela suppose en particulier que la base LDAP puisse fournir le contenu defichiers de configurations systemes tels que /etc/passwd, /etc/shadow, /etc/group, /etc/hosts ou encore /etc/auto.home (ce dernier fichier localisantpour autofs les points de montages des repertoires home de chaque utilisateur).Sur un reseau ouvert, on trouve en general un ou plusieurs serveurs NIS[7] quistockent et diffusent ces fichiers de configuration aux clients du reseau. Cettesolution presente ce nombreux avantages :– centralisation les informations (ce qui en facilite la maintenance)– relative transparence d’utilisation cote client.Cependant, NIS ne passe pas a l’echelle et la solution la plus adaptee et la plusrobuste pour remplacer NIS nous a sembler etre LDAP.Nous allons voir dans cette section comment migrer le contenu des fichiers deconfiguration systemes au format LDIF pour les integrer dans la base LDAPselon un schema standard. Nous verrons ensuite dans la section 7, page 42) l’ins-tallation et la configuration des machines clientes pour une gestion transparentede ces fichiers.

6.1 Les outils de migration des fichiers de configuration

On utilise les scripts de migrations developpes par www.padl.com.

6.1.1 Installation

– Cas Debian stable :Le package Debian stable (version 40-1) est bugge et il est donc conseille :

1. soit d’installer la version testing du package (version 45-1) :apt-get install -t testing migrationtools

2. soit de recuperer directement les script a l’adresse http://www.padl.

com/download/MigrationTools.tgz (version 45 au moment ou ce do-cument est ecrit). Par coherence avec la suite, nous supposons qu’unefois l’archive decompressee, les scripts qu’elle contient seront places aumeme endroit que ceux du package (/usr/share/migrationtools/).

– Autres cas :apt-get install migrationtools

Les scripts seront places dans le repertoire /usr/share/migrationtools

TODO : voir pour les autres distrib

6.1.2 Configuration

Dans le fichier /etc/migrationtools/migrate_common.ph, on modifie cer-taines variables :

37

Page 38: Tutorial LDAP

# Default DNS domain

$DEFAULT_MAIL_DOMAIN = "grid5000.net";

# Default base

$DEFAULT_BASE = "dc=grid5000,dc=net";

La variable $DEFAULT BASE correspond a la base de l’annuaire ou sera stockele contenu des fichiers. La valeur ci-dessus correspond a l’architecture exposeedans la figure 5, page 20. Dans le cadre de la seconde experimentation presenteeau §8.2, il faudra placer cette variable a la valeur o=<Ma_Ville>,dc=grid5000,dc=net.

Dans les outils de migration, il y a plusieurs scripts permettant de transformerchaque fichier systeme au format LDIF. Les informations de chaque fichier sontsauvees dans des OrganizationalUnits (OU) differentes20 :

/etc/fstab −→ ou=Mounts

/etc/hosts −→ ou=Hosts

/etc/passwd et /etc/shadow −→ ou=People

/etc/group −→ ou=Group

/etc/protocols −→ ou=Protocols

/etc/rpc −→ ou=Rpc

/etc/services −→ ou=Services

/etc/networks −→ ou=Networks

netgroups −→ ou=Netgroups

Il faut creer ces OU sur le serveur. Pour cela, utiliser le script migrate_base.pl :

cd /usr/share/migrationtools

./migrate_base.pl > /tmp/init_base_migration.ldif

Il faut supprimer la premiere entree du fichier /tmp/init_base_migration.ldif(qui creer l’entree correspondant a la base). Ensuite, retirer eventuellement lesentrees dont vous ne vous servirez pas. On obtient dans notre cas :

> cat /tmp/init_base_migration.ldif

dn: ou=People,dc=grid5000,dc=net

ou: People

objectClass: top

objectClass: organizationalUnit

dn: ou=Group,dc=grid5000,dc=net

ou: Group

objectClass: top

objectClass: organizationalUnit

dn: ou=Hosts,dc=grid5000,dc=net

ou: Hosts

objectClass: top

objectClass: organizationalUnit

20on verra au §6.3 ou les fichiers de configuration de autofs seront geres

38

Page 39: Tutorial LDAP

Rapatrier eventuellement ce fichier sur votre serveur LDAP et ajouter soncontenu a la base :

# /etc/init.d/slapd stop

Stopping OpenLDAP: slapd.

# slapadd -v -l /tmp/init_base_migration.ldif

added: "ou=People,dc=grid5000,dc=net" (0000000b)

added: "ou=Group,dc=grid5000,dc=net" (0000000c)

added: "ou=Hosts,dc=grid5000,dc=net" (0000000d)

6.2 Migration les fichier passwd, group et hosts

6.2.1 Recuperation du contenu des tables NIS

En effet, si ce sont les fichiers diffuses par NIS que vous souhaitez migrer (commec’est le cas dans le cadre de cette experimentation), il faut deja recuperer lecontenu de ces fichiers. Pour cela, on execute les commandes suivantes sur lamachine cliente configuree avec NIS21 :

ypcat passwd > /tmp/nis_passwd

ypcat group > /tmp/nis-group

ypcat hosts > /tmp/nis_hosts

et on transfere ces fichiers sur le serveur via scp :scp /tmp/nis_* root@<votre_serveur>:/tmp/

6.2.2 Conversion au format LDIF

cd /usr/share/migrationtools/

./migrate_passwd.pl /tmp/nis_passwd /tmp/ldap_passwd.ldif

./migrate_group.pl /tmp/nis_group /tmp/ldap_group.ldif

./migrate_hosts.pl /tmp/nis_hosts /tmp/ldap_hosts.ldif

Vous aurez compris que le format d’utilisation des scripts est le suivant :migrate_<file> <file> <output_file>.ldifVerifier que les fichiers generesont un format correct (c’est comme ca que j’ai detecte le bug des packagesstables)

6.2.3 Insertion dans la base LDAP

En supposant que le serveur soit toujours arrete :

slapadd -v -c -l /tmp/ldap_passwd.ldif

slapadd -v -c -l /tmp/ldap_group.ldif

slapadd -v -c -l /tmp/ldap_hosts.ldif

Attention ! L’option -c permet de continuer malgre les erreurs, qui sont dontplus difficiles a tracer.

21il n’y a avait pas dans notre cas de map shadow

39

Page 40: Tutorial LDAP

6.3 Migration des fichiers de configuration d’automount

automount est un demon qui automatise le montage (et le demontage) decertains systemes de fichiers. Si le systeme de fichiers n’est pas monte (parexemple, un CD), et qu’un utilisateur essaye d’y acceder, il sera automatique-ment (re)monte (en particulier, l’utilisateur en question n’aura pas a utiliser lacommande mount).

autofs controle les operations du demon automount par le biais de fichiers deconfiguration, constitues du fichier /etc/auto.master, qui contient les pointsde montage et d’un fichier par point de montage (typiquement /etc/auto.miscou /etc/auto.home), detaillant les options systemes de celui-ci.

Pour plus de details, voir [14].

Dans le cadre de notre experience, le serveur NIS diffuse une map, /etc/auto.home, qui permettait de monter automatiquement le repertoire home de chaqueutilisateur.

Cette section montre comment integrer le contenu de ces fichiers dans une baseLDAP. Nous supposerons que le fichier principal /etc/auto.master resteralocal et propre a chaque machine cliente (nous verrons en §7.3 les modificationsqu’il faudra lui apporter).

6.3.1 Installation du package autofs-ldap

Sur le serveur :apt-get install autofs-ldap

Le package fournit notamment un nouveau schema automount.schema et lalibrairie lookup_ldap.so

Attention ! lorsque j’ai installe le package, le fichier automount.schema n’apas ete installe. Le bug a ete signale mais en attendant, le contenu de ce fichierest fourni dans l’annexe E page 61.

Il suffit de copier ce fichier dans /etc/ldap/schema/automount.schema.

Ensuite, on decommente dans le fichier de configuration slapd.conf (qui a etefourni en annexe A) la ligne :include /etc/ldap/schema/automount.schema

6.3.2 Migration du fichier /etc/auto.home

En regardant les tables montees avec NIS initialement :

> cat /etc/auto.master

/var/autofs/misc /etc/auto.misc --timeout=3

#/var/autofs/net /etc/auto.net

/home/nis auto.home

On voit que seul le fichier auto.home etait recupere par NIS. On recupere soncontenu :

40

Page 41: Tutorial LDAP

> ypcat auto.home

-rw,nfs,hard,intr,nosuid,rsize=8192,wsize=8192,retrans=6 \

serveur.clic.id:/home/nis/&

On voit que dans notre cas particulier, on aura a traiter un mapping generique(le format de ce fichier n’est pas de la forme classique (voir ’man 5 autofs’) :key [-options] locationLa demarche pour ajouter ce fichier dans la base LDAP a ete la suivante :

1. Creation du fichier des entrees LDIF a la main (ne PAS utiliser les scriptsde migration !) :

> cat /tmp/auto.home.ldif

# This entry is more or less a place-holder for automount

# entries for directories which get mounted under /home/nis.

dn: ou=auto.home,dc=grid5000,dc=net

objectClass: top

objectClass: organizationalUnit

ou: auto.home

# This is a wildcard entry for any user whose home directory

# is under /home/nis .

dn: cn=/,ou=auto.home,dc=grid5000,dc=net

objectClass: top

objectClass: automount

description: generic home directory

automountInformation: -rw,nfs,hard,intr,nosuid,rsize=8192,\

wsize=8192,retrans=6 serveur.clic.id:/home/nis/&

cn: /

(penser a enlever le retour ’\’ de l’avant-derniere ligne)

TODO : donner exemple dans le cas d’un mapping classique.

2. Ajout de ce fichier dans la base LDAP :slapadd -v -l /tmp/auto.home.ldif

3. Cote client, modification du fichier /etc/auto.master comme exposeau §7.3.

41

Page 42: Tutorial LDAP

7 Installation du client LDAP

A ce niveau, nous disposons d’un serveur LDAP qui fonctionne et qui contienttoutes les informations dont les machines clientes auront besoin.Cette section detaille l’installation d’un poste client et se decoupe en plusieursparties :

1. installation et configuration de base pour permettre l’interrogation duserveur LDAP a distance (§7.1)

2. installation et configuration de l’authentification des utilisateurs via LDAP.Sous Linux, cette authentification se fait via deux outils que sont NSS(Name Service Switch) et PAM (Pluggable Authentication Module). (§7.2)

3. modification de auto.master pour prendre en compte la gestion de cer-taines maps autofs par le serveur LDAP (§7.3).

A l’issue de ces trois etapes, la machine cliente sera completement configuree etfonctionnelle.

7.1 Initialisation et configuration de base du client

7.1.1 Cas d’une installation sur une Debian stable

Comme pour l’installation du serveur (voir §3.2.1), il y a normalement unepetite manipulation a faire pour que SSL soit supporte.Cependant, malgre toutes mes tentatives, je n’ai pas reussi a faire fonctionnerSSL/TLS avec le package stable ldap-utils (alors que j’avais bien reconstruitle package avec l’option --with-tls). Il semble en effet que cette version (2.0.23-6.3) de ldap-utils ne gere pas les options SSL (elle ne figurent meme pas dansle man).C’est pourquoi la seule solution (facilitant aussi le travail de mise a jour au-tomatique des package au niveau client) est de forcer l’installation en testing(avec tous les inconvenients que cela comporte, notamment la mise a jour de lalibc6) :

> apt-get install -t testing ldap-utils

> apt-get install openssl

7.1.2 Autres cas

Il n’y a pas de problemes (SSL est supporte directement) et il suffit de taper :apt-get install ldap-utils openssl

7.1.3 Dans tous les cas....

Le fichier de configuration, /etc/ldap/ldap.conf est fourni dans l’annexe Bpage 57. Faites une sauvegarde de ce fichier avant de l’ecraser :cp /etc/ldap/ldap.conf /etc/ldap/ldap.conf_DEB-orig

Voici les principales options disponibles :

BASE <base> le DN de base a utiliser pour les recherches.Ici, dc=grid5000,dc=net

42

Page 43: Tutorial LDAP

URI <url serveur> l’url permettant permttant d’interroger le serveur. Lenom du serveur specifie dans l’url doit etre connu sans passer par le DNSdu reseau22. On precisera donc soit une adresse IP, soit un nom dontla correspondance en adresse IP figure dans le fichier local /etc/hosts.Dans notre cas, un aura :URI ldaps://ldap-idpot.clic.id

Ainsi, toutes les requetes clientes soient encapsulees dans un tunnel SSL.

SIZELIMIT <integer> nombre maximal de reponses aux requetes autorise.(0 pour qu’il n’y ait pas de limite)

TIMELIMIT <integer> delai maximal de recherche.

BINDDN <dn> Contrairement a ce qu’on pourrait penser, cette directiven’est pas supportee par ldap.conf23 ! C’est la qu’on devrait preciserque ce sera le DN cn=nss,dc=grid5000,dc=net qui aura acces a la base(c’est l’utilisateur special cree au §4.3 a cet effet). De toute facon, ladirective BINDPW (qui precise le mot de passe de binddn) n’est supporteeni par ldap.conf, ni par .ldaprc.

TLS CACERT <filename> : specifie le fichier qui contient tous les certifi-cats des CA dans lesquel le client aura confiance. Dans notre cas, on aura :TLS_CACERT /etc/ldap/CA-cert.pem

N’oubliez pas de copier le certificat du CA et le placer dans/etc/ldap/CA-cert.pem

7.1.4 Verifier que ca marche

1. On verifie deja qu’un tunnel SSL peut effectivement etre mis en place avecle serveur :

openssl s_client -connect <your_serveur>:636 -showcerts \

-state -CAfile /etc/ldap/CA-cert.pem

(quitter avec un CTRL-C) Vous devez avoir a la fin un message du styleVerify return code: 0 (ok)

2. ’ldapsearch -x’ ne doit pas retourner d’erreur (mais ne doit pas renvoyerd’entrees compte tenu des ACLs)

3. ’ldapsearch -x -D "cn=nss,dc=grid5000,dc=net" -W’ doit vous ren-voyer toutes les entrees de la base

4. on verifie enfin que les communications sont bien chiffrees. Pour cela, onouvre deux consoles sur la machine cliente.

(a) test non chiffre : sur la premiere console :tcpdump -l -X port 389 | grep dc

Et sur la seconde : ldapsearch -x -H "ldap://<votre_serveur>".Si vous revenez sur la premiere console, vous verrez alors :

22pour eviter qu’un souci au niveau DNS empeche l’acces au serveur23elle peut seulement etre utilisee dans le fichier .ldaprc propre a chaque utilisateur

43

Page 44: Tutorial LDAP

tcpdump: listening on eth0

0x0030 [...] ....07...c2..dc=

0x0040 [...] grid5000,dc=net.

Il y a donc bien une partie en texte clair.

(b) test chiffre : tout est fait pour que, par defaut, les communicationsentre le client et le serveur soient chiffrees. On le verifie en lancantsur la premiere console :tcpdump -X port 636

et sur la seconde, ldapsearch -x.Cette fois ci, parmi toutes les informations renvoyees, on verifie qu’iln’y a plus de texte clair qui apparait.

On peut renouveler cette experience en utilisant une commande renvoyantplus de resultats, comme :ldapsearch -x -D "cn=nss,dc=grid5000,dc=net" -W

(on ajoute l’option -H "ldap://<votre_serveur>" pour passer en modenon chiffre).

Remarque : Il est peut-etre bon de rappeler egalement que pratiquement toutesles commandes LDAP beneficie de l’option -d <int> qui specifie le niveau desinformations des informations de debuggage (voir §6 page 23). Cela peut etreutile pour le debuggage.

7.2 Authentification des utilisateurs via LDAP

l’authentification systeme par LDAP permet d’unifier les bases de donnees utili-sateur. De plus le systeme de repartition et de replication procure une meilleuretolerance aux pannes. Enfin d’autres services peuvent tirer partie de cette basecommune d’authentification.

Sous Linux, l’authentification d’un utilisateur utilise deux composants :

1. le systeme PAM (Pluggable Authentication Module, voir §7.2.2) qui per-met l’integration transparente de diverses technologies d’authentificationcomme le standard UNIX (utilisant crypt), RSA, DCE, LDAP etc... surdes services du syteme comme login, passwd, rlogin, su, ftp, ssh etc. sansaucune modification sur ces services.

Si au depart PAM n’etait implemente que sous Solaris, c’est aujourd’huiun standard d’authentification sur de nombreuses distributions Linux(Redhat, Debian etc...) PAM fournit une API par laquelle les requetesd’authentitification sont mappees sur des actions specifiques aux techno-logies (et qui sont implementees dans des ”modules PAM”). Ce mappingest fait par les fichiers de configuration PAM dans lesquels on specifie pourchaque service les mecanismes d’authentification utilisables.

Dans notre cas, le module pam ldap, implemente dans la librairie partageepam_ldap.so, permet aux utilisateurs et aux groupes de s’authentifiera l’aide du service LDAP. Il suffira de le preciser dans les fichiers deconfiguration PAM.

44

Page 45: Tutorial LDAP

2. le systeme NSS (Name Service Switch, voir §7.2.1) : une fois l’utilisateurauthentifie, de nombreuses applications ont toujours besoin d’acceder auxinformations relatives a cet utilisateur. Cette information est tradition-nellement contenue dans des fichiers textes (/etc/passwd, /etc/shadow,/etc/group etc... Mais elle peuvent egalement etre fournies par un servicede nommage (comme NIS ou DNS).

Lorsqu’un nouveau nouveau service de nommage (comme LDAP) est in-troduit, il peut etre implemente soit dans une librairie C (comme c’est lecas pour NIS ou DNS) ou au sein de l’application qui utilisera ce servicede nommage. Mais cela peut etre eviter en utilisant une API communeet generale dediee au service de nommage qui realise une couche interme-diaire entre une application et un ensemble de services de nommage. C’estainsi que fut implemente le ”Name Service Switch” qui permet d’obtenirdes informations de nombreux services de nommage a travers une APIcommune. NSS utilise un fichier de configuration ’/etc/nsswith.confdans lequel sont precises les services de nommage a utiliser pour tel ou telinformation (comme la base passwd, shadow, group ou encore hosts...)

Ainsi, a partir de la librairie partage nss_ldap.so, il est possible de re-cuperer ces informations en utilisant LDAP.

On commencera par l’installation de nss ldap car c’est celle qui est la moinsdangeureuse des deux : de mauvaises manipulations avec PAM peuventcasser le systeme complet ! !

7.2.1 NSS (Name Service Switch) et LDAP

Cas Debian stable Comme d’habitude, on peut faire la manip pour per-mettre l’utilisation de SSL :

> cd; mkdir libnss-ldap_stable-source

> cd libnss-ldap_stable-source/

> apt-get source libnss-ldap

> cd libnss-ldap-186/

> vim debian/rules

--> remplacer --disable-ssl par --enable-ssl

> ./debian/rules binary --> j’ai eu un probleme

(puis normalement) > dpkg -i libnss-ldap_186-1_i386.deb

Mais je n’ai pas reussi a lancer la compilation (un probleme dans le script rulesapparemment24). Et surtout, on a deja force l’installation de ldap-utils en tes-ting, alors autant continuer, ca facilitera la mise a jour :apt-get install -t testing libnss-ldap

24make : dh_testdir : Command not found

Ce probleme se resoud en installant le package debhelper mais on a alors un autre erreur :configure : error : could not locate <ldap.h>. Je n’ai pas cherche plus loin (mais jesuppose qu’il faut installer libldap2-devel)...

45

Page 46: Tutorial LDAP

Autres cas Un simple apt-get install libnss-ldap suffira.Debconf va vous poser une serie de questions :

1. LDAP server host adress : mettez le nom du serveur LDAP (qui figuredans son certificat et dans /etc/hosts)

2. distinguished name of the search base : dc=grid5000,dc=net

3. LDAP version to use : 3

4. database requires login : yes

5. file permission : 0600

6. unprivileged database user : cn=nss,dc=grid5000,dc=net

7. password for database login account : entrer celui correspondant au DNcn=nss,dc=grid5000,dc=net.

Configuration de libnss-ldap Le fichier de configuration est /etc/libnss-ldap.conf.Faites en une sauvegarde :> cp /etc/libnss-ldap.conf /etc/libnss-ldap.conf.old

il convient d’y ajouter la ligne uri ldaps://<votre_serveur>. Pour les pluspresses, ce fichier est fourni en annexe C.1 page 58 (penser a y mettre le motde passe du DN cn=nss,dc=grid5000,dc=net et a y specifier votre serveur).Il est primordial que ce fichier de configuration beneficie de droitsd’acces 0600 ! ! ! (il contient le mot de passe en clair du DN special nss...)

Ensuite, on retouche au fichier de NSS /etc/nsswitch.conf. On commencepar une copie de sauvegarde :> cp /etc/nsswitch.conf /etc/nsswitch.conf.old

Et on transforme les lignes suivantes :

passwd: compat

group: compat

shadow: compat

hosts: files dns

en

## Define the order of lookups for users and groups.

passwd: files ldap

shadow: files ldap

group: files ldap

hosts: files ldap dns

Toujours pour les plus presses, le fichier /etc/nsswitch.conf est fourni enannexe C.2 page 58.

Pour verifier que ca marche...– lancer le serveur : /etc/init.d/slapd restart (sur votre serveur)– getent passwd sur le poste client devrait vous renvoye le contenu de /etc/

passwd completer avec les entrees du serveur LDAP (il faut peut-etre enleverl’entree ’+ : : : : : :’ de /etc/passwd etc... pour que ca marche correctement.)

46

Page 47: Tutorial LDAP

– de facon similaire, tester les appels getent group et getent shadow (even-tuellement) et getent hosts.

– Vous pouvez normalement vous logguer directement comme utilisateur nonlocal mais gere par les maps LDAP (bien que vous n’aurez pas de homemonte)

Optimisations de recherches possibles... Comme les users et les groupssont stockes dans des ’OU’ (OrganizationalUnit) differentes, on peut optimiserles recherches en ajoutant dans /etc/libnss-ldap.conf (c’est deja fait dansle fichier fourni) :

## Optimize the nss_ldap searches for these databases.

# Syntax:

# nss_base_XXX base?scope?filter

nss_base_passwd ou=people,dc=grid5000,dc=net?one

nss_base_shadow ou=people,dc=grid5000,dc=net?one

nss_base_group ou=group,dc=grid5000,dc=net?one

nss_base_hosts ou=hosts,dc=grid5000,dc=net?one

7.2.2 PAM (Pluggable Authentication Module) et LDAP

Il est peut-etre bon de le repeter : de mauvaises manipulations avec PAMpeuvent casser le systeme complet ! !Note sur les changements de mots de passe. On peut envisager deux mode defonctionnement pour les postes clients, chacun ayant un impact sur la securiteglobale du systeme different :

1. comportement similaire a une gestion locale, ou le root local de chaquemachine peut notamment changer les mots de passe. Pour cela, il faut quele fichier de configuration precise le DN ayant l’acces en ecriture sur labase LDAP (directive rootbinddn) et surtout son mot de passe (qui seraen pratique stocke dans le fichier /etc/ldap.secret). Malheureusement,ce mot de passe (comme celui figurant dans la directive bindpw) ne peut fi-gurer qu’en clair (et non sous forme hachee). Cela definit bien evidemmentun considerable probleme de securite puisque malgre un droit d’acces quidoit etre restreint a l’utilisateur root pour le fichier /etc/ldap.secret

(droit 0600), tout utilisateur ayant les droits root sur une machine cliente(ce que tout utilisateur peut faire tres facilement a partir de n’importequel CD bootable par exemple (cf par exemple la distribution Knoppix))aura acces au mot de passe root de la base LDAP, pourra modifier les en-trees etc... Cela est evidemment inacceptable dans le cadre d’un cluster,et notamment dans le cadre du projet Grid5000 ou il convient de limiterau maximum les droits des clients sur la base LDAP.

2. configuration sans reel root local : dans ce cas, tout utilisateur local (ycompris root) ne pourra changer d’entrees de la base LDAP (en particulierles mots de passe geres par LDAP). Ainsi, il n’y aura pas besoin de stockerle mot de passe du DN administrateur de la base LDAP. En contrepartie,tout changement de mot de passe devra se faire directement sur le serveur

47

Page 48: Tutorial LDAP

LDAP via l’administrateur (physique) de cette machine. C’est la solutionque nous avons retenus pour le projet Grid5000.

Installation Comme toujours, meme si vous etes en Debian stable, je vousconseille de forcer l’install en testing : apt-get install -t testing libpam-ldap.

Dans les autres cas, un simple apt-get install libpam-ldap suffira.

Debconf va vous poser une serie de questions :

1. Make local root Database admin : no (voir remarque plus haut)

2. Database requires logging in : yes

3. Unprivileged database user : cn=nss,dc=grid5000,dc=net

4. Password for the login account. : entrer celui correspondant au DN cn=

nss,dc=grid5000,dc=net.

5. Local crypt to use when changing passwords. :crypt

Configuration Le fichier de configuration est /etc/pam_ldap.conf. Il esttres similaire a /etc/libnss-ldap.conf (et utilise quasiment les meme direc-tives) Faites une copie de sauvegarde :cp /etc/pam_ldap.conf /etc/pam_ldap.conf.old

Ce fichier est egalement fourni en annexe D.1 page 59.

Maintenant que le module PAM LDAP est installe, il faut l’inclure dans lesprocessus PAM. Nous allons voir dans le paragraphe qui suit les modificationsa apporter pour permttre le login via ssh.

Remarque : La plupart des applications compatibles PAM sont geres via desfichiers de configuration qui leurs sont propres. Sous Debian, ces fichiers sontstockes dans /etc/pam.d/.

Configuration de /etc/pam.d/ssh Le fichier de configuration PAM pourssh est /etc/pam.d/ssh. Il est fourni en annexe D.2 page 59.

Par rapport au fichier original, les changements suivants ont ete opere :

– addition des lignes contenant pam_ldap.so– reordonnancement des lignes ”auth”(puisque des que pam ldap authentifie un

utilisateur, aucune autre ligne ”auth”ne sera utilise compte tenu de l’attribut”sufficient” (on ne peut pas utiliser l’attribut ”required” ici puisqu’on veututiliser le module pam unix en cas d’echec d’authentification par pam ldap, cequi peut se produire si le serveur LDAP est inaccessible). la section ”session”doit egalement etre reordonnee.

Il est important ensuite de relancer le serveur ssh ! ! ! !

Configuration de /etc/pam.d/su Un autre exemple est celui de la confi-guration de su. /etc/pam.d/su est lui aussi fourni en annexe D.3 page 60.

Autres configurations Il faut retoucher aux fichiers /etc/pam.d/common-*

48

Page 49: Tutorial LDAP

Note a propos de la distinction des fichiers de configuration On peutse demander pourquoi Debian a choisi de distinguer les fichiers de configura-tion ldap.conf, libnss-ldap.conf et pam_ldap.conf (ce n’est pas le cas ilsemblerait sous RedHat par exemple).La meilleure reponse que l’on puisse apporter est qu’on peut tres bien avoir plu-sieurs serveur LDAP ayant chacun un role precis (un serveur d’authentification,un annuaire utilisateur etc...). Separer les fichier assure la modularite dans leschoix de configuration.

7.3 Configuration automount : le fichier auto.master

On a vu au §6.3 comment exporter la map auto.home initialement geree parNIS. Maintenant, il faut preciser a l’automount des machines clientes que cettemap est maintenant geree par LDAP. Pour cela, on effectue les modificationssuivantes au fichier /etc/auto.master (on a commente l’ancienne ligne) :

> cat /etc/auto.master | grep home

#/home/nis auto.home

/home/nis ldap:ldap-idpot:nisMapName=auto_home,dc=grid5000,dc=net \

--timeout 60

7.4 Utilisation de NSCD

Pour eviter que chaque machine interroge le serveur LDAP chaque fois qu’unecommande ls -l est effectuee, il est preferable de configurer les stations detravail pour placer des informations utilisateur en cache.Tant que des donnees en cache sont ”fraıches”, la station de travail utilisera cecache au lieu d’interroger a nouveau le serveur LDAP. Cette tache est realiseeen pratique par le ”name server caching daemon” (nscd).Pour l’installation :apt-get install nscd

Le fichier de configuration pour nscd est/etc/nscd.conf :

enable-cache passwd yes

positive-time-to-live passwd 600

negative-time-to-live passwd 20

suggested-size passwd 211

check-files passwd yes

49

Page 50: Tutorial LDAP

8 Evolution au sein du projet Grid5000

8.1 Premiere experimentation : configuration locale

8.1.1 Contexte

Ce experience s’est deroulee au sein du cluster IDPOT de Grenoble.Dans cette premere experience, la racine choisie est dc=grid5000,dc=net. Lesdonnees sont organisees selon le schema expose dans la figure 6, correspondanta une configuration locale (voir §2.3.1).

ou=Hostsou=People ou=auto.home

dc=grid5000,dc=net

(/etc/passwd)ou=Group(/etc/group) (/etc/hosts) (/etc/auto.home)

Grenoble

ldap−idpot.clic.id

Fig. 6 – Architecture de la premiere experience Grid5000 sur Grenoble

8.1.2 Description

Sur le serveur LDAP (ldap-idpot.clic.id) les anciennes tables NIS com-pletant les utilisateurs (’/etc/passwd’), les groupes (’/etc/group’), le fichier’/etc/hosts’ ou gerant les tables automount (’auto.home’) ont ete exportees.Une machine cliente typique (’idpot8.clic.id’) a egalement ete configuree.Toutes ce qui y etait initialement gere par NIS l’est maintenant par le serveurLDAP. Cote utilisateur, tout est transparent : il se logue comme d’habitude surcette machine avec son login/passwd fournit lors de la creation de son comptesur le cluster et son home est monte automatiquement a sa connexion.Les communications LDAP entre la machine cliente idpot8 et le serveur LDAP,en particulier lors d’une ouverture de session par un utilisateur, sont securiseespar une connexion TLS/SSL (utilisant le port par defaut (636)).

8.1.3 Contribution des autres sites

(une fois le pb de /etc/ldap.secret regle)Les autres sites peuvent eventuellement configurer leurs machines clientes pourvenir utiliser les donnees du serveur LDAP ldap-idpot.clic.id afin de com-pleter leurs propres entrees NIS.Pour cela, il leur faut :

1. tester l’accessibilite au serveur ldap-idpot.clic.id (contacter Julien.

[email protected] en cas de probleme)

2. installer les packages client ldap et les configurer (voir §7)

3. sauvegarder le fichier /etc/nsswitch.conf (en \etc/nsswitch.conf.withoutDALP

par exemple)

4. lui apporter les modifications suivantes :

50

Page 51: Tutorial LDAP

passwd: compat

group: compat

shadow: compat

hosts: files dns

en

passwd: files nis ldap

shadow: files nis ldap

group: files nis ldap

hosts: files nis ldap dns

5. (eventuellement) gerer auto.home via LDAP : voir §??

6. Verifier que c’est bien pris en compte cote utilisateur : getent passwd

8.2 Seconde experimentation : utilisation des referrals

Dans cette experience, il s’agit d’experimenter une architecture totalement hie-rarchique (voir figure 7).

dc=grid5000,dc=org

root−ldap.grid5000.org

o=Grenobleo=Nice

(/etc/passwd)ou=Hosts(/etc/hosts)

ou=Group(/etc/group)

ou=People ou=auto.home(/etc/auto.home)

o=Grenoble,dc=grid5000,dc=net

ldap−grenoble.grid5000.org

Grenoble

(/etc/passwd)ou=Hosts(/etc/hosts)

ou=Group(/etc/group)

ou=People ou=auto.home(/etc/auto.home)

o=Nice,dc=grid5000,dc=net

Nice

ldap−nice.grid5000.org

Referral

Fig. 7 – Architecture envisagee de la Seconde experience Grid5000 - modele distribuetotalement hierarchique

Cette experience est en cours.Chaque site gere donc son propre domaine et est configure pour renvoyer unreferral vers un serveur racine s’il ne sait pas repondre.Plusieurs problemes a resoudre :

1. le client doit reemettre une requete apres reception d’un referral. Or poureviter tout goulet d’etranglement au niveau du serveur racine, les clientsd’un site A seront configurer pour interroger le serveur associe au site A.S’il reemet sa requete (par exemple pour trouver le password de l’utili-sateur svarrett), le serveur racine recherche dans tous ses fils ? Car on

51

Page 52: Tutorial LDAP

pourrait peut-etre envisager de l’empecher d’interroger le serveur du siteA puisque a priori, il n’a pas su repondre ?

2. Y a t il une configuration optimisee pour le client (cf directives nss_* deldap.conf?

3. comment s’effectue la recherche d’un mot de passe dans l’arbre dans laversion standard de nss ldap ? Je m’explique :Considerons un client sur le site A, gere par le serveur ldap-A. Si celle-cique ds le sous arbre specifier dans ldap.conf

4. Peut-etre doit on tester d’abord une architecture distribue mais platecomme celle exposee dans la figure 8 ?

(/etc/passwd)ou=Hosts(/etc/hosts)

ou=Group(/etc/group)

ou=People ou=auto.home(/etc/auto.home)

o=Nice o=Grenoble

dc=grid5000,dc=org

o=Nice o=Grenoble

dc=grid5000,dc=org

(/etc/passwd)ou=Hosts(/etc/hosts)

ou=Group(/etc/group)

ou=People ou=auto.home(/etc/auto.home)

Grenoble

ldap−grenoble.grid5000.org

Referral

Nice

ldap−nice.grid5000.org

Fig. 8 – Architecture envisagee de la Seconde experience Grid5000 - modele distribuemais plat

9 Quelques liens utiles

En plus de la bibliographie (detaillee a la fin de ce document), vous trouverezici une liste non exhaustive de liens fournissant de nombreuses informations encomplement a tout ce qui a ete expose dans ce document.

– Un livre qui m’a beaucoup aide : [1].– Le guide officiel pour l’installation d’un serveur OpenLDAP [2] : ”OpenLDAP

2.2 Administrator’s Guide”, http://www.openldap.org/doc/admin22/– un tres bon tutorial qui montre comment faire collaborer OpenLDAP, OpenSSL,

Kerberos et SASL, par Turbo Fredriksson.http://www.bayour.com/LDAPv3-HOWTO.html#4.3.2.Installing%20MIT%20Kerberos%

20V|outline

– Quelques notes sur l’installation de OpenLDAP :http://howto.aphroland.de/HOWTO/LDAP/FrontPage

52

Page 53: Tutorial LDAP

– Un excellent tutorial, intitule ”Using OpenLDAP on Debian Woody to serveLinux and Samba users”, par Markus Amersdorfer, tres complet et dedie al’installation sous Debian stable. http://aqua.subnet.at/~max/ldap/

– Un guide rapide mais exhaustif (initialement en japonais) sur LDAPv3 sousDebian : http://www.tom.sfc.keio.ac.jp/~torry/ldap/ldap_en.html

– Les notes d’installation et de configuration de LDAP a l’INT evry, par JehanProcaccia. http://www.int-evry.fr/mci/user/procacci/ldap/.

– un excellent tutorial (un peu ancien) sur les concepts lies a LDAP, par LaurentMirtain. http://www-sop.inria.fr/semir/personnel/Laurent.Mirtain/ldap-livre.html

– une page qui recense un certain nombre de liens vers LDAP (dans les dis-cussion qui suivent l’article, on trouvera encore plus de liens fournis par lesvisiteurs du site). http://linuxfr.org/2003/03/10/11659.html

– Notes sur la ”mise en place d’un agenda via LDAP et de l’authentificationLDAP pour votre Linux”. http://www.xenux.net/?article=22

– installation et configuration LDAP sous Mandrake, avce quelques notes :http://www.mandrakesecure.net/en/docs/ldap-auth.php

– le Howto officiel : [9]. http://www.tldp.org/HOWTO/LDAP-HOWTO/– un autre howto, un peu moins complet :http://sapiens.wustl.edu/~sysmain/info/openldap/

– un tutorial sur ”Openldap and Debian Stable”, pas tres complet mais interes-sant : http://wiki.osuosl.org/display/LNX/Openldap+and+Debian+Stable

– La distribution perl-ldap, fournissant un ensemble de modules Perl permet-tant d’interfacer un serveur LDAP. http://ldap.perl.org/. Voir aussi l’an-nexe G page 63.

53

Page 54: Tutorial LDAP

Annexes

54

Page 55: Tutorial LDAP

A Fichier de configuration slapd.conf

# This is the main sdapd configuration file. See slapd.conf(5) for more

# info on the configuration options.

#####################################

# Global Section

#####################################

# Schema and objectClass definitions

include /etc/ldap/schema/core.schema

include /etc/ldap/schema/cosine.schema

include /etc/ldap/schema/nis.schema

include /etc/ldap/schema/inetorgperson.schema

# automount.schema is not provided by default

# It is used to store autofs informations (package autofs-ldap).

#include /etc/ldap/schema/automount.schema

## Added logging parameters, read slapd.conf(5) for possible values

loglevel 296

## Added execution control

# force entries to match schemas for their objectClasses’s

schemacheck on

pidfile /var/run/slapd.pid

argsfile /var/run/slapd.args

# Where to store the replica logs

replogfile /var/lib/ldap/replog

## TLS options for slapd

TLSCipherSuite HIGH

TLSCACertificateFile /etc/ldap/certificate/CA-cert.pem

TLSCertificateFile /etc/ldap/certificate/LDAPserver-cert.pem

TLSCertificateKeyFile /etc/ldap/certificate/LDAPserver-key.pem

# Misc security settings

password-hash {SSHA}

#######################################################################

# ldbm database definitions

#######################################################################

# The backend type, ldbm, is the default standard

database ldbm

# The base of your directory

suffix "dc=grid5000,dc=net"

# Define a root DN for superuser privileges.

rootdn "cn=admin,dc=grid5000,dc=net"

# Define the password used with rootdn (use ’slappasswd’ to change).

# This is the base64-encoded SHA hash of "secret."

55

Page 56: Tutorial LDAP

rootpw {SSHA}fNYBYx93ZB2H7np+QEcRAaikffboQEQA

# Where the database file are physically stored

directory "/var/lib/ldap/grid5000.net"

# Files should be created rw for the owner **only**.

mode 0600

# Save the time that the entry gets modified

lastmod on

# Indexing options

index objectClass eq

index cn pres,eq

# db tuning parameters; cache 2,000 entries in memory

cachesize 2000

################## Acces Control Lists ACLs ################

# The userPassword by default can be changed

# by the entry owning it if they are authenticated.

# Others should not be able to see it, except the

# admin entry and the special user ’nss’

access to attribute=userPassword

by dn="cn=admin,dc=grid5000,dc=net" write

by dn="cn=nss,dc=grid5000,dc=net" read

by self write

by anonymous auth

by * none

# The admin dn has full write access whereas the special

# user ’nss’ can read everything. Others should authenticate.

access to *

by dn="cn=admin,dc=grid5000,dc=net" write

by dn="cn=nss,dc=grid5000,dc=net" read

by * auth

56

Page 57: Tutorial LDAP

B Fichier de configuration ldap.conf

#

# LDAP Client configuration file

#

# See ldap.conf(5) for details

# This file should be world readable but not world writable.

BASE dc=grid5000,dc=net

URI ldaps://ldap-idpot.clic.id

#SIZELIMIT 12

#TIMELIMIT 15

#DEREF never

# Gestion TLS/SSL

# Emplacement du certicat du CA (recopie depuis le serveur)

TLS_CACERT /etc/ldap/CA-cert.pem

TLS_REQCERT demand

57

Page 58: Tutorial LDAP

C Fichiers de configuration NSS

C.1 le fichier /etc/libnss-ldap.conf

N’oubliez pas de mettre les droits 0600 a ce fichier !

##########################################################

# /etc/libnss-ldap.conf ##################################

#

# Configuration file for libnss-ldap

host <votre_serveur>

# use TLS for connexion

uri ldaps://<votre_serveur>/

# The distinguished name of the search base.

base dc=grid5000,dc=net

ldap_version 3

# The distinguished name to bind to the server with.

binddn cn=nss,dc=grid5000,dc=net

bindpw the_one_you_set_in_the_ldif-file__as-plaintext(!)

######### Optimisations ######

# RFC2307bis naming contexts

# Syntax:

# nss_base_XXX base?scope?filter

nss_base_passwd ou=people,dc=grid5000,dc=net?one

nss_base_shadow ou=people,dc=grid5000,dc=net?one

nss_base_group ou=group,dc=grid5000,dc=net?one

nss_base_hosts ou=hosts,dc=grid5000,dc=net?one

C.2 le fichier /etc/nsswitch.conf

########################################################

# /etc/nsswitch.conf ###################################

#

# Configuration of GNU Name Service Switch functionality

# with LDAP capabilities.

passwd: files ldap

group: files ldap

shadow: files ldap

hosts: files ldap dns

networks: files

protocols: db files

services: db filesethers: db files

rpc: db files

# not used

netgroup: nis

58

Page 59: Tutorial LDAP

D Fichiers de configuration PAM

D.1 le fichier /etc/pam ldap.conf

##########################################################

# /etc/pam_ldap.conf ##################################

#

# Configuration file for libnss-ldap

host <votre_serveur>

# use TLS for connexion

uri ldaps://<votre_serveur>/

# The distinguished name of the search base.

base dc=grid5000,dc=net

ldap_version 3

# The distinguished name to bind to the server with.

binddn cn=nss,dc=grid5000,dc=net

bindpw the_one_you_set_in_the_ldif-file__as-plaintext(!)

pam_password crypt

D.2 Le fichier /etc/pam.d/ssh

#/etc/pam.d/ssh

#%PAM-1.0

auth sufficient pam_ldap.so

auth required pam_nologin.so

auth required pam_unix.so

auth required pam_env.so # [1]

account sufficient pam_ldap.so

account required pam_unix.so

session sufficient pam_ldap.so

session required pam_unix.so

session optional pam_lastlog.so # [1]

session optional pam_motd.so # [1]

session optional pam_mail.so standard noenv # [1]

session required pam_limits.so

password sufficient pam_ldap.so

password required pam_unix.so

# Alternate strength checking for password. Note that this

# requires the libpam-cracklib package to be installed.

# You will need to comment out the password line above and

# uncomment the next two in order to use this.

59

Page 60: Tutorial LDAP

#

# password required pam_cracklib.so retry=3 minlen=6 difok=3

# password required pam_unix.so use_authtok nullok md5

D.3 Le fichier /etc/pam.d/su

A TESTER

60

Page 61: Tutorial LDAP

E le fichier automount.schema

A placer dans le repertoire /etc/ldap/schema :

# File : automount.schema

#

# Should be included in autofs-ldap package

# Yet, it was not the case for me

# Got it from

# https://init.linpro.no/pipermail/skolelinux.no/commits/2003-May/013856.html

# Depends upon core.schema and cosine.schema

# OID Base is 1.3.6.1.4.1.2312.4

#

# Attribute types are under 1.3.6.1.4.1.2312.4.1

# Object classes are under 1.3.6.1.4.1.2312.4.2

# Syntaxes are under 1.3.6.1.4.1.2312.4.3

# Attribute Type Definitions

attributetype ( 1.3.6.1.1.1.1.25 NAME ’automountInformation’

DESC ’Information used by the autofs automounter’

EQUALITY caseExactIA5Match

SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )

objectclass ( 1.3.6.1.1.1.1.9 NAME ’automount’ SUP top STRUCTURAL

DESC ’An entry in an automounter map’

MUST ( cn $ automountInformation $ objectclass )

MAY ( description ) )

objectclass ( 1.3.6.1.4.1.2312.4.2.2 NAME ’automountMap’ SUP top STRUCTURAL

DESC ’An group of related automount objects’

MUST ( ou ) )

61

Page 62: Tutorial LDAP

F Quelques astuces et messages d’erreurs rencontres

Il s’agit de repertorier ici la liste des erreurs que j’ai pu rencontre, ma principalesource de comprehension des erreurs etanthttp://www.openldap.org/faq/data/cache/53.html

1. Si vos requetes n’aboutissent jamais, sachez que slapd utilise tcp wrappers,et la configuration par defaut est de rejeter toutes les connections venantde localhost. Il faut donc modifier /etc/hosts.allow pour permettre l’ac-ces a slapd depuis localhost an ajoutant la ligne :slapd : 127.0.0.1

2. Si a l’ajout, vous otenez un message d’erreur de la forme :adding new entry "ou=auto.home,dc=grid5000,dc=fr"

ldap_add: No such object

C’est que la structure arboresscente dans laquelle vous inserer n’existe pas(ici : ”dc=grid5000,dc=fr”alors que celle definie dans /etc/ldap/slapd.confest ”dc=grid5000,dc=net”)

A propos de certains messages d’erreur qui peuvent apparaitre dans les logs dudemon slapd :

1. Jun 11 15:04:30 ldap-idpot slapd[28682]: daemon: socket() failed

errno=97 (Address family not supported by protocol)

→ http://www.openldap.org/faq/data/cache/652.html : ”This mes-sage indicates that the operating system does not support one of the (proto-col) address families which slapd(8) was configured to support. Most com-monly, this occurs when slapd(8) was configured to support IPv6 yet theoperating system kernel wasn’t. In such cases, the message can be ignored.”

2. Jun 11 15:04:30 ldap-idpot slapd[28682]: /etc/ldap/slapd.conf:

line 36: unknown directive "TLSCipherSuite" outside backend info

and database definitions (ignored)

Jun 11 15:04:30 ldap-idpot slapd[28682]: /etc/ldap/slapd.conf:

line 37: unknown directive "TLSCertificateFile" outside backend info

and database definitions (ignored)

Jun 11 15:04:30 ldap-idpot slapd[28682]: /etc/ldap/slapd.conf:

line 38: unknown directive "TLSCertificateKeyFile" outside backend

info and database definitions (ignored)

Jun 11 15:04:30 ldap-idpot slapd[28682]: /etc/ldap/slapd.conf:

line 39: unknown directive "TLSCACertificateFile" outside backend

info and database definitions (ignored)

→ OpenLDAP n’a pas ete configure (ou compile) pour supporter TLSC’est le cas par exemple de la version stable du package slapd qui avaitete initialement installe, et correspondant a la version 2.0.23.

On precise au §3.2.1 page 20 comment configurer le package pour utiliserSSL.

3. TLS: could not use key file ‘/etc/ldap/certificate/server-key.pem’

Le chemin d’acces au fichier incrimine (ou le fichier lui-meme) est in-correct ! Le verifier et apporter les modifications correspondantes dans/etc/ldap/slapd.conf

62

Page 63: Tutorial LDAP

G Programmation Perl avec LDAP

Perl possede un ensemble de modules qui fournissent une interface orientee objetaux serveurs LDAP. Le developpement le plus actif dans le domaine corresponda la distribution perl-ldap disponible sur l’url http://ldap.perl.org/. Cettedistribution fournit notamment le module Net::LDAP. Le chapitre 10 de [1] estconsacre a l’utilisation de ce module.Sous Debian, il vous suffit d’installer le package libnet-ldap-perl :apt-get install libnet-ldap-perl

D’autres module perl peuvent etre utile :

1. celui qui fournit une solution Perl de crypt() base sur MD525. Il s’agit plusspecifiquement du module Crypt::PasswdMD5. Pour installer ce modulesous Debian : apt-get install libcrypt-passwdmd5-perl

Pour disposer d’une version entierement Perl du crypt() UNIX, il suffitd’installer le module Crypt::UnixCrypt :apt-get install libcrypt-unixcrypt-perl

2. Le module Term::ReadPassword permet de recuperer un mot de passeentre par l’utilisateur : apt-get install libterm-readpassword-perl

25Cette version de crypt() est utilisee dans les mots de passe

63

Page 64: Tutorial LDAP

Historique de ce document

8 septembre 2004 Ajout de la partie sur perl-ldap27 aout 2004 Version 0.29 aout 2004 Test du tutorial sur une install from scratch, etoffement de la biblio,

refonte de certaines parties.6 juillet 2004 Premiere version (0.1)7 juin 2004 debut de la realisation

Liste des tableaux

1 Principales abreviations utilisees dans le champ DN . . . . . . . . . . 11

2 possibilite pour la directive <qui> dans les ACLs . . . . . . . . . . . 15

3 possibilite pour la directive <type d’acces autorise> dans les ACLs . . 15

4 Formats de bases de donnees pour la base LDAP (source :[9]) . . . . . . 19

5 Liste des principaux schemas disponibles . . . . . . . . . . . . . . . . 23

6 Liste des niveaux de log (source :[2]) . . . . . . . . . . . . . . . . . . . 23

7 Principales options disponibles pour slapd . . . . . . . . . . . . . . . 31

8 Principales commandes online/offline . . . . . . . . . . . . . . . . . . 31

9 Principales options communes a ldapsearch, ldapadd, ldapdelete, ldap-

modify et ldapmodrdn . . . . . . . . . . . . . . . . . . . . . . . . . 32

10 Principales options specifiques de ldapsearch . . . . . . . . . . . . . . 33

11 Valeurs possibles pour le mot cle ’changetype’ . . . . . . . . . . . . . 35

References

[1] Gerald Carter. LDAP System Administration. O’Reilly, March 2003.

[2] OpenLDAP community. OpenLDAP 2.2 Administrator’s Guide, Feb 2004.http://www.openldap.org/doc/admin22/

[3] G. Good. RFC 2849 - The LDAP Data Interchange Format (LDIF) -Technical Specification. Technical report, Internet Engineering Task Force,June 2000. http://www.ietf.org/rfc/rfc2249.txt

[4] L. Howard. RFC 2307 - An Approach for Using LDAP as a NetworkInformation Service. Technical report, Internet Engineering Task Force,March 1998. http://www.ietf.org/rfc/rfc2307.txt

[5] T. Howes. RFC 1558 - A String Representation of LDAP Search Fil-ters. Technical report, Internet Engineering Task Force, December 1993.http://www.ietf.org/rfc/rfc1558.txt

[6] J. Kohl and C. Neuman. RFC 1510 : The Kerberos Network AuthenticationService (Version 5). Technical report, Massachusetts Institute of Techno-logy, September 1993. ftp://ftp.isi.edu/in-notes/rfc1510.txt

[7] T. Kukuk. The Linux NIS(YP)/NYS/NIS+ HOWTO. Technical report,The Linux Documentation Project, July 2003. http://www.tldp.org/

HOWTO/NIS-HOWTO/.

64

Page 65: Tutorial LDAP

[8] J. Linn. RFC 2078 - Generic Security Service Application Program Inter-face, Version 2. Technical report, Internet Engineering Task Force, January1997. http://www.ietf.org/rfc/rfc2078.txt

[9] Luiz Ernesto Pinheiro Malere. LDAP Linux HOWTO. Techni-cal report, The Linux Documentation Project, March 2004. http://

linux-universe.com/HOWTO/LDAP-HOWTO/.

[10] Myers. RFC 2222 - Simple Authentication and Security Layer(SASL). Technical report, Internet Engineering Task Force, October 1997.http://www.ietf.org/rfc/rfc2222.txt

[11] C. Neuman and T. Ts’o. Kerberos : An authentication service for computernetworks. IEEE Communications Magazine, 32(9) :33–38, September 1994.http://gost.isi.edu/publications/kerberos-neuman-tso.html

[12] V. Ryan and R. Lee. RFC 2713 - Schema for Representing Java(tm) Ob-jects in an LDAP Directory. Technical report, Internet Engineering TaskForce, October 1999. http://www.ietf.org/rfc/rfc2713.txt

[13] M Smith. RFC 2798 - Definition of the inetOrgPerson LDAP ObjectClass. Technical report, Internet Engineering Task Force, April 2000.http://www.ietf.org/rfc/rfc2798.txt

[14] R. Sundaram. Automount mini-Howto. Technical report, The Linux Docu-mentation Project, December 2002. http://tldp.org/HOWTO/Automount.html.

[15] M. Wahl. RFC 2256 - A Summary of the X.500(96) User Schema foruse with LDAPv3. Technical report, Internet Engineering Task Force,December 1997. http://www.ietf.org/rfc/rfc2256.txt

[16] M. Wahl, T. Howes, and S. Kille. RFC 2251 - Lightweight Directory AccessProtocol (v3). Technical report, Internet Engineering Task Force, Decem-ber 1997. http://www.ietf.org/rfc/rfc2251.txt

[17] T. Wu. The secure remote password protocol. Nov 1997.

65