openldap tutoriel

Embed Size (px)

Citation preview

Tutorial OpenLDAPInstallation et conguration (clients/serveurs) Migration NIS LDAP dans GRID5000 Scurisation par SSL et optimisations e

[email protected]

Version : 0.3 Fvrier 2005 e

Rsum e e Ce document a pour objectif de familiariser le lecteur avec linstallation et la conguration dun service dannuaire LDAP dans un environnement Linux, plus particuli`rement dans lobjectif de remplacer NIS. e La premi`re partie (1) est consacre ` ceux qui nont pas de temps e e a a ` perdre et qui souhaitent disposer rapidement dun environnement fonctionnel. Les sections suivantes dtaillent plus amplement le fonctionnement e de LDAP. Ainsi, apr`s quelques rappels et dnitions de principe (2), on trouvera e e une explication dtaille de linstallation dun serveur LDAP (3) et de sa e e conguration (4). La section 5 est consacre au principales commandes e implmentes dans LDAP qui sont illustres par des exemples tandis que e e e la section 6 dtaillera plus particuli`rement les manipulations ` eectuer e e a pour migrer les tables NIS et plus gnralement les chiers syst`mes dans e e e la base LDAP de faon ` ce que la gestion des comptes utilisateurs passe c a par LDAP. Alors que la section 7 dtaille linstallation et la conguration des e clients LDAP, un derni`re partie (8) traite des manipulations eectues e e et des volutions envisages dans le cadre du projet Grid5000, cadre expe e e rimental de ce document. A noter que le dmon du service dannuaire LDAP est slapd et quil e est implment sur la plupart des plateformes UNIX. Les diverses manie e pulations prsentes dans ce document sont largement orientes vers la e e e distribution Debian, mais elles restent similaire dans le cadre dautres distributions comme RedHat ou Mandrake.

1

Table des mati`res e1 Pour les plus presss : Ultra Quick Guide e 1.1 Prrequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 1.2 Cot serveur... . . . . . . . . . . . . . . . . . . . . . . . . . . . e 1.3 Gestion des chiers de congurations par LDAP . . . . . . . . 1.4 Cot client... . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 1.4.1 Initialisation et conguration de base du client . . . . . 1.4.2 Gestion de lauthentication des utilisateurs via LDAP . 1.4.3 Note ` propos de la cohabitation NIS/LDAP . . . . . . a 2 Introduction 2.1 Notion dannuaire electronique . . . . . . . 2.2 Mais quapporte LDAP ? . . . . . . . . . . . 2.3 LDAP, comment ca marche ? . . . . . . . . 2.3.1 Serveur local . . . . . . . . . . . . . 2.3.2 Annuaire local avec referrals . . . . . 2.3.3 Annuaire rpliqu . . . . . . . . . . e e 2.3.4 Annuaire distribu . . . . . . . . . . e 2.4 Le mod`le de donnes LDAP . . . . . . . . e e 2.4.1 Le Directory Information Tree (DIT) 2.4.2 Les schmas . . . . . . . . . . . . . . e 2.4.3 LDIF . . . . . . . . . . . . . . . . . 2.5 La scurit dans LDAP . . . . . . . . . . . e e 2.5.1 Authentication . . . . . . . . . . . 2.5.2 Contrle dacc`s . . . . . . . . . . . o e 2.5.3 Protection des mots de passe . . . . 2.6 Replications . . . . . . . . . . . . . . . . . . 2.7 Referrals . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 5 5 6 6 6 7 8 8 9 9 9 9 10 10 10 11 11 12 13 13 14 15 16 16 17 17 17 17 19 20 20 20 20 21 21 22 22 22 23 24

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

3 Installation du serveur LDAP 3.1 Pr-requis . . . . . . . . . . . . . . . . . . . . . . . . e 3.1.1 Installation de OpenSSL . . . . . . . . . . . . 3.1.2 Mise en place des certicats SSL . . . . . . . 3.1.3 Installation de Berkeley DB . . . . . . . . . . 3.1.4 Installation de SASL . . . . . . . . . . . . . . 3.1.5 Choix de lespace de nommage . . . . . . . . 3.2 Installation de slapd . . . . . . . . . . . . . . . . . . 3.2.1 Cas dune installation sur une Debian stable 3.2.2 Autres cas . . . . . . . . . . . . . . . . . . . . 3.2.3 Dans tous les cas.... . . . . . . . . . . . . . . 4 Conguration du serveur LDAP 4.1 Congurations globales . . . . . . . . . . . 4.1.1 Inclusion des schmas . . . . . . . e 4.1.2 Logging, conguration dexecution 4.1.3 Options SASL . . . . . . . . . . . 2

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

4.2

4.3 4.4

4.5 4.6 5 Les 5.1 5.2 5.3 5.4 5.5 5.6

4.1.4 Options SSL/TLS . . . . . . . . . . . . . . . . 4.1.5 Autres options de scurit . . . . . . . . . . . . e e Conguration des Bases de Donnes . . . . . . . . . . e 4.2.1 Ajout dune base . . . . . . . . . . . . . . . . . 4.2.2 Conguration des ACLs . . . . . . . . . . . . . Insertions minimales requises dans la base de donnes e Modication du script de dmarrage /etc/init.d/slapd e 4.4.1 Cas Debian stable . . . . . . . . . . . . . . . . 4.4.2 Autres cas . . . . . . . . . . . . . . . . . . . . . Faire en sorte que le serveur ne se lance pas sous root Vrier que le serveur marche . . . . . . . . . . . . . . e principales commandes LDAP Lancement du serveur slapd . . . . . . . . . . Commandes online/oine . . . . . . . . . . . Ajouter des entres dans la base LDAP . . . e Recherches dans la base LDAP . . . . . . . . Modier/Supprimer des entres dans la base . e Quelques outils graphiques . . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

24 25 25 25 26 27 28 28 29 29 29 31 31 31 32 33 34 36 37 37 37 37 39 39 39 39 40 40 40 42 42 42 42 42 43 44 45 47 49 49

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

6 Gestion des chiers de congurations par LDAP 6.1 Les outils de migration des chiers de conguration . 6.1.1 Installation . . . . . . . . . . . . . . . . . . . 6.1.2 Conguration . . . . . . . . . . . . . . . . . . 6.2 Migration les chier passwd, group et hosts . . . . . 6.2.1 Recupration du contenu des tables NIS . . . e 6.2.2 Conversion au format LDIF . . . . . . . . . . 6.2.3 Insertion dans la base LDAP . . . . . . . . . 6.3 Migration des chiers de conguration dautomount 6.3.1 Installation du package autofs-ldap . . . . . . 6.3.2 Migration du chier /etc/auto.home . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

7 Installation du client LDAP 7.1 Initialisation et conguration de base du client . . . . . . 7.1.1 Cas dune installation sur une Debian stable . . . 7.1.2 Autres cas . . . . . . . . . . . . . . . . . . . . . . . 7.1.3 Dans tous les cas.... . . . . . . . . . . . . . . . . . 7.1.4 Vrier que ca marche . . . . . . . . . . . . . . . . e 7.2 Authentication des utilisateurs via LDAP . . . . . . . . 7.2.1 NSS (Name Service Switch) et LDAP . . . . . . . 7.2.2 PAM (Pluggable Authentication Module) et LDAP 7.3 Conguration automount : le chier auto.master . . . . . 7.4 Utilisation de NSCD . . . . . . . . . . . . . . . . . . . . . 3

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

8 Evolution au sein du projet Grid5000 8.1 Premi`re experimentation : conguration locale . . e 8.1.1 Contexte . . . . . . . . . . . . . . . . . . . 8.1.2 Description . . . . . . . . . . . . . . . . . . 8.1.3 Contribution des autres sites . . . . . . . . 8.2 Seconde exprimentation : utilisation des referrals . e 9 Quelques liens utiles A Fichier de conguration slapd.conf B Fichier de conguration ldap.conf

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

50 50 50 50 50 51 52 55 57

C Fichiers de conguration NSS 58 C.1 le chier /etc/libnss-ldap.conf . . . . . . . . . . . . . . . . . . . . 58 C.2 le chier /etc/nsswitch.conf . . . . . . . . . . . . . . . . . . . . . 58 D Fichiers de conguration PAM 59 D.1 le chier /etc/pam ldap.conf . . . . . . . . . . . . . . . . . . . . 59 D.2 Le chier /etc/pam.d/ssh . . . . . . . . . . . . . . . . . . . . . . 59 D.3 Le chier /etc/pam.d/su . . . . . . . . . . . . . . . . . . . . . . . 60 E le chier automount.schema F Quelques astuces et messages derreurs rencontrs e G Programmation Perl avec LDAP 61 62 63

4

11.1

Pour les plus presss : Ultra Quick Guide ePrrequis e1. Installation de openssl : apt-get install openssl 2. Mise en place des certicats 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 dinvestigation...

1.2

Cot serveur... e(a) Sous debian stable : suivre les instructions du 3.2.1 page 20. (b) Autres cas : apt-get install slapd libldap2 libldap2-dev ldaputils

1. Installation de slapd

2. Conguration 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) Rcuprer le chier slapd.conf fourni en annexe A page 55 et le placer e e dans /etc/ldap/slapd.conf (c) congurer syslog pour grer les logs du serveur : ajouter la ligne e suivante dans /etc/syslog.conf : local4.debug /var/log/slapd.log et relancer le service (/etc/init.d/sysklogd restart) Le chier /etc/log/slapd.log sera une aide prcieuse pour le dbuggage. e e (d) Initialisation du contenu de la base LDAP : suivre les instructions du 4.3 page 27. (e) Modication du script de dmarrage /etc/init.d/slapd : suivre les e instructions du 4.4 page 28. (f) Faire en sorte que le serveur ne se lance pas sous root : en cours dinvestigations... 3. Vrier que le serveur fonctionne : suivre les instructions du 4.6 page 29. e

1.3

Gestion des chiers de congurations par LDAP(a) Sous Debian stable : forcer linstall en testing : apt-get install -t testing migrationtools (b) Autres cas : apt-get install migrationtools

1. Installer les outils de migration :

2. Congurer les outils de migration : suivre les instructions du 6.1.2 page 37. 5

3. Migration les chier passwd, group et hosts : suivre les instructions du 6.2 page 39. 4. Migration des chiers de conguration dautomount : Dans le cas ou une map automount est initialement gre par NIS (/etc/auto.home dans ee 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 chier fourni en annexe E page 61 dans /etc/ldap/schema/ automount.schema (c) Dcommenter dans le chier de conguration slapd.conf la ligne : e include /etc/ldap/schema/automount.schema (d) Migration du chier /etc/auto.home sur le serveur LDAP suivre les instructions du 6.3.2 page 40.

1.41.4.1

Cot client... eInitialisation et conguration de base du client

1. Installation (a) Cas Debian stable : compte tenu des remarques relatives ` la gestion a SSL pour le package client stable (voir 7.1 page 42), il convient de forcer linstallation 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. Recuprer le chier fourni en annexe B page 57 et le placer dans /etc/ e ldap/ldap.conf 4. copier le certicat du CA (qui a sign le certicat du serveur) et le placer e dans /etc/ldap/CA-cert.pem 5. Vrier que tout fonctionne : suivre les instructions du 7.1.4 page 43. e 1.4.2 Gestion de lauthentication des utilisateurs via LDAP

