• Aucun résultat trouvé

Tutorial OpenLDAP. Installation et configuration (clients/serveurs) Migration NIS LDAP dans GRID5000 Sécurisation par SSL et optimisations

N/A
N/A
Protected

Academic year: 2022

Partager "Tutorial OpenLDAP. Installation et configuration (clients/serveurs) Migration NIS LDAP dans GRID5000 Sécurisation par SSL et optimisations"

Copied!
65
0
0

Texte intégral

(1)

Tutorial OpenLDAP

Installation et configuration (clients/serveurs) Migration NIS → LDAP dans GRID5000 S´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.

(2)

Table des mati` eres

1 Pour les plus press´es : Ultra Quick Guide 5

1.1 Pr´erequis . . . 5

1.2 Cot´e serveur... . . 5

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

1.4 Cot´e 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 r´epliqu´e . . . 10

2.3.4 Annuaire distribu´e . . . 10

2.4 Le mod`ele de donn´ees LDAP . . . 10

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

2.4.2 Les sch´emas . . . 11

2.4.3 LDIF . . . 12

2.5 La s´ecurit´e dans LDAP . . . 13

2.5.1 Authentification . . . 13

2.5.2 Contrˆole d’acc`es . . . 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 Pr´e-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 sch´emas . . . 22

4.1.2 Logging, configuration d’execution . . . 23

4.1.3 Options SASL . . . 24

(3)

4.1.4 Options SSL/TLS . . . 24

4.1.5 Autres options de s´ecurit´e . . . 25

4.2 Configuration des Bases de Donn´ees . . . 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 donn´ees . . . 27

4.4 Modification du script de d´emarrage /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 V´erifier 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 entr´ees dans la base LDAP . . . 32

5.4 Recherches dans la base LDAP . . . 33

5.5 Modifier/Supprimer des entr´ees 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 Recup´eration 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 V´erifier 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

(4)

8 Evolution au sein du projet Grid5000 50

8.1 Premi`ere experimentation : configuration locale . . . 50

8.1.1 Contexte . . . 50

8.1.2 Description . . . 50

8.1.3 Contribution des autres sites . . . 50

8.2 Seconde exp´erimentation : 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 58 C.1 le fichier /etc/libnss-ldap.conf . . . 58

C.2 le fichier /etc/nsswitch.conf . . . 58

D Fichiers de configuration PAM 59 D.1 le fichier /etc/pam ldap.conf . . . 59

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

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

E le fichier automount.schema 61

F Quelques astuces et messages d’erreurs rencontr´es 62

G Programmation Perl avec LDAP 63

(5)

1 Pour les plus press´ es : Ultra Quick Guide

1.1 Pr´erequis

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 Cot´e 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) R´ecup´erer le fichier slapd.conf fourni en annexe A page 55 et le placer

dans /etc/ldap/slapd.conf

(c) configurer syslog pour g´erer les logs du serveur : ajouter la ligne suivante dans/etc/syslog.conf:

local4.debug /var/log/slapd.log

et relancer le service (’/etc/init.d/sysklogd restart’) Le fichier /etc/log/slapd.logsera une aide pr´ecieuse pour le d´ebuggage.

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

(e) Modification du script de d´emarrage /etc/init.d/slapd : suivre les instructions du§4.4 page 28.

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

3. V´erifier 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.

(6)

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 une map automount est initialement g´er´ee par NIS (/etc/auto.home dans notre cas) et que cette gestion doit passer par LDAP, suiver les instructions suivantes :

(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) D´ecommenter dans le fichier de configuration slapd.confla ligne : include /etc/ldap/schema/automount.schema

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

1.4 Cot´e client...

1.4.1 Initialisation et configuration de base du client 1. Installation

(a) Cas Debian stable : compte tenu des remarques relatives `a la gestion SSL pour le package client stable (voir §7.1 page 42), il convient de forcerl’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. Recup´erer le fichier fourni en annexe B page 57 et le placer dans /etc/

ldap/ldap.conf

4. copier le certificat du CA (qui a sign´e le certificat du serveur) et le placer dans/etc/ldap/CA-cert.pem

5. V´erifier 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 testing si vous ˆetes sur une Debian stable)

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

(c) Recup´erer 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) Recup´erer le fichier fourni en annexe C.2 page 58 et le placer dans /etc/nsswitch.conf

(7)

(f) Pour v´erifier que ¸ca marche... : suivre les instructions du paragraphe associ´e au §7.2.1 page 46.

2. PAM (Pluggable Authentication Module) et LDAP : Mˆeme si cette section est d´edi´e aux utilisateurs press´es, il est bon, compte tenu l’importance de PAM dans un syst`eme Linux, de lire compl`etement le §7.2.2 page 47 et d’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 pr´ec´edentes sont valid´ees, 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.confpour qu’il contienne les entr´ees suivantes : passwd: files nis ldap

shadow: files nis ldap group: files nis ldap hosts: files nis ldap dns

Pour v´erifier que ¸ca a bien ´et´e pris en compte utiliser la commande getent fichier’ o`u fichier peut-ˆetre *passwd, group ou hosts. Vous pourrez constater que le entr´ees de ces fichiers sont r´ecup´erer dans l’ordre suivant :

fichier local −→ map NIS−→ map LDAP

(8)

2 Introduction

2.1 Notion d’annuaire electronique

Un annuaire ´electronique est une base de donn´ees sp´ecialis´ee qui permet de partager des bases d’informations sur un r´eseau. Ces bases peuvent contenir toute sorte d’informations, comme des coordonn´ees t´el´ephoniques ou des don- n´ees syst`emes.

Dans le cadre d’un cluster de machine, un service d’annuaire permettra par exemple de diffuser des donn´ees syst`emes, comme celles contenues dans les prin- cipaux fichiers de configuration syst`emes (/etc/passwd,/etc/shadow,/etc/

group, /etc/hosts ou encore /etc/auto.home etc...) Classiquement, ce ser- vice est rendu par le service NIS1 d´evelopp´e par SUN. C’est un protocole client/serveur qui permet de diffuser des donn´ees de configuration (utilisateurs, mots de passe, hote etc...) entre les ordinateurs sur un r´eseau.

LDAP signifie Lightweight Directory Access Protocol, un protocole d’annuaire sur TCP/IP utilisant les mˆemes concepts que DNS2, le service de nommage utilis´e sur l’Internet pour faire correspondre un nom explicite (commewww-id.

imag.fr) `a une adresse IP (129.88.69.11). Le spectre des informations qui peuvent ainsi ˆetre diffus´ees est tr`es large : cela va des coordonn´ees adminis- tratives aux donn´ees du compte utilisateur (login, passwd), en passant par les donn´ees syst`emes de routage, de montage de partitions automatiques etc...

