Tutorial LDAP

download Tutorial LDAP

of 65

Transcript of Tutorial LDAP

  • Tutorial OpenLDAP

    Installation et configuration (clients/serveurs)

    Migration NIS LDAP dans GRID5000

    Securisation par SSL et optimisations

    [email protected] Version : 0.3 Fevrier 2005

    Resume

    Ce document a pour objectif de familiariser le lecteur avec linstallationet la configuration dun service dannuaire LDAP dans un environnementLinux, plus particulie`rement dans lobjectif de remplacer NIS.

    La premie`re partie (1) est consacree a` ceux qui nont pas de tempsa` perdre et qui souhaitent disposer rapidement dun environnement fonc-tionnel. Les sections suivantes detaillent plus amplement le fonctionnementde LDAP.

    Ainsi, apre`s quelques rappels et definitions de principe (2), on trouveraune explication detaillee de linstallation dun serveur LDAP (3) et de saconfiguration (4). La section 5 est consacree au principales commandesimplementees dans LDAP qui sont illustrees par des exemples tandis quela section 6 detaillera plus particulie`rement les manipulations a` effectuerpour migrer les tables NIS et plus generalement les fichiers syste`mes dansla base LDAP de facon a` ce que la gestion des comptes utilisateurs passepar LDAP.

    Alors que la section 7 detaille linstallation et la configuration desclients LDAP, un dernie`re partie (8) traite des manipulations effectueeset des evolutions envisagees dans le cadre du projet Grid5000, cadre expe-rimental de ce document.

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

    1

  • Table des matie`res

    1 Pour les plus presses : Ultra Quick Guide 5

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

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

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

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

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

    1.4.2 Gestion de lauthentification des utilisateurs via LDAP . . 6

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

    2 Introduction 8

    2.1 Notion dannuaire electronique . . . . . . . . . . . . . . . . . . . 8

    2.2 Mais quapporte LDAP? . . . . . . . . . . . . . . . . . . . . . . . 9

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

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

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

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

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

    2.4 Le mode`le de donnees LDAP . . . . . . . . . . . . . . . . . . . . 10

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

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

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

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

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

    2.5.2 Controle dacce`s . . . . . . . . . . . . . . . . . . . . . . . 14

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

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

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

    3 Installation du serveur LDAP 17

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

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

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

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

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

    3.1.5 Choix de lespace de nommage . . . . . . . . . . . . . . . 20

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

    3.2.1 Cas dune installation sur une Debian stable . . . . . . . 20

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

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

    4 Configuration du serveur LDAP 22

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

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

    4.1.2 Logging, configuration dexecution . . . . . . . . . . . . . 23

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

    2

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

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

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

    4.2.1 Ajout dune base . . . . . . . . . . . . . . . . . . . . . . . 25

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

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

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

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

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

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

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

    5 Les principales commandes LDAP 31

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

    5.2 Commandes online/oine . . . . . . . . . . . . . . . . . . . . . . 31

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

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

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

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

    6 Gestion des fichiers de configurations par LDAP 37

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

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

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

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

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

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

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

    6.3 Migration des fichiers de configuration dautomount . . . . . . . 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 dune installation sur une Debian stable . . . . . . . 42

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

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

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

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

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

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

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

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

    3

  • 8 Evolution au sein du projet Grid5000 508.1 Premie`re experimentation : configuration locale . . . . . . . . . . 50

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

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

    9 Quelques liens utiles 52

    A Fichier de configuration slapd.conf 55

    B Fichier de configuration ldap.conf 57

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

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

    E le fichier automount.schema 61

    F Quelques astuces et messages derreurs rencontres 62

    G Programmation Perl avec LDAP 63

    4

  • 1 Pour les plus presses : Ultra Quick Guide

    1.1 Prerequis

    1. Installation de openssl : apt-get install openssl

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

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

    4. Installation de SASL : en cours dinvestigation...

    1.2 Cote serveur...

    1. Installation de slapd

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

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

    2. Configuration du serveur :

    (a) Quelques initialisations :

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

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

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

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

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

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

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

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

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

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

    1.3 Gestion des fichiers de configurations par LDAP

    1. Installer les outils de migration :

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

    (b) Autres cas : apt-get install migrationtools

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

    5

  • 3. Migration les fichier passwd, group et hosts : suivre les instructions du6.2 page 39.

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

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

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

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

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

    1.4 Cote client...

    1.4.1 Initialisation et configuration de base du client

    1. Installation

    (a) Cas Debian stable : compte tenu des remarques relatives a` la gestionSSL pour le package client stable (voir 7.1 page 42), il convient deforcer 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. Recuperer le fichier fourni en annexe B page 57 et le placer dans /etc/ldap/ldap.conf

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

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

    1.4.2 Gestion de lauthentification des utilisateurs via LDAP

    1. NSS (Name Service Switch) et LDAP :

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

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

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

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

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

    6

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

    2. PAM (Pluggable Authentication Module) et LDAP : Meme si cette sectionest dedie aux utilisateurs presses, il est bon, compte tenu limportance dePAM dans un syste`me Linux, de lire comple`tement le 7.2.2 page 47 etden suivre les instructions.

    1.4.3 Note a` propos de la cohabitation NIS/LDAP

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

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

    2. modifier /etc/nsswitch.conf pour quil contienne les entrees suivantes :

    passwd: files nis ldap

    shadow: files nis ldap

    group: files nis ldap

    hosts: files nis ldap dns

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

    7

  • 2 Introduction

    2.1 Notion dannuaire electronique

    Un annuaire electronique est une base de donnees specialisee qui permet departager des bases dinformations sur un reseau. Ces bases peuvent contenirtoute sorte dinformations, comme des coordonnees telephoniques ou des don-nees syste`mes.

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

    LDAP signifie Lightweight Directory Access Protocol, un protocole dannuairesur TCP/IP utilisant les memes concepts que DNS2, le service de nommageutilise sur lInternet pour faire correspondre un nom explicite (comme www-id.imag.fr) a` une adresse IP (129.88.69.11). Le spectre des informations quipeuvent ainsi etre diffusees est tre`s large : cela va des coordonnees adminis-tratives aux donnees du compte utilisateur (login, passwd), en passant par lesdonnees syste`mes de routage, de montage de partitions automatiques etc...

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

    il est optimise pour la lecture ; lajout et la modification de donnees peuventetre couteuses ;

    il fournit des fonctions de recherches plus avancees ; les donnees sont stockees sur un mode`le distribue et des techniques de repli-cations sont possibles, ce qui facilite un passage a` lechelle efficace.

    la structure des donnees stockees, appelee schema, peut etre etendue en fonc-tion de besoins locaux ;

    il est base sur des standards etablis qui assurent linteroperabilite entre plu-sieurs implementations sur plusieurs supports (notamment OS). Ce documentsinteressera a` limplementation open source de LDAP developpee a` luniver-site du Michigan, OpenLDAP3 version 2.x sous Linux.

    LDAP apporte egalement de nombreuses garanties en terme de securite, puisquedes mecanismes de chiffrement (SSL ou TLS) et dauthentification (SASL4),couples a` des mecanismes de re`gles dacce`s (ACL) permettent de proteger lestransactions et lacce`s aux donnees.

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

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

    8

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

    2.2 Mais quapporte LDAP?

    Cote utilisateur, LDAP fournit les services suivants :

    un protocole dacce`s a` linformation contenue dans lannuaire ; un mode`le dinformation definissant le type de donnees contenues dans lan-nuaire ;

    un mode`le de nommage definissant comment linformation est organisee etreferencee ;

    un mode`le fonctionnel qui definit comment on acce`de a` linformation ; un mode`le de securite qui definit comment les donnees et les acce`s sont pro-teges,

    un mode`le de duplication qui definit comment la base est repartie entre ser-veurs,

    des APIs pour developper des applications clientes, LDIF, un format dechange de donnees.

    2.3 LDAP, comment ca marche ?

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

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

    2.3.1 Serveur local

    Dans ce cadre, il ny a pas dinteractions entre le serveur slapd du domaine etun quelconque autre serveur. Ce mode de fonctionnement est illustre dans lafigure 1

    Client Serveur2. Rponse

    1. Requete

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

    Cette configuration est particulie`rement adapte au cas dun intranet local.

    2.3.2 Annuaire local avec referrals

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

    9

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

    Client Serveur

    SuprieurServeur

    2. Referral

    1. Requete

    3. Nouvelle requete

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

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

    2.3.3 Annuaire replique

    Dans ce cadre, le demon slurpd est charge de propager les changements effectuesdun serveur slapd matre vers un ou plusieurs serveurs slapd esclave (figure 3).

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

    On permet ainsi de garantir une certaine qualite de service. Lutilisation deslurpd vient avantageusement complementer le mode de configuration precedentdans le cadre dune grille.

    2.3.4 Annuaire distribue

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

    2.4 Le mode`le de donnees LDAP

    LDAP utilise une approche orientee objet dans sa representation des donnees,ce qui inclue notamment la definition dobjets (par un ensemble de re`gles etdattributs) et la notion dheritage entre objets.

    10

  • 2.4.1 Le Directory Information Tree (DIT)

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

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

    A noter que chaque serveur posse`de une entree speciale, appelee root directoryspecific entry (rootDSE) qui contient la description de larbre et de son contenu.

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

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

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

    Tab. 1 Principales abreviations utilisees dans le champ DN

    Le DN represente le nom de lentree sous la forme du chemin dacce`s a` celle-ci depuis le sommet de larbre. On peut comparer le DN au path dun fichierUnix. Bien entendu, comme pour le syste`me de fichier Unix, on peut utiliserun relative distinguished names (RDNs) pour designer une entree depuis uneposition particulie`re de larbre.

    Ces notions sont illustrees dans la figure 4.

    Pour faire le paralle`le avec la terminologie des bases de donnees relationnelles,les entrees correspondent a` un enregistrement dans une table tandis que lesattributs seraient lequivalent dun champ dune table.

    2.4.2 Les schemas

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

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

    A noter que chaque classe dobjets herite des attributs de ses predecesseurs.dansla hierarchie. Les objet classes et leurs attributs sont normalises dans [15] afindassurer linteroperabilite entre les logiciels. Il sont references par un object

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

    11

  • cn: g5k

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

    objectClass: posixGroupuid=svarrett uid=georget

    ou=People ou=Group

    cn=equipar cn=g5k

    entry

    DIT

    Liste dattributs associs uneentry; format :

    Distinguished Name:

    RDN (Relative Distinguished Name) depuis

    dc=grid5000,dc=fr

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

    ou=Group,dc=grid5000,dc=fr

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

    identifier (OID) unique attribue par lInternet Assigned Numbers Authority(IANA).

    2.4.3 LDIF

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

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

    Un fichier LDAP est constitue dune suite dentrees separees par un saut deligne. Le format est le suivant :

    : ou le premier attribut dune entree est le DN.

    Un entree aura donc la forme suivante :

    # Ceci est un commentaire

    dn:

    objectClass:

    objectClass:

    ...

  • objectClass: top

    cn: g5k

    userPassword: {crypt}x

    gidNumber: 24560

    memberUid: svarrett

    memberUid: georget

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

    du fichier /etc/group.

    2.5 La securite dans LDAP

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

    2.5.1 Authentification

    Pour pouvoir acceder a` lannuaire LDAP, le client LDAP doit dabord sau-thentifier, cest a` dire specifier qui va acceder aux donnees. Si lauthentificationreussi, alors le client peut envoyer une requete au serveur qui verifiera si leclient est autorise ou non a effectuer la reque`te. On parle de controle dacce`s(voir 2.5.2).Dans LDAP, lauthentification est fournie par une operation bind.LDAPv3 propose plusieurs mecanismes dauthentification :

    1. Anonymous Authentication : il sagit dune connexion presentant un champDN vide et aucun mot de passe (la reque`te est directement envoyee). Celapermet de consulter facilement les donnees accessible en lecture pour tous.

    2. Simple Authentication : cest la methode classique ou` le DN de lutilisateurest transmis avec le mot de passe en clair, ce qui doit etre evite bienentendu dans le cadre dune grille.

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

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

    13

  • authentification se fait sur simple presentation dun certificat contenantla cle publique de lutilisateur, la cle privee associee etant stockee sur unsupport sur et personnel (carte a` puce, cle USB etc...). Cette dernie`reapproche sera etudiee dans le cadre de Grid5000.

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

    PLAIN ou LOGIN ces mecanismes ne presentent pas plus davantageque lauthentification simple de LDAP, et peuvent donc etre oublies

    DIGEST-MD5 Bien que moins puissant que les approches a` tierce par-tie de confiance comme Kerberos ou PKI, ce mecanisme DOIT etreimplemente si lemploi de de SSL nest pas envisage. Il presentelavantage detre relativement simple a` mettre en place et se basesur un protocole de challenge/reponse qui offre une protection signi-ficative contre un certain nombre dattaques.

    GSSAPI 7 permet dutiliser les mecanismes de Kerberos V [6, 11], unsyste`me dauthentification securise a` tierce personne de confianceconcu pour les reseaux TCP/IP. Ce type de syste`me est particulie`-rement approprie aux environnement de type cluster.

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

    EXTERNAL permet dutiliser des mecanismes dauthentification dunecouche inferieure, comme SSL/TLS

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

    2.5.2 Controle dacce`s

    Il sagit de definir les droits dacce`s des utilisateurs sur les ressources de lan-nuaire (objets et attributs). La syntaxe est de la forme :

    Acces a` par :

    ce qui se traduit dans le format du fichier de configuration slapd.conf paraccess to by

    Dans la partie , on peut specifier : une expression regulie`re, correspondant a` un dn : dn= une liste dattributs : attrs= un filtre : filter=

    Les possiblites pour (resp. ) sont resumes dansle tableau 2 (resp. 3).

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

    14

  • * tous les utilisateurs, aussi bien anonymes quauthentifies

    anonymous utilisateur non authentifie et donc anonyme

    self utilisateurs associe a` lentree ciblee

    users utilisateur authentifie

    dn= utilisateur qui correspond a` lexpression regulie`re regex

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

    Tab. 2 possibilite pour la directive dans les ACLs

    Niveau Privile`ge accorde

    write modifie/renomme

    read lecture des resultats de recherche

    search requis pour lapplication de filtre de recherche

    compare requis pour les comparaisons

    auth requis pour sauthentifier (bind)

    none aucun acce`s

    Tab. 3 possibilite pour la directive dans les ACLs

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

    Lexemple suivant donne lacce`s en lecture pour tout le monde :access to * by * read

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

    by self write

    by * read

    Levaluation des controles dacce`s se fait dans lordre ou les re`gles sont defi-nies dans le fichier de configuration avec un arret devaluation a` la premie`recorrespondance (first match).

    On verra un exemple de limpact dune ACL sur les recherches dentrees au5.4.

    2.5.3 Protection des mots de passe

    Dans LDAP, les mots de passe peuvent posseder un prefixe qui precise la facondont ils sont encoder. Par exemple, si on conside`re lentree

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

    objectClass: person

    cn: Sebastien Varrette

    sn: varrette

    userPassword: {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ...

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

    15

  • communs :

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

    {MD5} hachage par MD5 puis encodage en base64.

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

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

    2.6 Replications

    La replication est une technique permettant a` un serveur (matre) de diffuserle contenu de sa base LDAP a` un ou plusieurs serveurs (esclave).Toute modification apportee sur la base LDAP dans lannuaire principal estautomatiquement repercutee sur lesclave de`s que celui-ci est joignable pourrealiser loperation.Cette replication permet ainsi dassurer une continuite du service dauthentifi-cation, meme si lun des deux serveurs est momentanement indisponible. Maiscela ne dispense absolument pas de la necessite de sauvegarder regulie`rementla base LDAP.

    2.7 Referrals

    TODO

    16

  • 3 Installation du serveur LDAP

    3.1 Pre-requis

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

    3.1.1 Installation de OpenSSL

    Sous Debian :> apt-get install openssl

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

    3.1.2 Mise en place des certificats SSL

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

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

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

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

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

    > cd /etc/ldap/certificate/

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

    CA certificate filename (or enter to create)

    Making CA certificate ...

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

    Generating a 1024 bit RSA private key

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

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

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

    Enter PEM pass phrase:

    Verifying password - Enter PEM pass phrase:

    -----

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

    incorporated into your certificate request.

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

    17

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

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

    For some fields there will be a default value,

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

    -----

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

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

    Locality Name (eg, city) []:Grenoble

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

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

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

    Email Address []:[email protected]

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

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

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

    -days 365

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

    Generating a 1024 bit RSA private key

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

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

    writing new private key to newreq.pem

    -----

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

    incorporated into your certificate request.

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

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

    For some fields there will be a default value,

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

    -----

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

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

    Locality Name (eg, city) []:Grenoble

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

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

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

    Email Address []:[email protected]

    Loption -nodes empeche le chiffrement de la cle secre`te (il sembleraitque OpenLDAP ne marche quavec des cles privees non chiffrees).

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

    3. Signature du certificat du serveur par le CA :

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

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

    18

  • 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 quils soient utilises par OpenL-DAP :

    > mv newreq.pem LDAPserver-key.pem

    > mv newcert.pem LDAPserver-cert.pem

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

    > chmod 600 LDAPserver-key.pem

    3.1.3 Installation de Berkeley DB

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

    Type Description

    bdb Berkeley DB transactional backend

    dnssrv DNS SRV backend

    ldbm Lightweight DBM backend

    ldap Lightweight Directory Access Protocol (Proxy) backend

    meta Meta Directory backend

    monitor Monitor backend

    passwd Provides read-only access to passwd(5)

    perl Perl programmable backend

    shell Shell (external program) backend

    sql SQL programmable backend

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

    On se propose ici dutiliser le format berkeley DB (BDB)

    > apt-get install libdb3 libdb3-dev

    (Il faudrait peut-etre tester la version 4)

    19

  • 3.1.4 Installation de SASL

    En cours dinvestigations... Pour le moment, une authentification simple secu-risee par SSL nous parat suffisante.

    3.1.5 Choix de lespace de nommage

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

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

    ou=Hostsou=People ou=auto.home

    dc=grid5000,dc=net

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

    Grenoble

    ldapidpot.clic.id

    Fig. 5 Architecture de la premie`re experience Grid5000 sur Grenoble

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

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

    3.2 Installation de slapd

    3.2.1 Cas dune installation sur une Debian stable

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

    Il faudra recuperer les sources9 du package et changer une re`gle de compilation.

    > cd ; mkdir slapd_stable-sources

    > cd slapd_stable-sources

    > apt-get source slapd

    > apt-get build-dep slapd

    > apt-get install libssl-dev

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

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

    US/contrib non-US/non-free

    puis lancer un apt-get update.

    20

  • Pour activer SSL :> cd openldap2-2.0.23

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

    > cd ~/slapd_stable-sources

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

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

    Debconf va vous poser une serie de questions :

    1. Directory initialization method : auto

    2. Directory suffix style : custom

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

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

    5. Replicate to another LDAP server : No

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

    3.2.2 Autres cas

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

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

    1. DNS domain name : entrer grid5000.net afin que la base du DIT soitdc=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 terminee, stopper le serveur LDAP par /etc/init.d/slapd stop ; Les fichiers de configuration seront localises dans /etc/ldap/

    21

  • 4 Configuration du serveur LDAP

    Cest le fichier slapd.conf qui ge`re la configuration du serveur. Le formatgeneral de ce fichier est le suivant :

    # Fichier /etc/ldap/slapd.conf

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

    # Section de configurations globales

    # Inclusion des schemas

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

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

    # Database #1 - Berkeley DB

    # Parametres de la base de donnees

    # ACL de cette base

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

    # Database #2 - Berkeley DB

    # Parame`tres de la base de donnees

    # ACL de cette base

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

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

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

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

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

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

    2. de changer le mot de passe de ladministrateur de la base LDAP (directiverootpw : voir 4.2.1 page 25)

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

    4.1 Configurations globales

    4.1.1 Inclusion des schemas

    La premie`re chose a` definir : quels schemas10 devra supporter le serveur ? . Letableau 5 liste les schemas les plus utiles (et qui sont pour la plupart fournispar defaut). Ce document ne traite pas de la creation de nouveau schemas.Les schemas sont places par defaut dans /etc/ldap/schema.On les ajoute par lappel include Typiquement, on aura donc les inclusions suivantes :

    10Les schemas ont ete introduit au 2.4.2, page 11

    22

  • Schema Description

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

    cosine.schema support des annuaires COSINE et X500

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

    java.schema stockage dobjets Java ou de references JDNI (cf [12])

    misc.schema divers objets et attribut.

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

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

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

    Tab. 5 Liste des principaux schemas disponibles

    # Schema and objectClass definitions

    include /etc/ldap/schema/core.schema

    include /etc/ldap/schema/cosine.schema

    include /etc/ldap/schema/nis.schema

    include /etc/ldap/schema/inetorgperson.schema

    4.1.2 Logging, configuration dexecution

    Il sagit la` de configuration la gestion des logs, des fichiers de PID etc...

    Niveau Description

    -1 enable all debugging

    0 no debugging

    1 trace function calls

    2 debug packet handling

    4 heavy trace debugging

    8 connection management

    16 print out packets sent and received

    32 search filter processing

    64 configuration file processing

    128 access control list processing

    256 stats log connections/operations/results

    512 stats log entries sent

    1024 print communication with shell backends

    2048 print entry parsing debugging

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

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

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

    23

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

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

    Dautres parame`tres controlent lexecution : pidfile : le fichier ou sera stocke le PID de slapd12. argsfile : les argument passes a` slapd. schemacheck : verifie la conformite de toutes les entrees aux sche-mas supportes.

    Dans notre cas, on aura :

    ## Added logging parameters

    loglevel 296

    ## Added execution control

    schemacheck on

    pidfile /var/run/slapd.pid

    argsfile /var/run/slapd.args

    # Where to store the replica logs

    replogfile /var/lib/ldap/replog

    4.1.3 Options SASL

    [ En cours dinvestigations...] Typiquement

    sasl-host hostname

    sasl-realm string

    sasl-secprops propertie

    4.1.4 Options SSL/TLS

    SSL/TLS recquiert la generation dun certificat valide pour le serveur, avecla cle privee associee. 3.1.2 a permis de creer le certificat pour lautorite decertification (CA) et le serveur. On trouve ainsi les directives : TLSCertificateFile : lemplacement du certificat du serveur. TLSCertificateKeyFile : lemplacement de la cle privee associee au certifi-catdu serveur. Ce fichier ne doit etre lisible que par root ! ! !

    TLSCACertificateFile : lenplacement du certificat du CA qui a signer celuidu serveur. Cette directive est obligatoire depuis OpenLDAP2.1

    TLSCipherSuite : les specifications des algorithmes de chiffrement.Dans notre cas :

    ## TLS options for slapd

    TLSCipherSuite HIGH

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

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

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

    12Ce fichier est principalement utilise par les script de shutdown

    24

  • 4.1.5 Autres options de securite

    On distingue un certain nombre dautres directives de securite :

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

    security permet de definir un ssf13 (une valeur entie`re comprise entre minssfet maxssf, parame`tres definis dans 4.1.3) Par exemple :security update_sasl=128,update_tls=128

    require : definit les conditions generales dacce`s a` lannuaire. les principalesoptions disponibles sont none, authc (pas dacce`s anonyme, tout client doitsauthentifier), bind (requete bind obligatoire), LDAPv3 (le client doit utiliserla version 3 du protocole LDAP)

    allow/disallow : permet dactiver/desactiver certaines fonctionnalites. Parexemple, allow bind_v2 autorise les requetes bind de clients LDAPv2.

    Pour nous, on ne sinteressera qua` la premie`re option :

    # Misc security settings

    password-hash {SSHA}

    4.2 Configuration des Bases de Donnees

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

    4.2.1 Ajout dune base

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

    ### Database Directives Berkeley DB ###

    database ldbm

    suffix "dc=grid5000,dc=net"

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

    rootpw {SSHA}xxxxxxxxxxxxxxxxxxxxxxxxx

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

    mode 0600

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

    suffix permet de definir le DN racine gere Le rootdn est tre`s important : il definit lutilisateur autorise a` creer desentrees dans la base de donnees. Cet utilisateur devra etre ajoute a` la base(voir ?? page ??.)

    rootpw correspond au mot de passe de lutilisateur rootdn. Pour le generer,il suffit dutiliser la commande suivante :

    13security strength factor

    25

  • > slappasswd

    New password:

    Re-enter new password:

    {SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    La chaine renvoyee peut alors etre ajouter a` la directive rootpw. directory definit le repertoire ou sera physiquement stocke la base de don-nees, tandis que mode precise les droits dacce`s des fichiers crees dans cerepertoire.

    On comple`te ensuite cette configuration par diverses optimisations :

    1. La generation dindex qui permettent daccelerer les recherches.Les types dindex supportes sont les suivants :

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

    2. le parame`tre cachesize qui definit le nombre dentrees qui doivent etregardees en memoire (par defaut 1000).

    Dans notre cas, on utilisera :

    # Indexing options

    index objectClass eq

    index cn pres,eq

    cachesize 2000

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

    index uid eq

    index uidNumber eq

    index gidNumber eq

    index memberUid eq

    index cn pres,eq,sub

    index sn pres,eq,sub

    index objectClass pres,eq

    index nisDomain eq

    index nisNetgroupTriple pres,eq,sub

    index memberNisNetgroup pres,eq,sub

    index nisMapName eq

    index amdMapName eq

    index amdMapKey eq

    4.2.2 Configuration des ACLs

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

    Voici celle utilisee dans cet exemple :

    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 role particulier du DN cn=nss,dc=grid5000,dc=net qui serautilise pour toutes les requetes de lecture (en particulier des mots de passe)dans la base (et ainsi eviter une lecture anonyme du contenu de la base). Onverra un exemple de limpact de cette ACL au 5.4.

    4.3 Insertions minimales requises dans la base de donnees

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

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

    ## Build the root node.

    dn: dc=grid5000,dc=net

    dc: grid5000

    objectClass: dcObject

    objectClass: organization

    o: Annuaire LDAP Grid5000

    ## Entry for the admin root

    # userpassword is the same as the one precised in

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

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

    objectClass: organizationalRole

    objectClass: simpleSecurityObject

    cn: admin

    description: LDAP administrator

    27

  • 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 a` lentree rootpw dufichier /etc/ldap/slapd.conf.

    2. Le mot de passe de lutilisateur special nest pas tre`s important car ilfigurera en clair (malheureusement) dans deux fichiers de configurationau niveau client (voir 7.2.1 et 7.2.2). Cet utilisateur evite simplementles requetes anonymes...

    Pour ajouter ces donnees dans la base de donnees :

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

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

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

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

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

    Pour que le serveur puisse repondre a` des reque`tes via une URL ldap

    TODO : expliquer le format des urls

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

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

    dans le fichier /etc/default/slapd (qui est cense specifier les options du bi-naire slapd pour le script de demarrage) mais lusage des guillemets pose pro-ble`me.

    4.4.1 Cas Debian stable

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

    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 recentes de slapd, le fichier /etc/default/slapdcontient la ligne

    # Example usage:

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

    a ajouter...

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

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

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

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

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

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

    En terme de securite, cest evidemment nettement mieux car une attaque sur leserveur LDAP fournira en general a` lattaquant un acce`s avec les droits utilisespar le serveur. Cest dautant plus interessant si vous utilisez une Debian stableet que, comme on la vu, vous devez vous charger personnellement des misesa` jour de securite ce qui laisse du temps pour lexploitation dattaques sur leserveur !

    ->TODO detailler les manips et les tester.

    4.6 Verifier que le serveur marche

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

    (penser a` jeter un coup doeil aux logs en live par un tail -f /var/log/slapd.logsur une autre console par exemple).

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

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

    teste une requete non chiffree sur le port standard 389

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

    teste une requete chiffree sur le port standard 389. loption -ZZ montreque StartTLS marche correctement. Le nom specifie dans lURL (ici,

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

    29

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

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

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

    30

  • 5 Les principales commandes LDAP

    5.1 Lancement du serveur slapd

    Options Description

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

    -u username Specifie lutilisateur et le groupe effectif pour slapd-g groupname

    -d integer Definit le niveau de log

    -f filename Utiliser le fichier de configuration specifie

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

    Tab. 7 Principales options disponibles pour slapd

    Le serveur peut etre lance de deux facons : Soit directement (voir le tableau 7 pour les options possibles) : /usr/sbin/slapdOn verifie que le serveur est bien lance par ps -ef | grep slapd.ATTENTION : pour stopper proprement15 le serveur lance de cette facon :> kill -INT cat /var/run/slapd.pid

    Soit via le script de demarrage : /etc/init.d/slapd Noter les modifications apportees a` ce script au 4.4, page 28.

    5.2 Commandes online/oine

    Oine Online Description

    slapadd ldapadd Ajout dentrees dans la base LDAP

    slapcat Utilitaire pour dumper le contenu de la base au formatLDIF

    slappasswd Utilitaire LDAP pour obtenir le chiffrement de motsde passe

    ldappasswd Changer le mot de passe dune entree LDAP

    ldapdelete Suppression dune entree LDAP

    ldapmodify Modification dune entree

    ldapsearch Recherche dans la base LDAP

    ldapmodrdn Renommage dune entree LDAP

    Tab. 8 Principales commandes online/oine

    On distingue deux modes de fonctionnement :

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

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

    31

  • sur le serveur LDAP.

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

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

    Options Description

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

    -f filename specifie le fichier LDIF contenant les entrees a` utiliser pour lope-ration

    -H URI Definit lURI LDAP a` utiliser pour la requete de connexion

    -n ne pas effectuer loperation, juste dire ce qui aurait ete fait

    -v mode verbeux

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

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

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

    -Z[Z] Gene`re une requete StartTLS. lutilisation de -ZZ impose que cetterequete soit reussie.

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

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

    5.3 Ajouter des entrees dans la base LDAP

    Pour ajouter des entrees dans la base :

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

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

    loption -v fournit des infos supplementaires.

    Pour la methode online (si le serveur tourne) :

    (a) Definissez un alias pour eviter de retaper toujours les memes op-tions17 : alias MyLdapadd=ldapadd -W -x -H "ldaps://"-D "cn=admin,dc=grid5000,dc=net"

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

    17Il faut vraiment toutes ces options ! En particulier, sans loption -W, lauthentificationde ladminitrateur echouera forcement et la requete deviendra anonyme. Or, un utilisateuranonyme na pas les droits decriture dans la base dapre`s les ACLs de slapd.conf (4.2.2) etajout echouera. Voir le tableau 9 pour bien comprendre a` quoi chaque option correspond

    32

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

    A noter lexistence de loption -c de ldapadd qui permet de continuermalgre les erreurs.

    Un exemple dajout a deja` ete presente au 4.3 page 27.Sinon, voici le contenudu fichier toto_add.ldif utilise en exemple :

    > cat toto_add.ldif

    ## Build the toto ou.

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

    ou: toto

    objectClass: organizationalUnit

    En cas de proble`mes lors de lajout simultane de plusieurs entrees (par exempleavec des messages derreurs comme ldap_add: Invalid syntax et/ouadditional info: value contains invalid data), assurez vous que les sautsde lignes ne comportent pas despace au debut de la ligne18 et que vous incluezles bons schemas dans slapd.conf

    5.4 Recherches dans la base LDAP

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

    le tableau 9 fournis les principales options standards disponibles les options specifiques de ldapsearch sont fournies dans le tableau 10 le filtre de recherche doit etre represente par une chaine au format specifiedans [5]. Par defaut, le filtre utilise est (objectClass=*).

    si une ou plusieurs entrees sont trouvees, seuls les attributs attrs (tous pardefaut) seront affiches sur la sortie standard.

    Options Description

    -b basedn definit le DN de base pour la recherche

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

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

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

    -S attribut les resultats sont trie selon les valeurs de lattribut

    -z limit Specifie le nombre maximal dentrees a` renvoye

    Tab. 10 Principales options specifiques de ldapsearch

    Voici quelques exemples dutilisation, qui illustrent egalement le fonctionnementdes ACLs :

    18utiliser 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 a` : ldapsearch -x -b "dc=grid5000,dc=net" "(objectclass=*)"

    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 fichierde configuration de lannexe A, les commandes precedentes ne renverront aucunresultat !

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

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

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

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

    Enter LDAP Password:

  • add ajouter lentree dans lannuaire (choix par defaut)

    delete supprimer lentree de lannuaire

    modify modifier les attributs de lentree. On peut ainsi a` la fois ajouter,modifier ou supprimer des attributs

    modrdn changer le RDN (Voir tableau 1 page 11) de lentree

    moddn changer le DN de lentree

    Tab. 11 Valeurs possibles pour le mot cle changetype

    > cat toto_modify.ldif

    ## Add an organization tata under toto.

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

    changetype: add

    o: tata

    objectClass: organization

    ## Add a new attribute description to o=tata

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

    changetype: modify

    add: description

    description: ajout 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 execute ce fichier par lappel MyLdapmodify -f toto_modify.ldifRemarques : pour supprimer une entree, on aurait aussi pu utiliser la commande :ldapdelete [standard_options] [-r]

    Les options standards sont celles specifiees dans le tableau 9 page 32.Loption -r precise que la suppression est recursive (tous les noeuds fils de seront aussi supprimes).

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

    Loption -c permet de continuer malgre les erreurs.-r permet de supprimer lancienne entree (qui est conservee par defaut).Enfin, loption -s permet de preciser lentree sous laquelle se greffera cettenouvelle entree.

    5.6 Quelques outils graphiques

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

    36

  • 6 Gestion des fichiers de configurations par LDAP

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

    6.1 Les outils de migration des fichiers de configuration

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

    6.1.1 Installation

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

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

    2. soit de recuperer directement les script a` ladresse http://www.padl.com/download/MigrationTools.tgz (version 45 au moment ou` ce do-cument est ecrit). Par coherence avec la suite, nous supposons quunefois larchive decompressee, les scripts quelle contient seront places aumeme endroit que ceux du package (/usr/share/migrationtools/).

    Autres cas :apt-get install migrationtools

    Les scripts seront places dans le repertoire /usr/share/migrationtoolsTODO : voir pour les autres distrib

    6.1.2 Configuration

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

    37

  • # Default DNS domain

    $DEFAULT_MAIL_DOMAIN = "grid5000.net";

    # Default base

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

    La variable $DEFAULT BASE correspond a` la base de lannuaire ou` sera stockele contenu des fichiers. La valeur ci-dessus correspond a` larchitecture exposeedans la figure 5, page 20. Dans le cadre de la seconde experimentation presenteeau 8.2, il faudra placer cette variable a` la valeur o=,dc=grid5000,dc=net.

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

    /etc/fstab ou=Mounts/etc/hosts ou=Hosts

    /etc/passwd et /etc/shadow ou=People/etc/group ou=Group

    /etc/protocols ou=Protocols/etc/rpc ou=Rpc

    /etc/services ou=Services/etc/networks ou=Networks

    netgroups ou=Netgroups

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

    cd /usr/share/migrationtools

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

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

    > cat /tmp/init_base_migration.ldif

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

    ou: People

    objectClass: top

    objectClass: organizationalUnit

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

    ou: Group

    objectClass: top

    objectClass: organizationalUnit

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

    ou: Hosts

    objectClass: top

    objectClass: organizationalUnit

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

    38

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

    # /etc/init.d/slapd stop

    Stopping OpenLDAP: slapd.

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

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

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

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

    6.2 Migration les fichier passwd, group et hosts

    6.2.1 Recuperation du contenu des tables NIS

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

    ypcat passwd > /tmp/nis_passwd

    ypcat group > /tmp/nis-group

    ypcat hosts > /tmp/nis_hosts

    et on transfe`re ces fichiers sur le serveur via scp :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_ .ldifVerifier que les fichiers generesont un format correct (cest comme ca que jai detecte le bug des packagesstables)

    6.2.3 Insertion dans la base LDAP

    En supposant que le serveur soit toujours arrete :

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

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

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

    Attention ! Loption -c permet de continuer malgre les erreurs, qui sont dontplus difficiles a` tracer.

    21il ny a avait pas dans notre cas de map shadow

    39

  • 6.3 Migration des fichiers de configuration dautomount

    automount est un demon qui automatise le montage (et le demontage) decertains syste`mes de fichiers. Si le syste`me de fichiers nest pas monte (parexemple, un CD), et quun utilisateur essaye dy acceder, il sera automatique-ment (re)monte (en particulier, lutilisateur en question naura pas a utiliser lacommande mount).

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

    Pour plus de details, voir [14].

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

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

    6.3.1 Installation du package autofs-ldap

    Sur le serveur :apt-get install autofs-ldap

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

    Attention ! lorsque jai installe le package, le fichier automount.schema napas ete installe. Le bug a ete signale mais en attendant, le contenu de ce fichierest fourni dans lannexe E page 61.

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

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

    6.3.2 Migration du fichier /etc/auto.home

    En regardant les tables montees avec NIS initialement :

    > cat /etc/auto.master

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

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

    /home/nis auto.home

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

    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 a` traiter un mapping generique(le format de ce fichier nest pas de la forme classique (voir man 5 autofs) :key [-options] locationLa demarche pour ajouter ce fichier dans la base LDAP a ete la suivante :

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

    > cat /tmp/auto.home.ldif

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

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

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

    objectClass: top

    objectClass: organizationalUnit

    ou: auto.home

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

    # is under /home/nis .

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

    objectClass: top

    objectClass: automount

    description: generic home directory

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

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

    cn: /

    (penser a enlever le retour \ de lavant-dernie`re ligne)

    TODO : donner exemple dans le cas dun mapping classique.

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

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

    41

  • 7 Installation du client LDAP

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

    1. installation et configuration de base pour permettre linterrogation duserveur LDAP a` distance (7.1)

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

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

    A lissue de ces trois etapes, la machine cliente sera comple`tement configuree etfonctionnelle.

    7.1 Initialisation et configuration de base du client

    7.1.1 Cas dune installation sur une Debian stable

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

    > apt-get install -t testing ldap-utils

    > apt-get install openssl

    7.1.2 Autres cas

    Il ny a pas de proble`mes (SSL est supporte directement) et il suffit de taper :apt-get install ldap-utils openssl

    7.1.3 Dans tous les cas....

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

    Voici les principales options disponibles :

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

    42

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

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

    SIZELIMIT nombre maximal de reponses aux requetes autorise.(0 pour quil ny ait pas de limite)

    TIMELIMIT delai maximal de recherche.

    BINDDN Contrairement a` ce quon pourrait penser, cette directivenest pas supportee par ldap.conf23 ! Cest la` quon devrait preciserque ce sera le DN cn=nss,dc=grid5000,dc=net qui aura acce`s a` la base(cest lutilisateur special cree au 4.3 a` cet effet). De toute facon, ladirective BINDPW (qui precise le mot de passe de binddn) nest supporteeni par ldap.conf, ni par .ldaprc.

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

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

    7.1.4 Verifier que ca marche

    1. On verifie deja` quun tunnel SSL peut effectivement etre mis en place avecle serveur :

    openssl s_client -connect :636 -showcerts \

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

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

    2. ldapsearch -x ne doit pas retourner derreur (mais ne doit pas renvoyerdentrees compte tenu des ACLs)

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

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

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

    Et sur la seconde : ldapsearch -x -H "ldap://".Si vous revenez sur la premie`re console, vous verrez alors :

    22pour eviter quun souci au niveau DNS empeche lacce`s au serveur23elle peut seulement etre utilisee dans le fichier .ldaprc propre a` chaque utilisateur

    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 chiffre : tout est fait pour que, par defaut, les communicationsentre le client et le serveur soient chiffrees. On le verifie en lancantsur la premie`re console :tcpdump -X port 636

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

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

    (on ajoute loption -H "ldap://" pour passer en modenon chiffre).

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

    7.2 Authentification des utilisateurs via LDAP

    lauthentification syste`me par LDAP permet dunifier les bases de donnees utili-sateur. De plus le syste`me de repartition et de replication procure une meilleuretolerance aux pannes. Enfin dautres services peuvent tirer partie de cette basecommune dauthentification.

    Sous Linux, lauthentification dun utilisateur utilise deux composants :

    1. le syste`me PAM (Pluggable Authentication Module, voir 7.2.2) qui per-met lintegration transparente de diverses technologies dauthentificationcomme le standard UNIX (utilisant crypt), RSA, DCE, LDAP etc... surdes services du syte`me comme login, passwd, rlogin, su, ftp, ssh etc. sansaucune modification sur ces services.

    Si au depart PAM netait implemente que sous Solaris, cest aujourdhuiun standard dauthentification sur de nombreuses distributions Linux(Redhat, Debian etc...) PAM fournit une API par laquelle les requetesdauthentitification sont mappees sur des actions specifiques aux techno-logies (et qui sont implementees dans des modules PAM). Ce mappingest fait par les fichiers de configuration PAM dans lesquels on specifie pourchaque service les mecanismes dauthentification utilisables.

    Dans notre cas, le module pam ldap, implemente dans la librairie partageepam_ldap.so, permet aux utilisateurs et aux groupes de sauthentifiera` laide du service LDAP. Il suffira de le preciser dans les fichiers deconfiguration PAM.

    44

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

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

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

    On commencera par linstallation de nss ldap car cest celle qui est la moinsdangeureuse des deux : de mauvaises manipulations avec PAM peuventcasser le syste`me complet ! !

    7.2.1 NSS (Name Service Switch) et LDAP

    Cas Debian stable Comme dhabitude, on peut faire la manip pour per-mettre 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 proble`me

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

    Mais je nai pas reussi a` lancer la compilation (un proble`me dans le script rulesapparemment24). Et surtout, on a deja` force linstallation de ldap-utils en tes-ting, alors autant continuer, ca facilitera la mise a` jour :apt-get install -t testing libnss-ldap

    24make : dh_testdir : Command not found

    Ce proble`me se resoud en installant le package debhelper mais on a alors un autre erreur :configure : error : could not locate . Je nai pas cherche plus loin (mais jesuppose quil faut installer libldap2-devel)...

    45

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

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

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

    3. LDAP version to use : 3

    4. database requires login : yes

    5. file permission : 0600

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

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

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

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

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

    Et on transforme les