1. NSS (Name Service Switch) et LDAP : (a) Installation : apt-get install libnss-ldap (en forcant en testing si vous tes sur une Debian stable) e (b) cp /etc/libnss-ldap.conf /etc/libnss-ldap.conf.old (c) Recuprer le chier fourni en annexe C.1 page 58 et le placer dans e /etc/libnss-ldap.conf (d) chmod 0600 /etc/libnss-ldap.conf (e) Recuprer le chier fourni en annexe C.2 page 58 et le placer dans e /etc/nsswitch.conf 6

(f) Pour vrier que ca marche... : suivre les instructions du paragraphe e associ au 7.2.1 page 46. e 2. PAM (Pluggable Authentication Module) et LDAP : Mme si cette section e est ddi aux utilisateurs presss, il est bon, compte tenu limportance de e e e PAM dans un syst`me Linux, de lire compl`tement le 7.2.2 page 47 et e e den suivre les instructions. 1.4.3 Note ` propos de la cohabitation NIS/LDAP a

Il est tout ` fait possible de faire cohabiter une gestion des chiers de cona guration par NIS et par LDAP. En supposant que les tapes prcdentes sont e e e valides, il sut de suivre les instructions suivantes : e 1. Sauvegarder le chier /etc/nsswitch.conf : cp /etc/nsswitch.conf /etc/nsswitch.conf.old 2. modier /etc/nsswitch.conf pour quil contienne les entres suivantes : e passwd: shadow: group: hosts: files files files files nis nis nis nis ldap ldap ldap ldap dns

Pour vrier que ca a bien t pris en compte utiliser la commande getent e ee chier o` chier peut-tre *passwd, group ou hosts. Vous pourrez constater u e que le entres de ces chiers sont rcuprer dans lordre suivant : e e e chier local map NIS map LDAP

7

22.1

IntroductionNotion dannuaire electronique

Un annuaire lectronique est une base de donnes spcialise qui permet de e e e e partager des bases dinformations sur un rseau. Ces bases peuvent contenir e toute sorte dinformations, comme des coordonnes tlphoniques ou des done ee nes syst`mes. e e Dans le cadre dun cluster de machine, un service dannuaire permettra par exemple de diuser des donnes syst`mes, comme celles contenues dans les prine e cipaux chiers de conguration syst`mes (/etc/passwd, /etc/shadow, /etc/ e group, /etc/hosts ou encore /etc/auto.home etc...) Classiquement, ce service est rendu par le service NIS1 dvelopp par SUN. Cest un protocole e e client/serveur qui permet de diuser des donnes de conguration (utilisateurs, e mots de passe, hote etc...) entre les ordinateurs sur un rseau. e LDAP signie Lightweight Directory Access Protocol, un protocole dannuaire sur TCP/IP utilisant les mmes concepts que DNS2 , le service de nommage e utilis sur lInternet pour faire correspondre un nom explicite (comme www-id. e imag.fr) ` une adresse IP (129.88.69.11). Le spectre des informations qui a peuvent ainsi tre diuses est tr`s large : cela va des coordonnes adminise e e e tratives aux donnes du compte utilisateur (login, passwd), en passant par les e donnes syst`mes de routage, de montage de partitions automatiques etc... e e Comme on la dit, un annuaire lctronique fonctionne de faon similaire ` une ee c a base de donnes mme si quelques dirences subsistent : e e e il est optimis pour la lecture ; lajout et la modication de donnes peuvent e e tre co teuses ; e u il fournit des fonctions de recherches plus avances ; e les donnes sont stockes sur un mod`le distribu et des techniques de replie e e e cations sont possibles, ce qui facilite un passage ` lchelle ecace. a e la structure des donnes stockes, appele schma, peut tre tendue en fonce e e e e e tion de besoins locaux ; il est bas sur des standards tablis qui assurent linteroprabilit entre plue e e e sieurs implmentations sur plusieurs supports (notamment OS). Ce document e sintressera ` limplementation open source de LDAP dveloppe ` lunivere a e e a 3 version 2.x sous Linux. sit du Michigan, OpenLDAP e LDAP apporte galement de nombreuses garanties en terme de scurit, puisque e e e des mcanismes de chirement (SSL ou TLS) et dauthentication (SASL4 ), e coupls ` des mcanismes de r`gles dacc`s (ACL) permettent de protger les e a e e e e transactions et lacc`s aux donnes. e e Par tous ces avantages, LDAP est un support de choix pour remplacer NIS dans la gestion des comptes machines et lauthentication des utilisateurs.1 2

Network Information System, ou Yellow Pages yp Domain Name System 3 http ://www.openldap.org 4 Simple Authentication and Security Layer

8

Nous nous interessons ici ` la version 3 de LDAP, rfrence sous le nom a ee e LDAPv3 [16].

2.2

Mais quapporte LDAP ?

Cot utilisateur, LDAP fournit les services suivants : e un protocole dacc`s ` linformation contenue dans lannuaire ; e a un mod`le dinformation dnissant le type de donnes contenues dans lane e e nuaire ; un mod`le de nommage dnissant comment linformation est organise et e e e rfrence ; ee e un mod`le fonctionnel qui dnit comment on acc`de ` linformation ; e e e a un mod`le de scurit qui dnit comment les donnes et les acc`s sont proe e e e e e tgs, e e un mod`le de duplication qui dnit comment la base est rpartie entre sere e e veurs, des APIs pour dvelopper des applications clientes, e LDIF, un format dchange de donnes. e e

2.3

LDAP, comment ca marche ?

Le service dannuaire LDAP est bas sur un mod`le client/serveur. Un ou plue e sieurs serveurs LDAP contiennent les donnes. Un client LDAP se connecte ` e a un serveur et lui pose sa question. Il recoit en retour une rponse ou un pointeur e (on parle de referral) sur lendroit (typiquement un autre serveur) ou le client pourra trouver plus dinformations. Quelque soit le serveur auquel le client se connectera, il aura la mme vue de lannuaire :un nom rferera ` une mme e e a e entre quelque soit le serveur accd, comme pour DNS. e e e Il existe plusieurs congurations possibles qui sont dtailles dans la suite. e e 2.3.1 Serveur local

Dans ce cadre, il ny a pas dinteractions entre le serveur slapd du domaine et un quelconque autre serveur. Ce mode de fonctionnement est illustr dans la e gure 1Client1. Requete 2. Rponse

Serveur

Fig. 1 Conguration locale (source :[2]) Cette conguration est particuli`rement adapt au cas dun intranet local. e e 2.3.2 Annuaire local avec referrals

Ici, le serveur est congur sur le domaine local pour rendre les services dane nuaires et de renvoyer un referral (une sorte de pointeur) vers un serveur 9

suprieur capable de rpondre aux requtes en dehors du domaine local. Il est ` e e e a noter que par dfaut et pour viter de surcharger le serveur, le client ` a charge e e a de relancer la requete vers le serveur point (gure 2). e3. Nouvelle requete

Serveur Suprieur

Client

1. Requete 2. Referral

Serveur

Fig. 2 Conguration locale avec referral (source :[2]) Ce mode de fonctionnement est particuli`rement adapt au cas des grilles de e e grappes, donc au cadre du projet Grid5000. 2.3.3 Annuaire rpliqu e e

Dans ce cadre, le dmon slurpd est charg de propager les changements eectus e e e dun serveur slapd ma vers un ou plusieurs serveurs slapd esclave (gure 3). tre

Fig. 3 Conguration par rplication (source :[2]) e On permet ainsi de garantir une certaine qualit de service. Lutilisation de e slurpd vient avantageusement complmenter le mode de conguration prcdent e e e dans le cadre dune grille. 2.3.4 Annuaire distribu e

Dans cette conguration, le service local est partitionn en plusieurs souse services, qui peuvent ventuellement tre rpliqus, et qui sont rassembls par e e e e e un ensemble de referrals vers des serveurs suprieurs ou infrieurs. e e

2.4

Le mod`le de donnes LDAP e e

LDAP utilise une approche oriente objet dans sa reprsentation des donnes, e e e ce qui inclue notamment la dnition dobjets (par un ensemble de r`gles et e e dattributs) et la notion dhritage entre objets. e 10

2.4.1

Le Directory Information Tree (DIT)