Comme on l’a dit, un annuaire ´el´ectronique fonctionne de fa¸con similaire `a une base de donn´ees mˆeme si quelques diff´erences subsistent :

– il est optimis´e pour la lecture ; l’ajout et la modification de donn´ees peuvent ˆetre coˆuteuses ;

– il fournit des fonctions de recherches plus avanc´ees ;

– les donn´ees sont stock´ees sur un mod`ele distribu´e et des techniques de repli- cations sont possibles, ce qui facilite un passage `a l’´echelle efficace.

– la structure des donn´ees stock´ees, appel´eesch´ema, peut ˆetre ´etendue en fonc- tion de besoins locaux ;

– il est bas´e sur des standards ´etablis qui assurent l’interop´erabilit´e entre plu- sieurs impl´ementations sur plusieurs supports (notamment OS). Ce document s’int´eressera `a l’implementation open source de LDAP d´evelopp´ee `a l’univer- sit´e du Michigan, OpenLDAP3 version 2.x sous Linux.

LDAP apporte ´egalement de nombreuses garanties en terme de s´ecurit´e, puisque des m´ecanismes de chiffrement (SSL ou TLS) et d’authentification (SASL4), coupl´es `a des m´ecanismes de r`egles d’acc`es (ACL) permettent de prot´eger les transactions et l’acc`es aux donn´ees.

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

1Network Information System, ou Yellow Pages yp

2Domain Name System

3http ://www.openldap.org

4Simple Authentication and Security Layer

(9)

Nous nous interessons ici `a la version 3 de LDAP, r´ef´erenc´ee sous le nom LDAPv3 [16].

2.2 Mais qu’apporte LDAP ?

Cot´e utilisateur, LDAP fournit les services suivants :

– un protocole d’acc`es `a l’information contenue dans l’annuaire ;

– unmod`ele d’information d´efinissant le type de donn´ees contenues dans l’an- nuaire ;

– un mod`ele de nommage d´efinissant comment l’information est organis´ee et r´ef´erenc´ee ;

– unmod`ele fonctionnel qui d´efinit comment on acc`ede `a l’information ; – unmod`ele de s´ecurit´e qui d´efinit comment les donn´ees et les acc`es sont pro-

t´eg´es,

– unmod`ele de duplication qui d´efinit comment la base est r´epartie entre ser- veurs,

– des APIs pour d´evelopper des applications clientes, – LDIF, un format d’´echange de donn´ees.

2.3 LDAP, comment ca marche ?

Le service d’annuaire LDAP est bas´e sur un mod`ele client/serveur. Un ou plu- sieurs serveurs LDAP contiennent les donn´ees. Un client LDAP se connecte `a un serveur et lui pose sa question. Il recoit en retour une r´eponse ou un pointeur (on parle dereferral) sur l’endroit (typiquement un autre serveur) ou le client pourra trouver plus d’informations. Quelque soit le serveur auquel le client se connectera, il aura la mˆeme vue de l’annuaire :un nom r´eferera `a une mˆeme entr´ee quelque soit le serveur acc´ed´e, comme pour DNS.

Il existe plusieurs configurations possibles qui sont d´etaill´ees dans la suite.

2.3.1 Serveur local

Dans ce cadre, il n’y a pas d’interactions entre le serveurslapd du domaine et un quelconque autre serveur. Ce mode de fonctionnement est illustr´e dans la figure 1

Client Serveur

2. Réponse 1. Requete

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

Cette configuration est particuli`erement adapt´e au cas d’un intranet local.

2.3.2 Annuaire local avec referrals

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

(10)

sup´erieur capable de r´epondre aux requˆetes en dehors du domaine local. Il est `a noter que par d´efaut et pour ´eviter de surcharger le serveur, le client `a a charge de relancer la requete vers le serveur point´e (figure 2).

Client Serveur

Supérieur Serveur

2. Referral 1. Requete 3. Nouvelle requete

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

Ce mode de fonctionnement est particuli`erement adapt´e au cas des grilles de grappes, donc au cadre du projet Grid5000.

2.3.3 Annuaire r´epliqu´e

Dans ce cadre, le d´emonslurpd est charg´e de propager les changements effectu´es d’un serveurslapd maˆıtre vers un ou plusieurs serveursslapd esclave (figure 3).

Fig. 3 –Configuration par r´eplication(source :[2])

On permet ainsi de garantir une certaine qualit´e de service. L’utilisation de slurpd vient avantageusement compl´ementer le mode de configuration pr´ec´edent dans le cadre d’une grille.

2.3.4 Annuaire distribu´e

Dans cette configuration, le service local est partitionn´e en plusieurs sous- services, qui peuvent ´eventuellement ˆetre r´epliqu´es, et qui sont rassembl´es par un ensemble de referrals vers des serveurs sup´erieurs ou inf´erieurs.

2.4 Le mod`ele de donn´ees LDAP