Les donnes LDAP sont structures dans une arborescence hirarchique come e e parable ` celle des syst`mes de chiers UNIX. a e Chaque noeud de larbre correspond ` une entre 5 de lannuaire. Au sommet a e de cet arbre (appel Directory Information Tree-DIT) se trouve la racine ou e suxe. A noter que chaque serveur poss`de une entre spciale, appele root directory e e e e specic entry (rootDSE) qui contient la description de larbre et de son contenu. Les entres correspondent ` des objets abstraits ou issus du monde rel (une e a e personne, une ressource de la grille ou des param`tres de conguration). Elles e contiennent un certain nombre de champs appels attributs qui caractrisent e e chaque entre. e Chaque entre est rfrence de mani`re unique dans le DIT par son distinguie ee e e shed name (DN). Cette unicit est obtenue par la combinaison des attributs e lists dans le tableau 1. e DN DC OU O distinguished name domain components organizational unit organization CN SN UID common name surname user ID

Tab. 1 Principales abrviations utilises dans le champ DN e e Le DN reprsente le nom de lentre sous la forme du chemin dacc`s ` cellee e e a ci depuis le sommet de larbre. On peut comparer le DN au path dun chier Unix. Bien entendu, comme pour le syst`me de chier Unix, on peut utiliser e un relative distinguished names (RDNs) pour dsigner une entre depuis une e e position particuli`re de larbre. e Ces notions sont illustres dans la gure 4. e Pour faire le parall`le avec la terminologie des bases de donnes relationnelles, e e les entres correspondent ` un enregistrement dans une table tandis que les e a attributs seraient lquivalent dun champ dune table. e 2.4.2 Les schmas e

Un schma LDAP dnit la liste des entres possibles, appeles alors object e e e e classes. Celles-ci sont organises hirarchiquement, en partant de la classe top e e a ` la racine du DIT. Pour chacune dentres elles, on trouve la liste des attributs associs, dclins par e e e leurs types et leurs syntaxes. Ces attributs peuvent tre requis (ex :le nom dune e personne) ou optionnels (comme un numro de FAX). On y ajoute galement e e les oprations et les itres de comparaison autoriss. e e A noter que chaque classe dobjets hrite des attributs de ses prdcesseurs.dans e e e la hirarchie. Les objet classes et leurs attributs sont normaliss dans [15] an e e dassurer linteroprabilit entre les logiciels. Il sont rfrencs par un object e e ee e5

entry o` directory service entry (DSE) dans la littrature anglaise. u e

11

DIT dc=grid5000,dc=fr Liste dattributs associs une entry; format : ou=People ou=Groupcn: g5k objectClass: posixGroup objectClass: top userPassword: {crypt}x gidNumber: 24560 memberUid: svarrett memberUid: georget

uid=svarrett

uid=georget

cn=equipar

cn=g5k

entry Distinguished Name:dn: cn=g5k ,ou=Group,dc=grid5000,dc=fr RDN (Relative Distinguished Name) depuis ou=Group,dc=grid5000,dc=fr

Fig. 4 Exemple de DIT : cas de la gestion NIS identier (OID) unique attribu par lInternet Assigned Numbers Authority e (IANA). 2.4.3 LDIF

LDAP Data Interchange Format (LDIF), dnit dans [3], est un format texte6 e standard qui permet de reprsenter les donnes LDAP. Il a pour vocation de e e donner une meilleur lisibilit des donnes. Il est utilis pour importer,exporter e e e ou modier les donnes de la base et doit obir aux r`gles dnies dans le schma e e e e e de lannuaire (voir 2.4.2) Un chier LDAP est constitu dune suite dentres spares par un saut de e e e e ligne. Le format est le suivant : : ou le premier attribut dune entre est le DN. e Un entre aura donc la forme suivante : e # Ceci est un commentaire dn: objectClass: objectClass: ... mkdir -p /etc/ldap/certificates Depuis la version 2.1 de OpenLDAP, les client vrie compl`tement les certie e cats des serveurs, ce qui va nous obliger ` creer un certicat pour le CA8 . a On distingue plusieurs tapes : e 1. Creation du certicat 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 dobtenir une rponse de locate. e > 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.8

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

17

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 un rpertoire (demoCA) contenant notamment le certiee e cat du CA (cacert.pem). 2. Cration du certicat du serveur LDAP (le common name doit correse 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] Loption -nodes empeche le chirement de la cl secr`te (il semblerait e e que OpenLDAP ne marche quavec des cls prives non chires). e e e Cet appel a gnr le chier newreq.pem qui contient la cl secrete RSA e ee e et une requte de signature de certicat par le CA. e 3. Signature du certicat du serveur par le CA : > /usr/lib/ssl/misc/CA.sh -sign Using configuration from /usr/lib/ssl/openssl.cnf 18

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 certicats, an quils soient utiliss par OpenLe 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 tre stocke sous plusieurs formats qui sont rsums dans e e e e le tableau 4 Type bdb dnssrv ldbm ldap meta monitor passwd perl shell sql Description Berkeley DB transactional backend DNS SRV backend Lightweight DBM backend Lightweight Directory Access Protocol (Proxy) backend Meta Directory backend Monitor backend Provides read-only access to passwd(5) Perl programmable backend Shell (external program) backend SQL programmable backend(source :[9])

Tab. 4 Formats de bases de donnes pour la base LDAP e On se propose ici dutiliser le format berkeley DB (BDB) > apt-get install libdb3 libdb3-dev (Il faudrait peut-tre tester la version 4) e 19

3.1.4

Installation de SASL

En cours dinvestigations... Pour le moment, une authentication simple scue rise par SSL nous para susante. e t 3.1.5 Choix de lespace de nommage

Cette tape consiste ` dnir comment les entres de lannuaire vont tre ore a e e e ganises, nommes et accdes. Lobjectif est de faciliter leur consultation et e e e e leur mise ` jour mais aussi de prvoir leur duplication, leur rpartition entre a e e plusieurs serveurs ou leur gestion par plusieurs personnes. Dans le cadre de la premi`re exprience grid5000 sur Grenoble,la racine choisie e e est dc=grid5000,dc=net. Les donnes sont organises selon le schma expos e e e e dans la gure 5, correspondant ` une conguration locale (voir 2.3.1). aldapidpot.clic.id

Grenoble

dc=grid5000,dc=net

ou=People(/etc/passwd)

ou=Group(/etc/group)

ou=Hosts(/etc/hosts)

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

Fig. 5 Architecture de la premi`re exprience Grid5000 sur Grenoble e e Dans un premier temps, les machines des autres site pourront tre congures e e pour venir complter leur conguration NSS avec les donnes LDAP prsentes e e e sur le serveur ldap-idpot.clic.id (voir 1) On verra dans la section 8 levolution envisage pour cette architecture. La e racine changera notamment pour dc=grid5000,dc=org

3.23.2.1

Installation de slapdCas dune installation sur une Debian stable

Si vous utilisez une debian stable, le package slapd (version 2.0.23 au moment o` ce document est crit) nest pas congur pour supporter TLS. u e e 9 du package et changer une r`gle de compilation. Il faudra rcuprer les sources e e e > > > > > cd ; mkdir slapd_stable-sources cd slapd_stable-sources apt-get source slapd apt-get build-dep slapd apt-get install libssl-dev9

Au 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 nonUS/contrib non-US/non-free puis lancer un apt-get update.

20

Pour activer SSL : > cd openldap2-2.0.23 puis diter le chier debian/rules en changeant --without-tls par --with-tls. e Il sut alors de compiler le package : ./debian/rules binary. Cette commande va crer les packages .deb ` installer : e a > 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 srie de questions : e 1. Directory initialization method : auto 2. Directory sux style : custom 3. Enter your sux : dc=grid5000,dc=net 4. Admin password : ne rien entrer, idem pour la vrication. Ainsi, un mot e de passe sera gnr automatiquement. Nous le changerons par la suite. e ee 5. Replicate to another LDAP server : No Attention : pour empcher la mise a jour automatique de ces packages via e le dpot Debian, il faut les marquer HOLD, par exemple avec dselect (en e appuyant sur = pour les packages en question) Cela signie aussi que vous devrez vous-mme vous assurer des alertes de scue e rit ! e 3.2.2 Autres cas

D`s la version testing, le package slapd (version 2.1.30) est correctement e congur. La seule manipulation ` faire est alors : e a > 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 mme, Debconf va vous poser une srie de questions : e e 1. DNS domain name : entrer grid5000.net an 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 linstallation termine, stopper le serveur LDAP par /etc/init.d/slapd stop ; e Les chiers de conguration seront localiss dans /etc/ldap/ e

21

4

Conguration du serveur LDAP

Cest le chier slapd.conf qui g`re la conguration du serveur. Le format e gnral de ce chier est le suivant : e e # Fichier /etc/ldap/slapd.conf #################################### # Section de configurations globales # Inclusion des schmas e # configuration globales des logs, de SSL etc... ############################ # Database #1 - Berkeley DB # Parametres de la base de donnes e # ACL de cette base ############################ # Database #2 - Berkeley DB # Param`tres de la base de donnes e e # ACL de cette base Il faut crer le rpertoire qui contiendra la base de donnes. Sous root : e e e > mkdir -p /var/lib/ldap/grid5000.net > chmod 700 /var/lib/ldap/grid5000.net Je vous conseille de garder une sauvegarde du chier fourni par dfaut : e > cp /etc/ldap/slapd.conf /etc/ldap/slapd.conf_DEB-orig Le chier complet pour cette prise en main est fournie dans annexe A. Les sections 4.1 et 4.2 dtaillent chaques parties de ce chier. Si vous souhaitez e utiliser directement le chier fourni sans lire ces explications, noubliez pas : 1. de congurer syslog pour grer les logs du serveur (4.1.2 page 23). e 2. de changer le mot de passe de ladministrateur de la base LDAP (directive rootpw : voir 4.2.1 page 25) 3. de passer directement ` la section 4.3 page 27 pour achever la conguration a du serveur.

4.14.1.1

Congurations globalesInclusion des schmas e

La premi`re chose ` dnir : quels schmas10 devra supporter le serveur ? . Le e a e e tableau 5 liste les schmas les plus utiles (et qui sont pour la plupart fournis e par dfaut). Ce document ne traite pas de la cration de nouveau schmas. e e e Les schemas sont placs par dfaut dans /etc/ldap/schema. e e On les ajoute par lappel include Typiquement, on aura donc les inclusions suivantes :10

Les schmas ont t introduit au 2.4.2, page 11 e ee

22

Schma e core.schema cosine.schema inetorgperson.schema java.schema misc.schema nis.schema openldap.schema automount.schema

Description LE chier minimal ` inclure. Dnit les attributs basiques a e de LDAPv3 confomment ` [16, 15] e a support des annuaires COSINE et X500 informations sur les utilisateurs etc... (cf [13]) stockage dobjets Java ou de rfrences JDNI (cf [12]) ee divers objets et attribut. ncessaire pour remplacer NIS par LDAP (cf[4] et 6) e divers objet utilis dans opneldap, pour informations. e ncessaire pour migrer des map automount ; schma non e e fourni par dfaut, voir 6.3 e

Tab. 5 Liste des principaux schmas disponibles e # 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, conguration dexecution

Il sagit l` de conguration la gestion des logs, des chiers de PID etc... a Niveau -1 0 1 2 4 8 16 32 64 128 256 512 1024 2048 Description enable all debugging no debugging trace function calls debug packet handling heavy trace debugging connection management print out packets sent and received search lter processing conguration le processing access control list processing stats log connections/operations/results stats log entries sent print communication with shell backends print entry parsing debugging(source :[2])

Tab. 6 Liste des niveaux de log

Le niveau des log est spci par la directive loglevel. Les valeurs possibles e e sont dnies dans le tableau 6. La combinaison de plusieurs Niveau se fait en e les ajoutant11 .11

Le niveau par dfaut est 296=256+32+8 e

23

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 chier /etc/log/slapd.log sera une aide prcieuse pour le dbuggage. e e Dautres param`tres contrlent lexcution : e o e pidfile : le chier ou sera stock le PID de slapd12 . e argsfile : les argument passs ` slapd. e a schemacheck : vrie la conformit de toutes les entres aux sche e e e mas supports. e 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 dinvestigations...] Typiquement sasl-host hostname sasl-realm string sasl-secprops propertie 4.1.4 Options SSL/TLS

SSL/TLS recquiert la gnration dun certicat valide pour le serveur, avec e e la cl prive associe. 3.1.2 a permis de creer le certicat pour lautorit de e e e e certication (CA) et le serveur. On trouve ainsi les directives : TLSCertificateFile : lemplacement du certicat du serveur. TLSCertificateKeyFile : lemplacement de la cl prive associe au certie e e catdu serveur. Ce chier ne doit tre lisible que par root ! ! ! e TLSCACertificateFile : lenplacement du certicat du CA qui a signer celui du serveur. Cette directive est obligatoire depuis OpenLDAP2.1 TLSCipherSuite : les specications des algorithmes de chirement. 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.pem12

Ce chier est principalement utilis par les script de shutdown e

24

4.1.5

Autres options de scurit e e

On distingue un certain nombre dautres directives de scurit : e e password-hash : dnit le schma de chirement des mots de passe par e e dfaut. Les valeurs possibles sont celles voques dans le 2.5.3 page 15, celle e e e par dfaut tant {SSHA} e e security permet de dnir un ssf13 (une valeur enti`re comprise entre minssf e e et maxssf, param`tres dnis dans 4.1.3) Par exemple : e e security update_sasl=128,update_tls=128 require : dnit les conditions gnrales dacc`s ` lannuaire. les principales e e e e a options disponibles sont none, authc (pas dacc`s anonyme, tout client doit e sauthentier), bind (requete bind obligatoire), LDAPv3 (le client doit utiliser la version 3 du protocole LDAP) allow/disallow : permet dactiver/dsactiver certaines fonctionnalits. Par e e exemple, allow bind_v2 autorise les requtes bind de clients LDAPv2. e Pour nous, on ne sintressera qu` la premi`re option : e a e # Misc security settings password-hash {SSHA}

4.2

Conguration des Bases de Donnes e

Un serveur LDAP est capable de grer plusieurs bases de donnes en mme e e e temps. On place les dtails de la conguration de chaque base apr`s les cone e gurations globales dans le chier slapd.conf (4 page 22). 4.2.1 Ajout dune base

Dans notre exemple, on ajoute au chier 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 prcise le format de base de donnes utilis (la liste e e e des formats possibles est donne dans le tableau 4, page 19) e suffix permet de dnir le DN racine gr e ee Le rootdn est tr`s important : il dnit lutilisateur autoris ` crer des e e e a e entres dans la base de donnes. Cet utilisateur devra tre ajout ` la base e e e ea (voir ?? page ??.) rootpw correspond au mot de passe de lutilisateur rootdn. Pour le gnrer, e e il sut dutiliser la commande suivante :13

security strength factor

25

> slappasswd New password: Re-enter new password: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxxxx La chaine renvoye peut alors tre ajouter ` la directive rootpw. e e a directory dnit le rpertoire ou sera physiquement stock la base de done e e nes, tandis que mode prcise les droits dacc`s des chiers crs dans ce e e e ee rpertoire. e On compl`te ensuite cette conguration par diverses optimisations : e 1. La gnration dindex qui permettent dacclerer les recherches. e e e Les types dindex supports sont les suivants : e approx (approximate) eq (equality) pres (presence) sub (substring) 2. le param`tre cachesize qui dnit le nombre dentres qui doivent tre e e e e gardes en mmoire (par dfaut 1000). e e e Dans notre cas, on utilisera : # Indexing options index objectClass index cn cachesize 2000 eq pres,eq

Note : voici un indexage optimis trouv sur un site a tester pour le e e cas de la migration de donnes NIS. Je le place ici en attendant de e le placer dans une partie ddie : e e index uid index index index index index index index index index index index index eq uidNumber gidNumber memberUid cn sn objectClass nisDomain nisNetgroupTriple memberNisNetgroup nisMapName amdMapName amdMapKey eq eq eq pres,eq,sub pres,eq,sub pres,eq eq pres,eq,sub pres,eq,sub eq eq eq

4.2.2

Conguration des ACLs

Les ACLs, notamment leur syntaxe, ont dj` t abordes dans le 2.5.2 page 14. e ae e e Elles prcisent pour la base de donnes en question qui a acc`s ` quoi. e e e a Voici celle utilise dans cet exemple : e 26

# 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 rle particulier du DN cn=nss,dc=grid5000,dc=net qui sera o utilis pour toutes les requtes de lecture (en particulier des mots de passe) e e dans la base (et ainsi viter une lecture anonyme du contenu de la base). On e verra un exemple de limpact de cette ACL au 5.4.

4.3

Insertions minimales requises dans la base de donnes e

A ce stade, la base de donnes est compl`tement vide et il convient dy intgrer e e e au minimum la dnition de la structure de la base et de lutilisateur adminise trateur et dun utilisateur spcial qui sera seul habilit ` lire les donnes de la e ea e base directement. La section 5 dtaillera les commandes que nous allons utiliser ici. Nous utilisee rons des chiers au format LDIF (voir 2.4.3, page 12) pour ces insertions. Les insertions de base sont incluses dans le chier 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

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. Noubliez pas de changer la valeur du champ userPassword pour cn= admin,dc=grid5000,dc=net : il doit correspondre ` lentre rootpw du a e chier /etc/ldap/slapd.conf. 2. Le mot de passe de lutilisateur spcial nest pas tr`s important car il e e gurera en clair (malheureusement) dans deux chiers de conguration au niveau client (voir 7.2.1 et 7.2.2). Cet utilisateur vite simplement e les requtes anonymes... e Pour ajouter ces donnes dans la base de donnes : e e > 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

Modication du script de dmarrage /etc/init.d/slapd e

Pour que le serveur puisse rpondre ` des requ`tes via une URL ldap e a e TODO : expliquer le format des urls et notamment ldaps, il est ncessaire de modier le script de dmarrage de slapd e e (il sagit du script /etc/init.d/slapd). La premi`re ide (qui semble la plus logique) serait de placer la ligne e e SLAPD_OPTIONS="-h ldap:/// ldaps:///" dans le chier /etc/default/slapd (qui est cens spcier les options du bie e naire slapd pour le script de dmarrage) mais lusage des guillemets pose proe bl`me. e 4.4.1 Cas Debian stable

Curieusement, mme si un chier /etc/default/slapd existe, les variables quil e spcie ne sont pas utilises dans le script de dmarrage ! e e e Toujours est il quon remplacera dans /etc/init.d/slapd --exec /usr/sbin/slapd dans la fonction start()par : --exec /usr/sbin/slapd -- -h ldap:/// ldaps:///. 28

4.4.2

Autres cas

TODO : dans les versions rcentes de slapd, le chier /etc/default/slapd e contient la ligne # Example usage: SLAPD_SERVICES="ldap:/// ldaps:///" a ajouter... On modie /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 impratif que toute requte arrivant sur le serveur soit ene e capsule dans un tunnel SSL, ce qui impose soit lutilisation durl ldaps:// e (conguration par dfaut des clients), soit lutilisation durl ldap:// avec lope tion -ZZ dans la requte (` viter) e ae TODO : inclure les modifs proposes dans la section suivante. Inclure tout cela e dans un chier propos en download... e

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 lutilisateur root mais par un utilisateur ddi, typiquement slapd. e e En terme de scurit, cest videmment nettement mieux car une attaque sur le e e e serveur LDAP fournira en gnral ` lattaquant un acc`s avec les droits utiliss e e a e e par le serveur. Cest dautant plus intressant si vous utilisez une Debian stable e et que, comme on la vu, vous devez vous charger personnellement des mises a ` jour de scurit ce qui laisse du temps pour lexploitation dattaques sur le e e serveur ! ->TODO dtailler les manips et les tester. e

4.6

Vrier que le serveur marche e

On lance le serveur : /etc/init.d/slapd start (penser ` jeter un coup doeil aux logs en live par un tail -f /var/log/slapd.log a sur une autre console par exemple). Les commandes suivantes14 , lances sous root, doivent rendre un rsultat sans e e erreur : ldapsearch -H "ldap://127.0.0.1" -b "dc=grid5000,dc=net" -x teste une requte non chire sur le port standard 389 e e ldapsearch -H "ldap://ldap-idpot.clic.id" -b "dc=grid5000,dc=net" -x -ZZ teste une requte chire sur le port standard 389. loption -ZZ montre e e que StartTLS marche correctement. Le nom spci dans lURL (ici, e e14

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

29

ldap-idpot.clic.id) doit correspondre ` celui utilis dans le certicat a e du serveur, donc au rsultat de la commande hostname -f (voir 3.1.2 e page 17) ldapsearch -H "ldaps://ldap-idpot.clic.id" -b "dc=grid5000,dc=net" -x teste une requte chire sur le port standard 636 (ldaps:// est la faon e e c de spcier lutilisation de SSL). Mme remarque que prcdemment pour e e e e le nom utilis dans lURL. e

30

55.1

Les principales commandes LDAPLancement du serveur slapdDescription Spcie la liste des URIs LDAP que le dmon slapd devra servir. e e Exemple typique : ldap:/// (LDAP sur port 389 ; par default), ldaps:/// (LDAP sur SSL on port 636) et ldapi:/// (LDAP sur IPC). Spcie lutilisateur et le groupe eectif pour slapd e

Options -h URI list

-u username -g groupname -d integer Dnit le niveau de log e -f lename Utiliser le chier de conguration spci e e Exemple : slapd -u slapd -h ldap :/// ldaps :///

Tab. 7 Principales options disponibles pour slapd Le serveur peut tre lanc de deux faons : e e c Soit directement (voir le tableau 7 pour les options possibles) : /usr/sbin/slapd On vrie que le serveur est bien lanc par ps -ef | grep slapd. e e ATTENTION : pour stopper proprement15 le serveur lanc de cette faon : e c > kill -INT cat /var/run/slapd.pid Soit via le script de dmarrage : /etc/init.d/slapd e Noter les modications apportes ` ce script au 4.4, page 28. e a