LDAP utilise une approche orient´ee objet dans sa repr´esentation des donn´ees, ce qui inclue notamment la d´efinition d’objets (par un ensemble de r`egles et d’attributs) et la notion d’h´eritage entre objets.

(11)

2.4.1 Le Directory Information Tree (DIT)

Les donn´ees LDAP sont structur´ees dans une arborescence hi´erarchique com- parable `a celle des syst`emes de fichiers UNIX.

Chaque noeud de l’arbre correspond `a une entr´ee5 de l’annuaire. Au sommet de cet arbre (appel´e Directory Information Tree-DIT) se trouve la racine ou suffixe.

A noter que chaque serveur poss`ede une entr´ee sp´eciale, appel´ee root directory specific entry (rootDSE) qui contient la description de l’arbre et de son contenu.

Les entr´ees correspondent `a des objets abstraits ou issus du monde r´eel (une personne, une ressource de la grille ou des param`etres de configuration). Elles contiennent un certain nombre de champs appel´es attributs qui caract´erisent chaque entr´ee.

Chaque entr´ee est r´ef´erenc´ee de mani`ere unique dans le DIT par sondistingui- shed name (DN). Cette unicit´e est obtenue par la combinaison des attributs list´es dans le tableau 1.

DN distinguished name CN common name DC domain components SN surname OU organizational unit UID user ID O organization

Tab.1 – Principales abr´eviations utilis´ees dans le champ DN

Le DN repr´esente le nom de l’entr´ee sous la forme du chemin d’acc`es `a celle- ci depuis le sommet de l’arbre. On peut comparer le DN au path d’un fichier Unix. Bien entendu, comme pour le syst`eme de fichier Unix, on peut utiliser un relative distinguished names (RDNs) pour d´esigner une entr´ee depuis une position particuli`ere de l’arbre.

Ces notions sont illustr´ees dans la figure 4.

Pour faire le parall`ele avec la terminologie des bases de donn´ees relationnelles, les entr´ees correspondent `a un enregistrement dans une table tandis que les attributs seraient l’´equivalent d’un champ d’une table.

2.4.2 Les sch´emas

Un sch´ema LDAP d´efinit la liste des entr´ees possibles, appel´ees alors object classes. Celles-ci sont organis´ees hi´erarchiquement, en partant de la classetop

`

a la racine du DIT.

Pour chacune d’entres elles, on trouve la liste des attributs associ´es, d´eclin´es par leurs types et leurs syntaxes. Ces attributs peuvent ˆetre requis (ex :le nom d’une personne) ou optionnels (comme un num´ero de FAX). On y ajoute ´egalement les op´erations et les flitres de comparaison autoris´es.

A noter que chaque classe d’objets h´erite des attributs de ses pr´ed´ecesseurs.dans la hi´erarchie. Les objet classes et leurs attributs sont normalis´es dans [15] afin d’assurer l’interop´erabilit´e entre les logiciels. Il sont r´ef´erenc´es par un object

5’entry’ o`u ’directory service entry’ (DSE) dans la litt´erature anglaise.

(12)

cn: g5k

objectClass: top userPassword: {crypt}x gidNumber: 24560 memberUid: svarrett memberUid: georget objectClass: posixGroup uid=svarrett uid=georget

ou=People ou=Group

cn=equipar cn=g5k

entry DIT

Liste d’attributs associés à une entry; 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 attribu´e par l’Internet Assigned Numbers Authority (IANA).

2.4.3 LDIF

LDAP Data Interchange Format (LDIF), d´efinit dans [3], est un format texte6 standard qui permet de repr´esenter les donn´ees LDAP. Il a pour vocation de donner une meilleur lisibilit´e des donn´ees. Il est utilis´e pour importer,exporter ou modifier les donn´ees de la base et doit ob´eir aux r`egles d´efinies dans le sch´ema de l’annuaire (voir §2.4.2)

Un fichier LDAP est constitu´e d’une suite d’entr´ees s´epar´ees par un saut de ligne. Le format est le suivant :

<attribut>:<valeur>

ou le premier attribut d’une entr´ee est le DN.

Un entr´ee 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 pr´ecis´e dans la figure 4, le format LDIF pour l’entr´ee de RDN cn=g5ksera :

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

6Le format utilis´e est l’ASCII, les donn´ees binaires ´etant cod´ees en base 64.

(13)

objectClass: top cn: g5k

userPassword: {crypt}x gidNumber: 24560

memberUid: svarrett memberUid: georget

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

du fichier/etc/group.

2.5 La s´ecurit´e dans LDAP

Le succ`es de LDAP (et son int´erˆet dans le cadre de Grid5000) vient de sa capacit´e `a adresser les probl`emes de s´ecurit´e suivants :

– les acc`es non autoris´es (authentification) – les droits d’acc`es aux donn´ees (autorisation)

– la confidentialit´e et l’int´egrit´e des communications avec le serveur.

Le gros du travail est de d´eterminer les r`egles d’acc`es aux donn´ees. 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 d´eterminer pour chaque attribut quel est son niveau de confidentialit´e (un mot de passe est plus sensible qu’une adresse mail) et quel utilisateur ou quelle application pourra y acc´eder en lecture (tout le monde, certains utilisateurs, uniquement les administrateurs...) ou en

´ecriture (utilisateur, manager, administrateur).

2.5.1 Authentification

Pour pouvoir acc´eder `a l’annuaire LDAP, le client LDAP doit d’abord s’au- thentifier, c’est `a dire sp´ecifier qui va acc´eder aux donn´ees. Si l’authentification r´eussi, alors le client peut envoyer une requete au serveur qui v´erifiera si le client est autoris´e ou non a effectuer la requ`ete. On parle de contrˆole d’acc`es (voir§2.5.2).

Dans LDAP, l’authentification est fournie par une op´eration ”bind”.

LDAPv3 propose plusieurs m´ecanismes d’authentification :

1. Anonymous Authentication : il s’agit d’une connexion pr´esentant un champ DN vide et aucun mot de passe (la requ`ete est directement envoy´ee). Cela permet de consulter facilement les donn´ees accessible en lecture pour tous.

2. Simple Authentication : c’est la m´ethode classique o`u le DN de l’utilisateur est transmis avec le mot de passe en clair, ce qui doit ˆetre ´evit´e bien entendu dans le cadre d’une grille.

3. Simple Authentication Over SSL/TLS : la session entre le serveur et le client est chiffr´ee par le protocole SSL, qui garantit entre autre la confiden- tialit´e et l’int´egrit´e des communications. Ainsi, le mot de passe ne transite plus en clair sur le r´eseau.

Dans ce cadre, l’authentification d’un utilisateur est soit effectu´ee via son mot de passe mais on peut imaginer un mode (non encore test´e) ou cette

(14)

authentification se fait sur simple pr´esentation d’un certificat contenant la cl´e publique de l’utilisateur, la cl´e priv´ee associ´ee ´etant stock´ee sur un support sˆur et personnel (carte `a puce, cl´e USB etc...). Cette derni`ere approche sera ´etudi´ee dans le cadre de Grid5000.

4. Simple Authentication and Security Layer (SASL): d´efini dans [10], est un mode de s´ecurit´e extensible proposant des m´ecanismes d’authentification plus ´elabor´es pour tout protocole orient´e connexion tel que IMAP ou LDAP. Le m´ecanisme d’authentification est n´egocier entre le client et le serveur. En voivi les principaux :

PLAIN ou LOGIN ces m´ecanismes ne pr´esentent pas plus d’avantage que l’authentification simple de LDAP, et peuvent donc ˆetre oubli´es DIGEST-MD5 Bien que moins puissant que les approches `a tierce par- tie de confiance comme Kerberos ou PKI, ce m´ecanisme DOIT ˆetre impl´ement´e si l’emploi de de SSL n’est pas envisag´e. Il pr´esente l’avantage d’ˆetre relativement simple `a mettre en place et se base sur un protocole de challenge/r´eponse qui offre une protection signi- ficative contre un certain nombre d’attaques.

GSSAPI 7 permet d’utiliser les m´ecanismes de Kerberos V [6, 11], un syst`eme d’authentification s´ecuris´e `a tierce personne de confiance con¸cu pour les r´eseaux TCP/IP. Ce type de syst`eme est particuli`e- rement appropri´e aux environnement de type cluster.

SKEY pour S/Key est un m´ecanisme de type OTP (One Time Password) bas´e sur MD5.

EXTERNAL permet d’utiliser des m´ecanismes d’authentification d’une couche inf´erieure, comme SSL/TLS

Il y a encore beaucoup d’autres m´ecanismes possibles, comme SRP (Secure Remote Passwords [17])

2.5.2 Contrˆole d’acc`es

Il s’agit de d´efinir les droits d’acc`es 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’acc`es autoris´e>

ce qui se traduit dans le format du fichier de configuration slapd.confpar access to <quoi> by <qui> <type_d’acces_autoris´e>

Dans la partie<quoi>, on peut sp´ecifier :

– une expression r´eguli`ere, correspondant `a un dn :dn=<regular expression>

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

– un filtre :filter=<ldap filter>

Les possiblit´es pour<qui>(resp.<type d’acc`es autoris´e>) sont r´esum´es dans le tableau 2 (resp. 3).

7Generic Security Service Application Program Interface, d´efini dans [8]

(15)

* tous les utilisateurs, aussi bien anonymes qu’authentifi´es anonymous utilisateur non authentifi´e et donc anonyme

self utilisateurs associ´e `a l’entr´ee cibl´ee users utilisateur authentifi´e

dn=<regex> utilisateur qui correspond `a l’expression reguli`ere regex dn.<scope>=<DN> utilisateur dans le scope (voir §??) du DN

Tab.2 – possibilit´e pour la directive<qui>dans les ACLs Niveau Privil`ege accord´e

write modifi´e/renomm´e

read lecture des r´esultats de recherche

search requis pour l’application de filtre de recherche compare requis pour les comparaisons

auth requis pour s’authentifier (bind) none aucun acc`es

Tab. 3 –possibilit´e pour la directive<type d’acc`es autoris´e>dans les ACLs A noter que dans le tableau 3, un niveau donn´e accorde ´egalement les privil`eges des niveaux inf´erieurs.

Quelques exemples :

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

– La directive qui suit autorise un utilisateur `a modifier son entr´ee et les autres utilisateurs `a lire les entr´ees.

access to *

by self write by * read

L’´evaluation des contrˆoles d’acc`es se fait dans l’ordre ou les r`egles sont d´efi- nies dans le fichier de configuration avec un arret d’´evaluation `a la premi`ere correspondance (”first match”).

On verra un exemple de l’impact d’une ACL sur les recherches d’entr´ees au

§5.4.

2.5.3 Protection des mots de passe

Dans LDAP, les mots de passe peuvent poss´eder un pr´efixe qui pr´ecise la fa¸con dont ils sont encoder. Par exemple, si on consid`ere l’entr´ee

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 ´et´e hach´e avec MD5 puis encod´e en base 64. [4] d´efinit les pr´efixes de plusieurs algorithmes de chiffrement. Voici les plus

(16)

communs :

{CRYPT} utilise un hachage par la fonction Unix crypt(), bas´e `e sur DES.

C’est mode le plus faible en terme de s´ecurit´e 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) : d´evelopp´e par Netscape, il s’agit du mode pr´ec´edent avec une meilleur gestion du seed.{SSHA}est le mode recommand´e pour le stockage sˆur de donn´ees dans LDAP.

2.6 Replications

La r´eplication est une technique permettant `a un serveur (maˆıtre) de diffuser le contenu de sa base LDAP `a un ou plusieurs serveurs (esclave).

Toute modification apport´ee sur la base LDAP dans l’annuaire principal est automatiquement r´epercut´ee sur l’esclave d`es que celui-ci est joignable pour r´ealiser l’op´eration.

Cette r´eplication permet ainsi d’assurer une continuit´e du service d’authentifi- cation, mˆeme si l’un des deux serveurs est momentan´ement indisponible. Mais cela ne dispense absolument pas de la n´ecessit´e de sauvegarder r´eguli`erement la base LDAP.

2.7 Referrals TODO

(17)

3 Installation du serveur LDAP

3.1 Pr´e-requis

Il y a un certain nombre de composants `a installer en dehors de OpenLDAP pour ˆ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 d´etails de la compilation from scratch TODO : pr´eciser version minimale ou ca marche

3.1.2 Mise en place des certificats SSL

Le protocole TLS/SSL repose sur la pr´esente de certificats (au moins au niveau serveur). Un certificat est un fichier contenant une cl´e publique et un certain nombre de renseignements sur le serveur. Ce certificat est sign´e num´eriquement par une autorit´e de certification (CA) qui certifie ainsi que le serveur poss`ede effectivement la cl´e priv´ee.

On commence par cr´eer sur le serveur le r´epertoire qui contiendra les certificats :

> mkdir -p /etc/ldap/certificates

Depuis la version 2.1 de OpenLDAP, les client v´erifie compl`etement 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 unupdatedbavant d’ob- tenir une r´eponse 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

(18)

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 cr´e´e un r´epertoire (demoCA) contenant notamment le certi- ficat du CA (’cacert.pem’).

2. Cr´eation 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 cl´e secr`ete (il semblerait que OpenLDAP ne marche qu’avec des cl´es priv´ees non chiffr´ees).

Cet appel a g´en´er´e le fichier newreq.pem qui contient la cl´e secrete RSA et une requˆete 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

(19)

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 utilis´es 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 stock´ee sous plusieurs formats qui sont r´esum´es dans le 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 donn´ees 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)

(20)

3.1.4 Installation de SASL

En cours d’investigations... Pour le moment, une authentification simple s´ecu- ris´ee par SSL nous paraˆıt suffisante.

3.1.5 Choix de l’espace de nommage

Cette ´etape consiste `a d´efinir comment les entr´ees de l’annuaire vont ˆetre or- ganis´ees, nomm´ees et acc´ed´ees. L’objectif est de faciliter leur consultation et leur mise `a jour mais aussi de pr´evoir leur duplication, leur r´epartition entre plusieurs serveurs ou leur gestion par plusieurs personnes.

Dans le cadre de la premi`ere exp´erience grid5000 sur Grenoble,la racine choisie est dc=grid5000,dc=net. Les donn´ees sont organis´ees selon le sch´ema expos´e dans la figure 5, correspondant `a une configuration locale (voir§2.3.1).

ou=Hosts

ou=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 premi`ere exp´erience Grid5000 sur Grenoble Dans un premier temps, les machines des autres site pourront ˆetre configur´ees pour venir compl´eter leur configuration NSS avec les donn´ees LDAP pr´esentes sur le serveurldap-idpot.clic.id(voir§1)

On verra dans la section 8 l’evolution envisag´ee pour cette architecture. La racine changera notamment pourdc=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 moment o`u ce document est ´ecrit) n’est pas configur´e pour supporter TLS.

Il faudra r´ecup´erer les sources9 du package et changer une r`egle 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 unapt-get update.

(21)

Pour activer SSL :

> cd openldap2-2.0.23

puis ´editer le fichierdebian/rulesen changeant--without-tlspar--with-tls.

Il suffit alors de compiler le package :./debian/rules binary.

Cette commande va cr´eer 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 s´erie 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 v´erification. Ainsi, un mot de passe sera g´en´er´e automatiquement. Nous le changerons par la suite.

5. Replicate to another LDAP server : No

Attention : pour empˆecher la mise a jour automatique de ces packages via le d´epot Debian, il faut les marquer HOLD, par exemple avec dselect (en appuyant sur ’=’ pour les packages en question)

Cela signifie aussi que vous devrez vous-mˆeme vous assurer des alertes de s´ecu- rit´e !

3.2.2 Autres cas

D`es la version testing, le package slapd (version 2.1.30) est correctement configur´e. 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 format berkeley DB 4.2...

De mˆeme, Debconf va vous poser une s´erie 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 termin´ee, stopper le serveur LDAP par/etc/init.d/slapd stop; – Les fichiers de configuration seront localis´es dans/etc/ldap/

(22)

4 Configuration du serveur LDAP

C’est le fichier slapd.conf qui g`ere la configuration du serveur. Le format g´en´eral de ce fichier est le suivant :

# Fichier /etc/ldap/slapd.conf

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

# Section de configurations globales

# Inclusion des sch´emas

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

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

# Database #1 - Berkeley DB

# Parametres de la base de donn´ees

# ACL de cette base

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

# Database #2 - Berkeley DB

# Param`etres de la base de donn´ees

# ACL de cette base

Il faut cr´eer le r´epertoire qui contiendra la base de donn´ees. 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 d´efaut :

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

Le fichier complet pour cette prise en main est fournie dans annexe A. Les sections 4.1 et 4.2 d´etaillent chaques parties de ce fichier. Si vous souhaitez utiliser directement le fichier fourni sans lire ces explications, n’oubliez pas :

1. de configurersyslogpour g´erer les logs du serveur (§4.1.2 page 23).

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

3. de passer directement `a la section 4.3 page 27 pour achever la configuration du serveur.

4.1 Configurations globales 4.1.1 Inclusion des sch´emas

La premi`ere chose `a d´efinir : quels sch´emas10 devra supporter le serveur ? . Le tableau 5 liste les sch´emas les plus utiles (et qui sont pour la plupart fournis par d´efaut). Ce document ne traite pas de la cr´eation de nouveau sch´emas.

Les schemas sont plac´es par d´efaut dans /etc/ldap/schema.

On les ajoute par l’appel include <filename>

Typiquement, on aura donc les inclusions suivantes :

10Les sch´emas ont ´et´e introduit au§2.4.2, page 11

(23)

Sch´ema Description

core.schema LE fichier minimal `a inclure. D´efinit les attributs basiques de LDAPv3 confom´ement `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 r´ef´erences JDNI (cf [12]) misc.schema divers objets et attribut.

nis.schema n´ecessaire pour remplacer NIS par LDAP (cf[4] et§6) openldap.schema divers objet utilis´e dans opneldap, pour informations.

automount.schema n´ecessaire pour migrer des map automount ; sch´ema non fourni par d´efaut, voir §6.3

Tab.5 – Liste des principaux sch´emas 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 l`a 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 sp´ecifi´e par la directive loglevel. Les valeurs possibles sont d´efinies dans le tableau 6. La combinaison de plusieurs Niveau se fait en les ajoutant11.

11Le niveau par d´efaut est 296=256+32+8

(24)

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.logsera une aide pr´ecieuse pour le d´ebuggage.

D’autres param`etres contrˆolent l’ex´ecution :

– pidfile <filename>: le fichier ou sera stock´e le PID de slapd12. – argsfile <filename>: les argument pass´es `a slapd.

– schemacheck <on|off>: v´erifie la conformit´e de toutes les entr´ees aux sch´e- mas support´es.

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 g´en´eration d’un certificat valide pour le serveur, avec la cl´e priv´ee associ´ee. §3.1.2 a permis de creer le certificat pour l’autorit´e de certification (CA) et le serveur. On trouve ainsi les directives :

– TLSCertificateFile: l’emplacement du certificat du serveur.

– TLSCertificateKeyFile: l’emplacement de la cl´e priv´ee associ´ee 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 utilis´e par les script de shutdown

(25)

4.1.5 Autres options de s´ecurit´e

On distingue un certain nombre d’autres directives de s´ecurit´e :

– password-hash : d´efinit le sch´ema de chiffrement des mots de passe par d´efaut. Les valeurs possibles sont celles ´evoqu´ees dans le§2.5.3 page 15, celle par d´efaut ´etant {SSHA}

– securitypermet de d´efinir un ssf13(une valeur enti`ere comprise entreminssf etmaxssf, param`etres d´efinis dans§4.1.3) Par exemple :

security update_sasl=128,update_tls=128

– require: d´efinit les conditions g´en´erales d’acc`es `a l’annuaire. les principales options disponibles sont none,authc (pas d’acc`es anonyme, tout client doit s’authentifier),bind(requete bind obligatoire), LDAPv3(le client doit utiliser la version 3 du protocole LDAP)

– allow/disallow: permet d’activer/d´esactiver certaines fonctionnalit´es. Par exemple, allow bind_v2autorise les requˆetes bind de clients LDAPv2.

Pour nous, on ne s’int´eressera qu’`a la premi`ere option :

# Misc security settings password-hash {SSHA}

4.2 Configuration des Bases de Donn´ees

Un serveur LDAP est capable de g´erer plusieurs bases de donn´ees en mˆeme temps. On place les d´etails de la configuration de chaque base apr`es les confi- gurations globales dans le fichierslapd.conf (§4 page 22).

4.2.1 Ajout d’une base

Dans notre exemple, on ajoute au fichierslapd.confles 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 pr´ecise le format de base de donn´ees utilis´e (la liste des formats possibles est donn´ee dans le tableau 4, page 19)

– suffixpermet de d´efinir le DN racine g´er´e

– Le rootdn est tr`es important : il d´efinit l’utilisateur autoris´e `a cr´eer des entr´ees dans la base de donn´ees. Cet utilisateur devra ˆetre ajout´e `a la base (voir§??page ??.)

– rootpwcorrespond au mot de passe de l’utilisateurrootdn. Pour le g´en´erer, il suffit d’utiliser la commande suivante :

13security strength factor

(26)

> slappasswd New password:

Re-enter new password:

{SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxxxx

La chaine renvoy´ee peut alors ˆetre ajouter `a la directiverootpw.

– directoryd´efinit le r´epertoire ou sera physiquement stock´e la base de don- n´ees, tandis que mode pr´ecise les droits d’acc`es des fichiers cr´e´es dans ce r´epertoire.

On compl`ete ensuite cette configuration par diverses optimisations : 1. La g´en´eration d’index qui permettent d’acc´elerer les recherches.

Les types d’index support´es sont les suivants : – approx (approximate)

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

2. le param`etre cachesizequi d´efinit le nombre d’entr´ees qui doivent ˆetre gard´ees en m´emoire (par d´efaut 1000).

Dans notre cas, on utilisera :

# Indexing options

index objectClass eq

index cn pres,eq

cachesize 2000

Note :voici un indexage optimis´e trouv´e sur un site a tester pour le cas de la migration de donn´ees NIS. Je le place ici en attendant de le placer dans une partie d´edi´ee :

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 d´ej`a ´et´e abord´ees dans le§2.5.2 page 14.

Elles pr´ecisent pour la base de donn´ees en question qui a acc`es `a quoi.

Voici celle utilis´ee dans cet exemple :

(27)

# 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 rˆole particulier du DN cn=nss,dc=grid5000,dc=netqui sera utilis´e pour toutes les requˆetes de lecture (en particulier des mots de passe) dans la base (et ainsi ´eviter une lecture anonyme du contenu de la base). On verra un exemple de l’impact de cette ACL au§5.4.

4.3 Insertions minimales requises dans la base de donn´ees A ce stade, la base de donn´ees est compl`etement vide et il convient d’y int´egrer au minimum la d´efinition de la structure de la base et de l’utilisateur adminis- trateur et d’un utilisateur sp´ecial qui sera seul habilit´e `a lire les donn´ees de la base directement.

La section 5 d´etaillera 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 fichierinit_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

(28)

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’entr´ee rootpw du fichier /etc/ldap/slapd.conf.

2. Le mot de passe de l’utilisateur sp´ecial n’est pas tr`es important car il figurera en clair (malheureusement) dans deux fichiers de configuration au niveau client (voir §7.2.1 et §7.2.2). Cet utilisateur ´evite simplement les requˆetes anonymes...

Pour ajouter ces donn´ees dans la base de donn´ees :

> 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 d´emarrage /etc/init.d/slapd Pour que le serveur puisse r´epondre `a des requ`etes via une URL ldap TODO : expliquer le format des urls

et notamment ldaps, il est n´ecessaire de modifier le script de d´emarrage de slapd (il s’agit du script /etc/init.d/slapd).

La premi`ere id´ee (qui semble la plus logique) serait de placer la ligne SLAPD_OPTIONS="-h ’ldap:/// ldaps:///’"

dans le fichier /etc/default/slapd(qui est cens´e sp´ecifier les options du bi- naire slapd pour le script de d´emarrage) mais l’usage des guillemets pose pro- bl`eme.

4.4.1 Cas Debian stable

Curieusement, mˆeme si un fichier/etc/default/slapdexiste, les variables qu’il sp´ecifie ne sont pas utilis´ees dans le script de d´emarrage !

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:///’.

(29)

4.4.2 Autres cas

TODO : dans les versions r´ecentes de slapd, le fichier /etc/default/slapd contient la ligne

# Example usage:

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

a ajouter...

On modifie /etc/init.d/slapden remplacant :

--exec /usr/sbin/slapd -- $SLAPD_OPTIONS 2>&1‘

dans la fonctionstart_slapd()par

--exec /usr/sbin/slapd -- -h ’ldap:/// ldaps:///’ $SLAPD_OPTIONS 2>&1‘"

Remarque : Il est imp´eratif que toute requˆete arrivant sur le serveur soit en- capsul´ee dans un tunnel SSL, ce qui impose soit l’utilisation d’url ldaps://

(configuration par d´efaut des clients), soit l’utilisation d’urlldap://avec l’op- tion-ZZdans la requˆete (`a ´eviter)

TODO : inclure les modifs propos´ees dans la section suivante. Inclure tout cela dans un fichier propos´e 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’utilisateur rootmais par un utilisateur d´edi´e, typiquementslapd.

En terme de s´ecurit´e, c’est ´evidemment nettement mieux car une attaque sur le serveur LDAP fournira en g´en´eral `a l’attaquant un acc`es avec les droits utilis´es par le serveur. C’est d’autant plus int´eressant si vous utilisez une Debian stable et que, comme on l’a vu, vous devez vous charger personnellement des mises

`

a jour de s´ecurit´e ce qui laisse du temps pour l’exploitation d’attaques sur le serveur !

->TODO d´etailler les manips et les tester.

4.6 V´erifier 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 untail -f /var/log/slapd.log sur une autre console par exemple).

Les commandes suivantes14, lanc´ees sous root, doivent rendre un r´esultat sans erreur :

ldapsearch -H "ldap://127.0.0.1" -b "dc=grid5000,dc=net" -x teste une requˆete non chiffr´ee sur le port standard 389

ldapsearch -H "ldap://ldap-idpot.clic.id" -b "dc=grid5000,dc=net" -x -ZZ teste une requˆete chiffr´ee sur le port standard 389. l’option -ZZ montre

que StartTLS marche correctement. Le nom sp´ecifi´e dans l’URL (ici,

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

(30)

ldap-idpot.clic.id)doit correspondre `a celui utilis´e dans le certificat du serveur, donc au r´esultat de la commande ’hostname -f’ (voir §3.1.2 page 17)

ldapsearch -H "ldaps://ldap-idpot.clic.id" -b "dc=grid5000,dc=net" -x teste une requˆete chiffr´ee sur le port standard 636 (ldaps://est la fa¸con de sp´ecifier l’utilisation de SSL). Mˆeme remarque que pr´ec´edemment pour le nom utilis´e dans l’URL.

(31)

5 Les principales commandes LDAP

5.1 Lancement du serveur slapd

Options Description

-h URI list Sp´ecifie la liste des URIs LDAP que le d´emon slapd devra servir.

Exemple typique : ldap:/// (LDAP sur port 389 ; par default), ldaps:///(LDAP sur SSL on port 636) etldapi:///(LDAP sur IPC).

-u username Sp´ecifie l’utilisateur et le groupe effectif pour slapd -g groupname

-d integer D´efinit le niveau de log

-f filename Utiliser le fichier de configuration sp´ecifi´e Exemple :slapd -u slapd -h ’ldap :/// ldaps :///’

Tab. 7 –Principales options disponibles pour slapd Le serveur peut ˆetre lanc´e de deux fa¸cons :

– Soit directement (voir le tableau 7 pour les options possibles) :/usr/sbin/slapd On v´erifie que le serveur est bien lanc´e par ps -ef | grep slapd.

ATTENTION : pour stopper proprement15 le serveur lanc´e de cette fa¸con :

> kill -INT ‘cat /var/run/slapd.pid‘

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

Noter les modifications apport´ees `a ce script au §4.4, page 28.

5.2 Commandes online/offline

Offline Online Description

slapadd ldapadd Ajout d’entr´ees dans la base LDAP

slapcat Utilitaire pour dumper le contenu de la base au format LDIF

slappasswd Utilitaire LDAP pour obtenir le chiffrement de mots de passe

ldappasswd Changer le mot de passe d’une entr´ee LDAP ldapdelete Suppression d’une entr´ee LDAP

ldapmodify Modification d’une entr´ee ldapsearch Recherche dans la base LDAP ldapmodrdn Renommage d’une entr´ee LDAP

Tab.8 –Principales commandes online/offline On distingue deux modes de fonctionnement :

1. m´ethodeoffline (sans passer par le serveur LDAP) : Dans ce cas, on uti- lisera la commandeslapadd. Ces commandes sont n´ecessairement tap´ees

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

(32)

sur le serveur LDAP.

2. m´ethode online (en passant par le serveur LDAP) : commande ldap*

(comme ldapadd,ldapmodify etc...). Ces commandes peuvent ˆetres uti- lis´ees indiff´erement depuis le serveur ou un client LDAP16

Le tableau 8 fournit les principales commandes disponibles, selon qu’elles soient online ou offline. La plupart des commandes online ont des options communes (qui sont en fait les plus utilis´ees) qui sont d´etaill´ees dans le tableau 9.

Options Description

-D binddn sp´ecifie le DN utilis´e pour la connexion au serveur LDAP

-f filename sp´ecifie le fichier LDIF contenant les entr´ees `a utiliser pour l’op´e- ration

-H URI D´efinit l’URI LDAP `a utiliser pour la requete de connexion -n ne pas effectuer l’op´eration, juste dire ce qui aurait ´et´e fait

-v mode verbeux

-w password sp´ecifie le mot de passe du DN utilis´e pour la connexion

-W demande un prompt pour entrer le mot de passe du DN utilis´e pour 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] G´en`ere une requˆete StartTLS. l’utilisation de -ZZ impose que cette

requˆete soit r´eussie.

-d integer sp´ecifie les informations de d´ebuggage `a afficher (voir tableau 6 page 23)

Tab.9 –Principales options communes `a ldapsearch, ldapadd, ldapdelete, ldapmodify et ldapmodrdn

5.3 Ajouter des entr´ees dans la base LDAP Pour ajouter des entr´ees dans la base :

1. cr´eer un fichier au format LDIF (voir§2.4.3 page 12), par exempletoto_add.ldif, qui contiendra les entr´ees `a ajouter.

2. le plus simple ensuite est d’utiliser la m´ethode offline pour ajouter le contenu du fichier dans la base (cela suppose que le serveur est arrˆet´e) : slapadd -v -l toto_add.ldif

l’option -v fournit des infos suppl´ementaires.

Pour la m´ethode online (si le serveur tourne) :

(a) D´efinissez un alias pour ´eviter de retaper toujours les mˆemes op-

tions17:alias MyLdapadd=’ldapadd -W -x -H "ldaps://<votre_serveur>"

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

16sous r´eserve ´evidemment que celui-ci soit correctement install´e et configur´e : voir pour cela la section 7 page 42

17Il faut vraiment toutes ces options ! En particulier, sans l’option -W, l’authentification de l’adminitrateur echouera forc´ement et la requˆete deviendra anonyme. Or, un utilisateur anonyme n’a pas les droits d’´ecriture dans la base d’apr`es les ACLs deslapd.conf(§4.2.2) et

’ajout echouera. Voir le tableau 9 pour bien comprendre `a quoi chaque option correspond

(33)

(b) MyLdapadd -v -f toto_add.ldifpour ajouter le contenu du fichier

`

a la base.

A noter l’existence de l’option -c de ldapadd qui permet de continuer malgr´e les erreurs.

Un exemple d’ajout a d´ej`a ´et´e pr´esent´e au§4.3 page 27.Sinon, voici le contenu du fichiertoto_add.ldifutilis´e en exemple :

> cat toto_add.ldif

## Build the toto ou.

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

objectClass: organizationalUnit

En cas de probl`emes lors de l’ajout simultan´e de plusieurs entr´ees (par exemple avec des messages d’erreurs commeldap_add: Invalid syntaxet/ou

additional info: value contains invalid data), assurez vous que les sauts de lignes ne comportent pas d’espace au d´ebut de la ligne18 et que vous incluez les bons schemas dansslapd.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 sp´ecifiques deldapsearchsont fournies dans le tableau 10 – le filtre de recherche doit ˆetre repr´esent´e par une chaine au format sp´ecifi´e

dans [5]. Par d´efaut, le filtre utilis´e est(objectClass=*).

– si une ou plusieurs entr´ees sont trouv´ees, seuls les attributsattrs(tous par d´efaut) seront affich´es sur la sortie standard.

Options Description

-b basedn d´efinit le DN de base pour la recherche

-l limit d´efinit la dur´ee limite (en seconde) pour la recherche

-L-LL-LLL le r´esultat est fournit au format LDIFv1, -LL supprime les com- mentaires, comme -LLL qui supprime aussi les infos de version -s [sub|base|one] d´efinit le scope de la recherche.

sub (d´efaut) : recherche dans le sous-arbre de la base base : recherche dans les premier fils de la base one : recherche dans l’entr´ee de base uniquement -S attribut les r´esultats sont tri´e selon les valeurs de l’attribut -z limit Sp´ecifie le nombre maximal d’entr´ees `a renvoy´e

Tab. 10 –Principales options sp´ecifiques de ldapsearch

Voici quelques exemples d’utilisation, qui illustrent ´egalement le fonctionnement des ACLs :

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

(34)

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 fichier de configuration de l’annexe A, les commandes pr´ec´edentes ne renverront aucun r´esultat !

En effet, avec ces ACLs, comparer les r´esultats 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 r´esultat dans le second cas et pas dans le premier. Que s’est il pass´e ? Dans le premier cas, la connexion est anonyme et d’apr`es l’ACL, seul les DN authentifi´e sont autoris´es `a acc´eder au contenu de la base : (clause by * auth; en remplacant cette clause par by * read, vous obtiendriez bien sˆur un r´esultat). En revanche dans le second cas et sous r´eserve que le bon mot de passe soit entr´e (sinon, la requˆete devient anonyme), le DNcn=nss,dc=

grid5000,dc=netest authentifi´e et autoris´e en lecture (clause by dn="cn=nss,dc=grid5000,dc=net" read).

5.5 Modifier/Supprimer des entr´ees dans la base

Comme pour l’ajout, on passera par un fichier LDIF pour modifier des entr´ees dans la base. On utilisera ensuite la commandeldapmodify. A noter que comme les fichiers LDIF sont lus s´equentiellement, il est possible de modifier des entr´ees cr´e´ees plus tˆot dans le fichier

Dans le fichier, chaque entr´ee `a modifier contiendra un mot cl´e changetype: <type_modification>

qui pr´ecisera le type de modification apport´e. Les valeurs possibles pour le champ<type modification>sont r´esum´ees dans le tableau 11.

Je vous conseille de d´efinir un alias pour ldapmodify et les options que vous utiliserez `a chaque fois :

alias MyLdapmodify=’ldapmodify -W -x -H "ldaps://<votre_serveur>" \ -D "cn=admin,dc=grid5000,dc=net"’

Voici maintenant un exemple suffisamment comment´e qui illustre toutes ces possiblitit´es

19l’option -LLL n’est utilis´ee que pour limiter la taille des r´esultats en sortie (voir tableau 10)

(35)

add ajouter l’entr´ee dans l’annuaire (choix par d´efaut) delete supprimer l’entr´ee de l’annuaire

modify modifier les attributs de l’entr´ee. On peut ainsi `a la fois ajouter, modifier ou supprimer des attributs

modrdn changer le RDN (Voir tableau 1 page 11) de l’entr´ee moddn changer le DN de l’entr´ee

Tab.11 – Valeurs possibles pour le mot cl´e ’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

Références

Documents relatifs

[r]

Pour la sélection du serveur choisir Select a server from the server pool et cliquer Next.. Dans les roles de serveur, metter case serveur Web Server IIS et

If the bindname extension is critical, the client resolving the URL MUST authenticate to the directory using the given distinguished name and an appropriate

Pour les fonctions de la forme x 7→ e kx P (x) o` u P est un polynˆ ome de degr´ e n, l’int´ egration par parties consistera ` a d´ eriver le polynˆ ome afin d’obtenir une

Entry for principal host/clinux.ifsic.univ-rennes1.fr with kvno 3, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5.keytab. Entry for

Pour créer une base, il faut définir la structure de la base Nous allons utiliser un fichier texte (ossature.ldif) dans le format LDIF. Le fichier LDIF doit définir la racine

Si le DN correspondant à cet utilisateur (i.e. uid=username, ou=People, dc=limsi, dc=fr) est enregistré en tant que membre de l’entrée ou=infoAdm, ou=metaGroups, dc=limsi, dc=fr et

Install zimbra-ldap [Y] ] Y Install zimbra-logger [Y] Y Install zimbra-mta [Y] Y Install zimbra-snmp [Y] Y Install zimbra-store [Y] Y Install zimbra-apache [Y] Y