5.2

Commandes online/oineOnline ldapadd Description Ajout dentres dans la base LDAP e Utilitaire pour dumper le contenu de la base au format LDIF Utilitaire LDAP pour obtenir le chirement de mots de passe Changer le mot de passe dune entre LDAP e Suppression dune entre LDAP e Modication dune entre e Recherche dans la base LDAP Renommage dune entre LDAP e

Oine slapadd slapcat slappasswd

ldappasswd ldapdelete ldapmodify ldapsearch ldapmodrdn

Tab. 8 Principales commandes online/oine On distingue deux modes de fonctionnement : 1. mthode oine (sans passer par le serveur LDAP) : Dans ce cas, on utie lisera la commande slapadd. Ces commandes sont ncessairement tapes e e15 Shutting down slapd by more drastic means, such as kill -9, can result in data corruption and should be avoided at all costs.

31

sur le serveur LDAP. 2. mthode online (en passant par le serveur LDAP) : commande ldap* e (comme ldapadd, ldapmodify etc...). Ces commandes peuvent tres utie lises indirement depuis le serveur ou un client LDAP16 e e Le tableau 8 fournit les principales commandes disponibles, selon quelles soient online ou oine. La plupart des commandes online ont des options communes (qui sont en fait les plus utilises) qui sont dtailles dans le tableau 9. e e e Options -D binddn -f lename -H URI -n -v -w password -W -x -Z[Z] -d integer Description spcie le DN utilis pour la connexion au serveur LDAP e e spcie le chier LDIF contenant les entres ` utiliser pour lope e a e ration Dnit lURI LDAP ` utiliser pour la requete de connexion e a ne pas eectuer lopration, juste dire ce qui aurait t fait e ee mode verbeux spcie le mot de passe du DN utilis pour la connexion e e demande un prompt pour entrer le mot de passe du DN utilis e pour la connexion Active la simple authentication et non SASL. en pratique, ` ne pas utiliser sans SSL (voir 2.5.1 page 13) a Gn`re une requte StartTLS. lutilisation de -ZZ impose que cette e e e requte soit russie. e e spcie les informations de dbuggage ` acher (voir tableau 6 e e a page 23)

Tab. 9 Principales options communes ` ldapsearch, ldapadd, ldapdelete, ldapmodify aet ldapmodrdn

5.3

Ajouter des entres dans la base LDAP e

Pour ajouter des entres dans la base : e 1. crer un chier au format LDIF (voir 2.4.3 page 12), par exemple toto_add.ldif, e qui contiendra les entres ` ajouter. e a 2. le plus simple ensuite est dutiliser la mthode oine pour ajouter le e contenu du chier dans la base (cela suppose que le serveur est arrt) : ee slapadd -v -l toto_add.ldif loption -v fournit des infos supplmentaires. e Pour la mthode online (si le serveur tourne) : e (a) Dnissez un alias pour viter de retaper toujours les mmes ope e e tions17 : alias MyLdapadd=ldapadd -W -x -H "ldaps://" -D "cn=admin,dc=grid5000,dc=net"16 sous rserve videmment que celui-ci soit correctement install et congur : voir pour e e e e cela la section 7 page 42 17 Il faut vraiment toutes ces options ! En particulier, sans loption -W, lauthentication de ladminitrateur echouera forcment et la requte deviendra anonyme. Or, un utilisateur e e anonyme na pas les droits dcriture dans la base dapr`s les ACLs de slapd.conf (4.2.2) et e e ajout echouera. Voir le tableau 9 pour bien comprendre ` quoi chaque option correspond a

32

(b) MyLdapadd -v -f toto_add.ldif pour ajouter le contenu du chier a ` la base. A noter lexistence de loption -c de ldapadd qui permet de continuer malgr les erreurs. e Un exemple dajout a dj` t prsent au 4.3 page 27.Sinon, voici le contenu eaee e e du chier toto_add.ldif utilis en exemple : e > cat toto_add.ldif ## Build the toto ou. dn: ou=toto,dc=grid5000,dc=net ou: toto objectClass: organizationalUnit En cas de probl`mes lors de lajout simultan de plusieurs entres (par exemple e e e avec des messages derreurs comme ldap_add: Invalid syntax et/ou additional info: value contains invalid data), assurez vous que les sauts de lignes ne comportent pas despace au dbut de la ligne18 et que vous incluez e les 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 spciques de ldapsearch sont fournies dans le tableau 10 e le ltre de recherche doit tre reprsent par une chaine au format spci e e e e e dans [5]. Par dfaut, le ltre utilis est (objectClass=*). e e si une ou plusieurs entres sont trouves, seuls les attributs attrs (tous par e e dfaut) seront achs sur la sortie standard. e e Options -b basedn -l limit -L-LL-LLL -s [sub|base|one] Description dnit le DN de base pour la recherche e dnit la dure limite (en seconde) pour la recherche e e le rsultat est fournit au format LDIFv1, -LL supprime les come mentaires, comme -LLL qui supprime aussi les infos de version dnit le scope de la recherche. e sub (dfaut) : recherche dans le sous-arbre de la base e base : recherche dans les premier ls de la base one : recherche dans lentre de base uniquement e les rsultats sont tri selon les valeurs de lattribut e e Spcie le nombre maximal dentres ` renvoy e e a e

-S attribut -z limit

Tab. 10 Principales options spciques de ldapsearch e Voici quelques exemples dutilisation, qui illustrent galement le fonctionnement e des ACLs :18

utiliser loption set list de vi pour le voir

33

Exemple 1 Voir tout ce que la base contient : ldapsearch -x -b "dc=grid5000,dc=net", identique ` : ldapsearch -x -b "dc=grid5000,dc=net" "(objectclass=*)" a Exemple 2 Rechercher lorganizationalUnit toto : ldapsearch -x -b "dc=grid5000,dc=net" "(ou=toto)" Exemple 3 idem que lexemple 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 chier de conguration de lannexe A, les commandes prcdentes ne renverront aucun e e rsultat ! e En eet, avec ces ACLs, comparer les rsultats des commandes suivantes19 : e >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: 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 dune description ## Change the value of attribute description for o=tata dn: o=tata,ou=toto,dc=grid5000,dc=net changetype: modify replace: description description: jai 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

# adds to grid5000 hierarchy newsuperior: dc=grid5000,dc=net On excute ce chier par lappel MyLdapmodify -f toto_modify.ldif e Remarques : pour supprimer une entre, on aurait aussi pu utiliser la commande : e ldapdelete [standard_options] [-r] Les options standards sont celles spcies dans le tableau 9 page 32. e e Loption -r prcise que la suppression est rcursive (tous les noeuds ls de e e e seront aussi supprims). pour toutes les modications relatives au DN et au RDN, on peut aussi utiliser la commande : ldapmodrdn [standard_options] [-c] [-r] [-s superior_node] Loption -c permet de continuer malgr les erreurs. e -r permet de supprimer lancienne entre (qui est conserve par dfaut). e e e Enn, loption -s permet de prciser lentre sous laquelle se greera cette e e nouvelle entre. e

5.6

Quelques outils graphiques

On laura compris, la manipulation de chiers LDIF nest pas forcment aise. e e Voici quelques pointeurs vers des outils graphiques (pas encore tests) : e GQ (http://biot.com/gq/) Java LDAP Browser/Editor (http://www.iit.edu/~gawojar/ldap/) Softerra LDAP Browser (http://www.ldapbrowser.com/)

36

6

Gestion des chiers de congurations par LDAP

A ce stade du tutorial, nous disposons dun serveur oprationnel que nous ine terrogeons de mani`re scurise. Mais la base de donnes LDAP est vide. e e e e Dans le cadre exprimental de ce document, nous souhaitons dleguer la gese e tion des comptes machines et de lauthentication des utilisateurs au service dannuaire LDAP. Cela suppose en particulier que la base LDAP puisse fournir le contenu de chiers de congurations syst`mes tels que /etc/passwd, /etc/shadow, /etc/ e group, /etc/hosts ou encore /etc/auto.home (ce dernier chier localisant pour autofs les points de montages des rpertoires home de chaque utilisateur). e Sur un rseau ouvert, on trouve en gnral un ou plusieurs serveurs NIS[7] qui e e e stockent et diusent ces chiers de conguration aux clients du rseau. Cette e solution prsente ce nombreux avantages : e centralisation les informations (ce qui en facilite la maintenance) relative transparence dutilisation cot client. e Cependant, NIS ne passe pas ` lchelle et la solution la plus adapte et la plus a e e robuste pour remplacer NIS nous a sembler tre LDAP. e Nous allons voir dans cette section comment migrer le contenu des chiers de conguration syst`mes au format LDIF pour les intgrer dans la base LDAP e e selon un schma standard. Nous verrons ensuite dans la section 7, page 42) linse tallation et la conguration des machines clientes pour une gestion transparente de ces chiers.

6.1

Les outils de migration des chiers de conguration

On utilise les scripts de migrations dvelopps par www.padl.com. e e 6.1.1 Installation

Cas Debian stable : Le package Debian stable (version 40-1) est bugg et il est donc conseill : e e 1. soit dinstaller la version testing du package (version 45-1) : apt-get install -t testing migrationtools 2. soit de rcuprer directement les script ` ladresse http://www.padl. e e a com/download/MigrationTools.tgz (version 45 au moment o` ce dou cument est crit). Par cohrence avec la suite, nous supposons quune e e fois larchive dcompresse, les scripts quelle contient seront placs au e e e mme endroit que ceux du package (/usr/share/migrationtools/). e Autres cas : apt-get install migrationtools Les scripts seront placs dans le rpertoire /usr/share/migrationtools e e TODO : voir pour les autres distrib 6.1.2 Conguration

Dans le chier /etc/migrationtools/migrate_common.ph, on modie certaines variables : 37

# Default DNS domain $DEFAULT_MAIL_DOMAIN = "grid5000.net"; # Default base $DEFAULT_BASE = "dc=grid5000,dc=net"; La variable $DEFAULT BASE correspond ` la base de lannuaire o` sera stock a u e le contenu des chiers. La valeur ci-dessus correspond ` larchitecture expose a e dans la gure 5, page 20. Dans le cadre de la seconde experimentation prsente e e au 8.2, il faudra placer cette variable ` la valeur o=,dc=grid5000, a dc=net. Dans les outils de migration, il y a plusieurs scripts permettant de transformer chaque chier syst`me au format LDIF. Les informations de chaque chier sont e sauves dans des OrganizationalUnits (OU) direntes20 : e e /etc/fstab /etc/hosts /etc/passwd et /etc/shadow /etc/group /etc/protocols /etc/rpc /etc/services /etc/networks netgroups ou=Mounts ou=Hosts ou=People ou=Group ou=Protocols ou=Rpc ou=Services ou=Networks ou=Netgroups

Il faut crer ces OU sur le serveur. Pour cela, utiliser le script migrate_base.pl : e cd /usr/share/migrationtools ./migrate_base.pl > /tmp/init_base_migration.ldif Il faut supprimer la premi`re entre du chier /tmp/init_base_migration.ldif e e (qui crer lentre correspondant ` la base). Ensuite, retirer ventuellement les e e a e entres dont vous ne vous servirez pas. On obtient dans notre cas : e > 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: organizationalUnit20

on verra au 6.3 o` les chiers de conguration de autofs seront grs u ee

38

Rapatrier ventuellement ce chier sur votre serveur LDAP et ajouter son e contenu ` la base : a # /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.26.2.1

Migration les chier passwd, group et hostsRecupration du contenu des tables NIS e

En eet, si ce sont les chiers diuss par NIS que vous souhaitez migrer (comme e cest le cas dans le cadre de cette exprimentation), il faut dj` rcuprer le e ea e e contenu de ces chiers. Pour cela, on excute les commandes suivantes sur la e machine cliente congure avec NIS21 : e ypcat passwd > /tmp/nis_passwd ypcat group > /tmp/nis-group ypcat hosts > /tmp/nis_hosts et on transf`re ces chiers sur le serveur via scp : e scp /tmp/nis_* root@:/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 dutilisation des scripts est le suivant : migrate_ .ldif Vrier que les chiers gnrs e e ee ont un format correct (cest comme ca que jai dtect le bug des packages e e stables) 6.2.3 Insertion dans la base LDAP

En supposant que le serveur soit toujours arrt : ee 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 ! Loption -c permet de continuer malgr les erreurs, qui sont dont e plus diciles ` tracer. a21

il ny a avait pas dans notre cas de map shadow

39

6.3

Migration des chiers de conguration dautomount

automount est un dmon qui automatise le montage (et le dmontage) de e e certains syst`mes de chiers. Si le syst`me de chiers nest pas mont (par e e e exemple, un CD), et quun utilisateur essaye dy accder, il sera automatiquee ment (re)mont (en particulier, lutilisateur en question naura pas a utiliser la e commande mount). autofs contrle les oprations du dmon automount par le biais de chiers de o e e conguration, constitus du chier /etc/auto.master, qui contient les points e de montage et dun chier par point de montage (typiquement /etc/auto.misc ou /etc/auto.home), dtaillant les options syst`mes de celui-ci. e e Pour plus de dtails, voir [14]. e Dans le cadre de notre exprience, le serveur NIS diuse une map, /etc/auto. e home, qui permettait de monter automatiquement le rpertoire home de chaque e utilisateur. Cette section montre comment intgrer le contenu de ces chiers dans une base e LDAP. Nous supposerons que le chier principal /etc/auto.master restera local et propre ` chaque machine cliente (nous verrons en 7.3 les modications a quil 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 schma automount.schema et la e librairie lookup_ldap.so Attention ! lorsque jai install le package, le chier automount.schema na e pas t install. Le bug a t signal mais en attendant, le contenu de ce chier ee e ee e est fourni dans lannexe E page 61. Il sut de copier ce chier dans /etc/ldap/schema/automount.schema. Ensuite, on dcommente dans le chier de conguration slapd.conf (qui a t e ee fourni en annexe A) la ligne : include /etc/ldap/schema/automount.schema 6.3.2 Migration du chier /etc/auto.home

En regardant les tables montes avec NIS initialement : e > 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 chier auto.home tait rcupr par NIS. On rcup`re son e e ee e e contenu :

40

> 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 ` traiter un mapping gnrique a e e (le format de ce chier nest pas de la forme classique (voir man 5 autofs) : key [-options] location La dmarche pour ajouter ce chier dans la base LDAP a t la suivante : e ee 1. Cration du chier des entres LDIF a la main (ne PAS utiliser les scripts e e ` de 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 lavant-derni`re ligne) e TODO : donner exemple dans le cas dun mapping classique. 2. Ajout de ce chier dans la base LDAP : slapadd -v -l /tmp/auto.home.ldif 3. Cot client, modication du chier /etc/auto.master comme expos e e au 7.3.

41

7

Installation du client LDAP

A ce niveau, nous disposons dun serveur LDAP qui fonctionne et qui contient toutes les informations dont les machines clientes auront besoin. Cette section dtaille linstallation dun poste client et se dcoupe en plusieurs e e parties : 1. installation et conguration de base pour permettre linterrogation du serveur LDAP ` distance (7.1) a 2. installation et conguration de lauthentication des utilisateurs via LDAP. Sous Linux, cette authentication se fait via deux outils que sont NSS (Name Service Switch) et PAM (Pluggable Authentication Module). (7.2) 3. modication de auto.master pour prendre en compte la gestion de certaines maps autofs par le serveur LDAP (7.3). A lissue de ces trois tapes, la machine cliente sera compl`tement congure et e e e fonctionnelle.

7.17.1.1

Initialisation et conguration de base du clientCas dune installation sur une Debian stable

Comme pour linstallation du serveur (voir 3.2.1), il y a normalement une petite manipulation ` faire pour que SSL soit support. a e Cependant, malgr toutes mes tentatives, je nai pas russi ` faire fonctionner e e a SSL/TLS avec le package stable ldap-utils (alors que javais bien reconstruit le package avec loption --with-tls). Il semble en eet que cette version (2.0.236.3) de ldap-utils ne g`re pas les options SSL (elle ne gurent mme pas dans e e le man). Cest pourquoi la seule solution (facilitant aussi le travail de mise ` jour aua tomatique des package au niveau client) est de forcer linstallation en testing (avec tous les inconvnients que cela comporte, notamment la mise ` jour de la e a libc6) : > apt-get install -t testing ldap-utils > apt-get install openssl 7.1.2 Autres cas

Il ny a pas de probl`mes (SSL est support directement) et il sut de taper : e e apt-get install ldap-utils openssl 7.1.3 Dans tous les cas....

Le chier de conguration, /etc/ldap/ldap.conf est fourni dans lannexe B page 57. Faites une sauvegarde de ce chier avant de lcraser : e cp /etc/ldap/ldap.conf /etc/ldap/ldap.conf_DEB-orig Voici les principales options disponibles : BASE le DN de base ` utiliser pour les recherches. a Ici, dc=grid5000,dc=net 42

URI lurl permettant permttant dinterroger le serveur. Le nom du serveur spci dans lurl doit tre connu sans passer par le DNS e e e du rseau22 . On prcisera donc soit une adresse IP, soit un nom dont e e la correspondance en adresse IP gure dans le chier local /etc/hosts. Dans notre cas, un aura : URI ldaps://ldap-idpot.clic.id Ainsi, toutes les requtes clientes soient encapsules dans un tunnel SSL. e e SIZELIMIT nombre maximal de rponses aux requtes autoris. e e e (0 pour quil ny ait pas de limite) TIMELIMIT dlai maximal de recherche. e BINDDN Contrairement ` ce quon pourrait penser, cette directive a nest pas supporte par ldap.conf23 ! Cest l` quon devrait prciser e a e que ce sera le DN cn=nss,dc=grid5000,dc=net qui aura acc`s ` la base e a (cest lutilisateur spcial cr au 4.3 ` cet eet). De toute faon, la e ee a c directive BINDPW (qui prcise le mot de passe de binddn) nest supporte e e ni par ldap.conf, ni par .ldaprc. e TLS CACERT : spcie le chier qui contient tous les certicats des CA dans lesquel le client aura conance. Dans notre cas, on aura : TLS_CACERT /etc/ldap/CA-cert.pem Noubliez pas de copier le certicat du CA et le placer dans /etc/ldap/CA-cert.pem 7.1.4 Vrier que ca marche e

1. On vrie dj` quun tunnel SSL peut eectivement tre mis en place avec e ea e le serveur : openssl s_client -connect :636 -showcerts \ -state -CAfile /etc/ldap/CA-cert.pem (quitter avec un CTRL-C) Vous devez avoir ` la n un message du style a Verify return code: 0 (ok) 2. ldapsearch -x ne doit pas retourner derreur (mais ne doit pas renvoyer dentres compte tenu des ACLs) e 3. ldapsearch -x -D "cn=nss,dc=grid5000,dc=net" -W doit vous renvoyer toutes les entres de la base e 4. on vrie enn que les communications sont bien chires. Pour cela, on e e ouvre deux consoles sur la machine cliente. (a) test non chir : sur la premi`re console : e e tcpdump -l -X port 389 | grep dc Et sur la seconde : ldapsearch -x -H "ldap://". Si vous revenez sur la premi`re console, vous verrez alors : e22 23

pour viter quun souci au niveau DNS empche lacc`s au serveur e e e elle peut seulement tre utilise dans le chier .ldaprc propre ` chaque utilisateur e e a

43

tcpdump: listening on eth0 0x0030 [...] ....07...c2..dc= 0x0040 [...] grid5000,dc=net. Il y a donc bien une partie en texte clair. (b) test chir : tout est fait pour que, par dfaut, les communications e e entre le client et le serveur soient chires. On le vrie en lancant e e sur la premi`re console : e tcpdump -X port 636 et sur la seconde, ldapsearch -x. Cette fois ci, parmi toutes les informations renvoyes, on vrie quil e e ny a plus de texte clair qui apparait. On peut renouveler cette exprience en utilisant une commande renvoyant e plus de rsultats, comme : e ldapsearch -x -D "cn=nss,dc=grid5000,dc=net" -W (on ajoute loption -H "ldap://" pour passer en mode non chir). e Remarque : Il est peut-tre bon de rappeler galement que pratiquement toutes e e les commandes LDAP bncie de loption -d qui spcie le niveau des e e e informations des informations de debuggage (voir 6 page 23). Cela peut tre e utile pour le debuggage.

7.2

Authentication des utilisateurs via LDAP

lauthentication syst`me par LDAP permet dunier les bases de donnes utilie e sateur. De plus le syst`me de rpartition et de rplication procure une meilleure e e e tolrance aux pannes. Enn dautres services peuvent tirer partie de cette base e commune dauthentication. Sous Linux, lauthentication dun utilisateur utilise deux composants : 1. le syst`me PAM (Pluggable Authentication Module, voir 7.2.2) qui pere met lintgration transparente de diverses technologies dauthentication e comme le standard UNIX (utilisant crypt), RSA, DCE, LDAP etc... sur des services du syt`me comme login, passwd, rlogin, su, ftp, ssh etc. sans e aucune modication sur ces services. Si au dpart PAM ntait implment que sous Solaris, cest aujourdhui e e e e un standard dauthentication sur de nombreuses distributions Linux (Redhat, Debian etc...) PAM fournit une API par laquelle les requtes e dauthentitication sont mappes sur des actions spciques aux technoe e logies (et qui sont implmentes dans des modules PAM). Ce mapping e e est fait par les chiers de conguration PAM dans lesquels on spcie pour e chaque service les mcanismes dauthentication utilisables. e e e e Dans notre cas, le module pam ldap, implment dans la librairie partage pam_ldap.so, permet aux utilisateurs et aux groupes de sauthentier a ` laide du service LDAP. Il sura de le prciser dans les chiers de e conguration PAM. 44

2. le syst`me NSS (Name Service Switch, voir 7.2.1) : une fois lutilisateur e authenti, de nombreuses applications ont toujours besoin daccder aux e e informations relatives ` cet utilisateur. Cette information est traditiona nellement contenue dans des chiers textes (/etc/passwd, /etc/shadow, /etc/group etc... Mais elle peuvent galement tre fournies par un service e e de nommage (comme NIS ou DNS). Lorsquun nouveau nouveau service de nommage (comme LDAP) est introduit, il peut tre implment soit dans une librairie C (comme cest le e e e cas pour NIS ou DNS) ou au sein de lapplication qui utilisera ce service de nommage. Mais cela peut tre viter en utilisant une API commune e e et gnrale ddie au service de nommage qui ralise une couche interme e e e e e diaire entre une application et un ensemble de services de nommage. Cest ainsi que fut implment le Name Service Switch qui permet dobtenir e e des informations de nombreux services de nommage ` travers une API a commune. NSS utilise un chier de conguration /etc/nsswith.conf dans lequel sont prciss les services de nommage ` utiliser pour tel ou tel e e a information (comme la base passwd, shadow, group ou encore hosts...) Ainsi, ` partir de la librairie partag nss_ldap.so, il est possible de ra e e cuprer ces informations en utilisant LDAP. e On commencera par linstallation de nss ldap car cest celle qui est la moins dangeureuse des deux : de mauvaises manipulations avec PAM peuvent casser le syst`me complet ! ! e 7.2.1 NSS (Name Service Switch) et LDAP

Cas Debian stable Comme dhabitude, on peut faire la manip pour permettre lutilisation 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 --> jai eu un probl`me e (puis normalement) > dpkg -i libnss-ldap_186-1_i386.deb Mais je nai pas russi ` lancer la compilation (un probl`me dans le script rules e a e 24 ). Et surtout, on a dj` forc linstallation de ldap-utils en tesapparemment ea e ting, alors autant continuer, ca facilitera la mise ` jour : a apt-get install -t testing libnss-ldapmake : dh_testdir : Command not found Ce probl`me se rsoud en installant le package debhelper mais on a alors un autre erreur : e e configure : error : could not locate . Je nai pas cherch plus loin (mais je e suppose quil faut installer libldap2-devel)...24

45

Autres cas Un simple apt-get install libnss-ldap sura. Debconf va vous poser une srie de questions : e 1. LDAP server host adress : mettez le nom du serveur LDAP (qui gure dans son certicat 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. le permission : 0600 6. unprivileged database user : cn=nss,dc=grid5000,dc=net 7. password for database login account : entrer celui correspondant au DN cn=nss,dc=grid5000,dc=net. Conguration de libnss-ldap Le chier de conguration est /etc/libnss-ldap.conf. Faites en une sauvegarde : > cp /etc/libnss-ldap.conf /etc/libnss-ldap.conf.old il convient dy ajouter la ligne uri ldaps://. Pour les plus presss, ce chier est fourni en annexe C.1 page 58 (penser ` y mettre le mot e a de passe du DN cn=nss,dc=grid5000,dc=net et ` y spcier votre serveur). a e Il est primordial que ce chier de conguration bncie de droits e e dacc`s 0600 ! ! ! (il contient le mot de passe en clair du DN spcial nss...) e e Ensuite, on retouche au chier de NSS /etc/nsswitch.conf. On commence par une copie de sauvegarde : > cp /etc/nsswitch.conf /etc/nsswitch.conf.old Et on transforme les lignes suivantes : passwd: group: shadow: hosts: 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 presss, le chier /etc/nsswitch.conf est fourni en e annexe C.2 page 58. Pour vrier que ca marche... e lancer le serveur : /etc/init.d/slapd restart (sur votre serveur) getent passwd sur le poste client devrait vous renvoy le contenu de /etc/ e passwd complter avec les entres du serveur LDAP (il faut peut-etre enlever e e lentre + : : : : : : de /etc/passwd etc... pour que ca marche correctement.) e 46 compat compat compat files dns

de faon similaire, tester les appels getent group et getent shadow (venc e tuellement) et getent hosts. Vous pouvez normalement vous logguer directement comme utilisateur non local mais gr par les maps LDAP (bien que vous naurez pas de home ee mont) e Optimisations de recherches possibles... Comme les users et les groups sont stocks dans des OU (OrganizationalUnit) direntes, on peut optimiser e e les recherches en ajoutant dans /etc/libnss-ldap.conf (cest dj` fait dans ea le chier 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-tre bon de le rpeter : de mauvaises manipulations avec PAM e e peuvent casser le syst`me complet ! ! e Note sur les changements de mots de passe. On peut envisager deux mode de fonctionnement pour les postes clients, chacun ayant un impact sur la scurit e e globale du syst`me dirent : e e 1. comportement similaire ` une gestion locale, o` le root local de chaque a u machine peut notamment changer les mots de passe. Pour cela, il faut que le chier de conguration prcise le DN ayant lacc`s en criture sur la e e e base LDAP (directive rootbinddn) et surtout son mot de passe (qui sera en pratique stock dans le chier /etc/ldap.secret). Malheureusement, e ce mot de passe (comme celui gurant dans la directive bindpw) ne peut gurer quen clair (et non sous forme hache). Cela dnit bien videmment e e e un considrable probl`me de scurit puisque malgr un droit dacc`s qui e e e e e e doit tre restreint ` lutilisateur root pour le chier /etc/ldap.secret e a (droit 0600), tout utilisateur ayant les droits root sur une machine cliente (ce que tout utilisateur peut faire tr`s facilement ` partir de nimporte e a quel CD bootable par exemple (cf par exemple la distribution Knoppix)) aura acc`s au mot de passe root de la base LDAP, pourra modier les ene tres etc... Cela est videmment inacceptable dans le cadre dun cluster, e e et notamment dans le cadre du projet Grid5000 o` il convient de limiter u au maximum les droits des clients sur la base LDAP. 2. conguration sans rel root local : dans ce cas, tout utilisateur local (y e compris root) ne pourra changer dentres de la base LDAP (en particulier e les mots de passe grs par LDAP). Ainsi, il ny aura pas besoin de stocker ee le 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

LDAP via ladministrateur (physique) de cette machine. Cest la solution que nous avons retenus pour le projet Grid5000. Installation Comme toujours, mme si vous tes en Debian stable, je vous e e conseille de forcer linstall en testing : apt-get install -t testing libpam-ldap. Dans les autres cas, un simple apt-get install libpam-ldap sura. Debconf va vous poser une srie de questions : e 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 Conguration Le chier de conguration est /etc/pam_ldap.conf. Il est tr`s similaire ` /etc/libnss-ldap.conf (et utilise quasiment les mme direce a e tives) Faites une copie de sauvegarde : cp /etc/pam_ldap.conf /etc/pam_ldap.conf.old Ce chier est galement fourni en annexe D.1 page 59. e Maintenant que le module PAM LDAP est install, il faut linclure dans les e processus PAM. Nous allons voir dans le paragraphe qui suit les modications a apporter pour permttre le login via ssh. Remarque : La plupart des applications compatibles PAM sont grs via des ee chiers de conguration qui leurs sont propres. Sous Debian, ces chiers sont stocks dans /etc/pam.d/. e Conguration de /etc/pam.d/ssh Le chier de conguration PAM pour ssh est /etc/pam.d/ssh. Il est fourni en annexe D.2 page 59. Par rapport au chier original, les changements suivants ont t opr : ee ee addition des lignes contenant pam_ldap.so reordonnancement des lignes auth (puisque d`s que pam ldap authentie un e utilisateur, aucune autre ligne auth ne sera utilis compte tenu de lattribut e sucient (on ne peut pas utiliser lattribut required ici puisquon veut utiliser le module pam unix en cas dchec dauthentication par pam ldap, ce e qui peut se produire si le serveur LDAP est inaccessible). la section session doit galement tre rordonne. e e e e Il est important ensuite de relancer le serveur ssh ! ! ! ! Conguration de /etc/pam.d/su Un autre exemple est celui de la conguration de su. /etc/pam.d/su est lui aussi fourni en annexe D.3 page 60. Autres congurations Il faut retoucher aux chiers /etc/pam.d/common-* 48

Note ` propos de la distinction des chiers de conguration On peut a se demander pourquoi Debian a choisi de distinguer les chiers de conguration ldap.conf, libnss-ldap.conf et pam_ldap.conf (ce nest pas le cas il semblerait sous RedHat par exemple). La meilleure rponse que lon puisse apporter est quon peut tr`s bien avoir plue e sieurs serveur LDAP ayant chacun un rle prcis (un serveur dauthentication, o e un annuaire utilisateur etc...). Sparer les chier assure la modularit dans les e e choix de conguration.

7.3

Conguration automount : le chier auto.master

On a vu au 6.3 comment exporter la map auto.home initialement gre par ee NIS. Maintenant, il faut prciser a lautomount des machines clientes que cette e map est maintenant gre par LDAP. Pour cela, on eectue les modications ee suivantes au chier /etc/auto.master (on a comment lancienne ligne) : e > 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 viter que chaque machine interroge le serveur LDAP chaque fois quune e commande ls -l est eectue, il est prfrable de congurer les stations de e ee travail pour placer des informations utilisateur en cache. Tant que des donnes en cache sont fra e ches, la station de travail utilisera ce cache au lieu dinterroger ` nouveau le serveur LDAP. Cette tche est ralise a a e e en pratique par le name server caching daemon (nscd). Pour linstallation : apt-get install nscd Le chier de conguration pour nscd est/etc/nscd.conf : enable-cache positive-time-to-live negative-time-to-live suggested-size check-files passwd passwd passwd passwd passwd yes 600 20 211 yes

49

88.1

Evolution au sein du projet Grid5000Premi`re experimentation : conguration locale eContexte

8.1.1

Ce exprience sest droule au sein du cluster IDPOT de Grenoble. e e e Dans cette prem`re exprience, la racine choisie est dc=grid5000,dc=net. Les e e donnes sont organises selon le schma expos dans la gure 6, correspondant e e e e a ` une conguration locale (voir 2.3.1).ldapidpot.clic.id

Grenoble

dc=grid5000,dc=net

ou=People(/etc/passwd)

ou=Group(/etc/group)

ou=Hosts(/etc/hosts)

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

Fig. 6 Architecture de la premi`re exprience Grid5000 sur Grenoble e e

8.1.2

Description

Sur le serveur LDAP (ldap-idpot.clic.id) les anciennes tables NIS compltant les utilisateurs (/etc/passwd), les groupes (/etc/group), le chier e /etc/hosts ou grant les tables automount (auto.home) ont t exportes. e ee e Une machine cliente typique (idpot8.clic.id) a galement t congure. e ee e Toutes ce qui y tait initialement gr par NIS lest maintenant par le serveur e ee LDAP. Cot utilisateur, tout est transparent : il se logue comme dhabitude sur e cette machine avec son login/passwd fournit lors de la cration de son compte e sur le cluster et son home est mont automatiquement ` sa connexion. e a Les communications LDAP entre la machine cliente idpot8 et le serveur LDAP, en particulier lors dune ouverture de session par un utilisateur, sont scurises e e par une connexion TLS/SSL (utilisant le port par dfaut (636)). e 8.1.3 Contribution des autres sites

(une fois le pb de /etc/ldap.secret rgl) e e Les autres sites peuvent ventuellement congurer leurs machines clientes pour e venir utiliser les donnes du serveur LDAP ldap-idpot.clic.id an de come plter leurs propres entres NIS. e e Pour cela, il leur faut : 1. tester laccessibilit au serveur ldap-idpot.clic.id (contacter Julien. e [email protected] en cas de probl`me) e 2. installer les packages client ldap et les congurer (voir 7) 3. sauvegarder le chier /etc/nsswitch.conf (en \etc/nsswitch.conf.withoutDALP par exemple) 4. lui apporter les modications suivantes : 50

passwd: group: shadow: hosts: en passwd: shadow: group: hosts:

compat compat compat files dns

files files files files

nis nis nis nis

ldap ldap ldap ldap dns

5. (eventuellement) gerer auto.home via LDAP : voir ?? 6. Vrier que cest bien pris en compte cot utilisateur : getent passwd e e

8.2

Seconde exprimentation : utilisation des referrals e

Dans cette exprience, il sagit dexperimenter une architecture totalement hie e rarchique (voir gure 7).Referralrootldap.grid5000.org

dc=grid5000,dc=org o=Nice o=Grenoble

ldapnice.grid5000.org Nice Grenoble

ldapgrenoble.grid5000.org

o=Nice,dc=grid5000,dc=net ou=People(/etc/passwd)

o=Grenoble,dc=grid5000,dc=net ou=auto.home ou=People(/etc/passwd)

ou=Group(/etc/group)

ou=Hosts(/etc/hosts)

(/etc/auto.home)

ou=Group(/etc/group)

ou=Hosts(/etc/hosts)

(/etc/auto.home)

ou=auto.home

Fig. 7 Architecture envisage de la Seconde exprience Grid5000 - mod`le distribu e e e e totalement hirarchique e Cette exprience est en cours. e Chaque site g`re donc son propre domaine et est congur pour renvoyer un e e referral vers un serveur racine sil ne sait pas rpondre. e Plusieurs probl`mes ` rsoudre : e a e 1. le client doit remettre une requete apr`s rception dun referral. Or pour e e e viter tout goulet detranglement au niveau du serveur racine, les clients e dun site A seront congurer pour intrroger le serveur associ au site A. e e Sil remet sa requete (par exemple pour trouver le password de lutilie sateur svarrett), le serveur racine recherche dans tous ses ls ? Car on 51

pourrait peut-tre envisager de lempecher dinterroger le serveur du site e A puisque a priori, il na pas su rpondre ? e 2. Y a t il une conguration optimise pour le client (cf directives nss_* de e ldap.conf ? 3. comment seectue la recherche dun mot de passe dans larbre dans la version standard de nss ldap ? Je mexplique : Considrons un client sur le site A, gr par le serveur ldap-A. Si celle-ci e ee que ds le sous arbre spcier dans ldap.conf e 4. Peut-tre doit on tester dabord une architecture distribu mais plate e e comme celle expose dans la gure 8 ? eldapgrenoble.grid5000.org Grenoble

dc=grid5000,dc=org o=Nice ou=People(/etc/passwd)

Referral

o=Grenoble ou=Group(/etc/group)

ou=Hosts(/etc/hosts)

(/etc/auto.home)

ou=auto.home

ldapnice.grid5000.org

Nice

dc=grid5000,dc=org o=Nice ou=People(/etc/passwd)

o=Grenoble ou=auto.home

ou=Group(/etc/group)

ou=Hosts(/etc/hosts)

(/etc/auto.home)

Fig. 8 Architecture envisage de la Seconde exprience Grid5000 - mod`le distribu e e e emais plat

9

Quelques liens utiles

En plus de la bibliographie (dtaille ` la n de ce document), vous trouverez e e a ici une liste non exhaustive de liens fournissant de nombreuses informations en complment ` tout ce qui a t expos dans ce document. e a ee e Un livre qui ma beaucoup aid : [1]. e Le guide ociel pour linstallation dun serveur OpenLDAP [2] : OpenLDAP 2.2 Administrators Guide, http://www.openldap.org/doc/admin22/ un tr`s bon tutorial qui montre comment faire collaborer OpenLDAP, OpenSSL, e Kerberos et SASL, par Turbo Fredriksson. http://www.bayour.com/LDAPv3-HOWTO.html#4.3.2.Installing%20MIT%20Kerberos% 20V|outline Quelques notes sur lins