Les annuaires LDAP Ph. Sevre le 25/09/12. Introduction Light Weight Directory Protocol descendant de...

Post on 04-Apr-2015

109 views 0 download

Transcript of Les annuaires LDAP Ph. Sevre le 25/09/12. Introduction Light Weight Directory Protocol descendant de...

Les annuaires LDAP

Ph. Sevre le 25/09/12

Introduction

• Light Weight Directory Protocol

• descendant de la norme d'annuaires OSI X500 trop lourde et complexe à mettre en oeuvre

• normalisation de l'interface d'accès aux annuaires

• fonctionne au niveau applicatif au dessus de TCP/IP

• mode de communication client-serveur

• optimisé pour les requêtes d’interrogations

X500Standard OSI (protocole à 7 couches)Protocoles :

DAP : communication client-serveur (Directory Access Protocol)

DSP : communication serveur-serveur (Directory System Protocol)

Données au format objets-attributsObjects IdentifiersStructure hiérarchique : arbre, branches, feuillesEncodage ASN.1Sécurité : X.509 (certificats, PKI)Réplication

Concepts

• Modèle d’information

• Modèle de nommage

• Modèle fonctionnel (de service)

• Modèle de sécurité

Caractéristiques

• Stockage réparti de données d’authentification

Le protocole LDAP

• Ldap V1: RFC 1487 - accès simple X500• Ldap V2 -1995 – les bases de LDAP• Actuellement protocole LDAP V3.0 (RFC

2251) depuis 1998

Le protocole LDAP -2 Communication client-serveur :

Utilise TCP/IP ASN.1 (Abstract Syntax Notation One)

Communication serveur-serveur : Referrals : liens entre annuaires Réplication : échange de données entre annuaires

Les mécanismes de sécurité : Authentification (Kerberos) Chiffrement des flux (SASL :Simple Authentication

and Security layer) Règles d’accès aux données

L’annuaire LDAP - 1• collection hiérarchisée d’objets et de leurs

attributs

• un annuaire n’est pas une base de données :– un deux objets de même type peuvent avoir des

attributs différents – les attributs peuvent être multivalués

• Ex : 2 homonymes dans 2 OU différentes

• il est basé sur des schémas standards prédéfinis mais qui peuvent être adaptés localement

L’annuaire LDAP - 2• suit des recommandations (RFC) pour garantir

l’interopérabilité

• il est optimisé pour les interrogations et les recherches

• il peut utilisé le stockage distribué et les techniques de réplications

• permet de gérer finement les accès aux objets et attributs au moyen d’ACLs

LDAP : les opérations• Abandon Abandonne l'opération précédemment envoyées

au serveur

• Add Ajoute une entrée au répertoire

• Bind Initie une nouvelle session sur le serveur LDAP

• Compare Compare les entrées d'un répertoire selon des critères

• Delete Supprime une entrée d'un répertoire

• Extended Effectue des opérations étendues

• Rename Modifie le nom d'une entrée

• Search Recherche des entrées d'un répertoire

• Unbind Termine une session sur le serveur LDAP

Schéma annuaire

Ou=People,dc=darkstar,dc=org

Base

Ou=Groups,dc=darkstar,dc=org

Unité organisationelleO=darkstar,c=US (X500)dc=darkstar.orgdc=darkstar,dc=org (RFC 2247)

cn=Vador,ou=People,dc=darkstar,dc=org

dc=darkstar,dc=org

Un objet :

• Un ou plusieurs type de classe (objectclass)

• Des attributs

Pourquoi ce type de structure ?

• administration plus fine

• configuration indépendante de l’hôte

• la réplication permet d’améliorer la disponibilité

• pour les gros sites, les performances sont supérieures à celles des fichiers plats Unix

• contrôle renforcé du fait de la structure du schéma

• plus sûr

Terminologie - 1

• Base : la racine du répertoire. La base de recherche d’une requête définit où commence cette dernière

dc=darkstar,dc=org

• Scope (base, one , sub) : définit la profondeur jusquà laquelle ira la requête– base : reste au niveau de la base– one : descend d’un niveau– sub : parcourt tout l’arbre

Terminologie - 2

• Distinguished Name (DN) : un identifiant qui détermine l’objet de façon unique dans le contexte considérécn=Vador,ou=People,dc=darkstar,dc=org

• Relative Distinguished Name (RDN) : les attributs du DN qui le rendent unique dans son contexte cn=Vador

Le schéma

• un schéma définit des classes d’objet (ObjectClass)

• “ressemble“ à un schéma de base de données avec l’héritage (simple ou multiple)

• définit les classes d’objets

• définit les attributs, leur – contenu– Le caractère obligatoire ou facultatif– mode de comparaison (sensible ou non à la casse),

Les OID

• chaque élément d’un schéma est identifié par un Object Identifier unique (comme pour SNMP)

• pour obtenir un OID, il faut s’adresser à l’IANA

• Un OID est composé de plusieurs numéros séparés par un point.

• Chaque numéro représente une branche d’un arbre hiérarchique.

• Tous les attributs du standard commencent par 2.5.4.

• Toutes les classes d’objet commencent par 2.5.6.

Schéma d’objet• Définition de la classe d’objet person :

objectclass ( 2.5.6.6 NAME 'person' SUP top STRUCTURAL MUST( sn $ cn )MAY( userPassword $ telephoneNumber $ seeAlso $ description ) )attributetype ( 2.5.4.4 NAME ( 'sn' 'surname' ) SUP name )

Les attributs• Un attribut est défini par :

–son OID.–son nom.– une courte description de l’attribut.– les critères de comparaison utilisés lors

d’une recherche.• une syntaxe décrivant le type de données.

Les attributs - Exemple

• Définition de l’attribut sn :attributetype ( 2.5.4.4 NAME ( 'sn' 'surname' ) SUP name )objectclass

attributetype ( 2.5.4.41 NAME 'name' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMat SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )

L’attribut sn (surname) hérite ses propriétés de ses parents (name)

Les attributs : règles de comparaisonLes règles de comparaison :

Associées à un traitement particulier sur un type d’attribut (comparaison, tri), elles définissent l’algorithme à utiliser lors de ces opérations

Elles dépendent de la syntaxe spécifiées dans la RFC 2252

Exemples de règles de comparaison : 2.5.13.0 : objectIdentifierMatch 2.5.13.1 : distinguishedNameMatch 2.5.13.2 : caseIgnoreMatch 2.5.13.3 : caseIgnoreOrderingMatch 2.5.13.4 : caseIgnoreSubstringsMatch 2.5.13.8 : numericStringMatch 2.5.13.10 : numericStringSubstringsMatch

Exemple d'objet dn: cn=Albert Dupont,dc=exemple,dc=org

cn: Albert Dupont

givenName: Albert

sn: Dupont

telephoneNumber: 01 23 45 67 89

telephoneNumber: +1 555 1234

mail: adupont@exemple.com

manager: cn=Jules Leroy,dc=exemple,dc=org

objectClass: inetOrgPerson

objectClass: organizationalPerson

objectClass: person

objectClass: top

Quelques objets standard

• Schéma par défaut RFC 2256 : core RFC 1274 : cosine RFC 2798 : inetOrgPerson

• PosixAccount

• person

• organizationalPerson

• inetOrgPerson

Unité organisationelle (OU)

• C’est un conteneur pouvant stocker des objets terminaux ou d’autres OU

Le Directory Information Tree ( DIT)• DIT : structure de

l’arbre

• Un schéma peut être réparti sur plusieurs serveurs. Une sous-partie constitue une partition

• règle : chaque objet doit disposer d’un ancêtre commun et cet ancêtre doit être dans la partition

Les ACLS

• Elles permettent de décrire les accès aux attributs. Par exemple :

# controle d’accès simple: lecture seule sauf pour les mots de passeaccess to dn=".*,dc=darkstar,dc=org" attr=userPassword by self write by dn=Manager,ou=People,dc=darkstar,dc=org write by * auth

access to dn=".*,dc=darkstar,dc=org" by self write by * read

Les URL LDAP

les navigateurs web peuvent accéder à un annuaire LDAP grâce à des URL : ldap[s]://<hostname>:<port>/<base_dn>?<attributes>?<scope>?<filter>

<base_dn> : DN du point de départ de la recherche

<attributes>: attributs que l'on veut consulter

<scope> : la profondeur de recherche dans le DIT à partir du <base_dn> :"base" | "one" | "sub"

<filter> : filtre de recherche, par défaut (objectClass=*)

Les URL LDAP - suite

exemples :ldap://ldap.netscape.com/ou=Sales,o=Netscape,c=US?cn,tel,mail?

scope=sub?(objetclass=person)

ldap://ldap.domain.fr/cn=Albert%20Dupont, ou=People, dc=domain,dc=fr

ldap://ldap.domain.fr/dc=domain,dc=fr?mail,uid,sub?(sn=Dupont)*)

Les connexions et la sécurité mode anonyme (DN et mot de passe vide:

pour client de messagerie) : opération bind avec ou sans paramètres

authentification simple (envoi du DN + mdp en clair => peu de sécurité)

Sécurisée– avec TLS (Transaction Layer Security) ou SSL

(LDAPS)– Kerberos 4– SASL

Les couches de sécurité

• SSL/TLS (Secure Socket Layer/Transport Layer Security) au moyen de certificats SSL

• SASL (Simple Layer Authentication and Security Layer)

• Kerberos 4

• Kerberos5

Annuaires distribuésIl est possible d’utiliser des annuaires distribués

au moyen de referral :

dn: ou=explore,dc=darkstar,dc=orgobjectClass: organizationalUnitobjectClass: referralou: exploreref: ldap://explr.darkstar.org/ou=explore,dc=darkstar,dc=org

Ici, l’annuaire correspondant à l’OU explore est stocké sur le serveur explr.darkstar.org

Les indexes

• les annuaire LDAP permettent de définir les indexes ad-hoc pour obtenir les performances souhaitées. Exemple:

index cn,uid eq

index uidNumber eq

index gidNumber eq

Le back-end

• OpenLdap propose plusieurs back-end pour stocker la base d’annuaire :– DBM– Berkeley DB– BD relationnelle – fichiers plats

La réplication – 1 • Elle permet :

– d’optimiser la gestion de la charge.– d’améliorer la disponibilité de l’annuaire.– de sécuriser les données.

• Il existe deux mécanismes de réplication entre annuaires LDAP :– le processus basé sur la génération d’un fichier

LDIF et géré par un démon dédié (slurpd).– le mécanisme LDAP Sync Replication disponible

depuis la version 2.2 d’OpenLdap.

La réplication – 2

• configuration maître/esclave ou multi-maîtres

• les annuaires doivent posséder le même schéma

• Les règles d'accès doivent être dupliquées

Intégration au système

• LDAP est maintenant intégré au système par l’intermédiaire de clients LDAP et peut être utilisé conjointement avec PAM (Plugable Authentication Module)

Les clients et outils

• Outlook Express permet d’interroger un annuaire LDAP

• Les outils : ils commencent à apparaître – gq : outil graphique X Windows– Webmin : permet d’administrer un serveur

LDAP depuis une interface Web– PhpLdapAdmin– ldapvi

Quelques exemples

• annuaire d’université Paris V : 30 000 étudiants +3000 personnels

• Ministère de l’Intérieur : création de 300 000 adresses en 2h30 !!

• Wanadoo : 3 000 000 d’entrée

• DGCP : 60 000 agents + 10 000 BAL

• + projets Education Nationale

Les applications “LDAPifiées”• Samba

• Sendmail• Postfix• Squid• Apache• serveurs POP3/IMAP4 (DovetCot, ...)• serveurs Radius• + communication avec Microsoft AD ....• plus de très nombreuses applications Web

Les outils• slapxxx : fonctionnent à froid

– slapcat : vidage annuaire en ASCII LDIF

– slapadd : ajout d'entrées (à froid)

– slappasswd : modif mdp root DN

– slapindex : réindexation

• ldapxxx: fonctionnent à chaud

– Ldapadd : ajout d'entrée

– Ldapmodify : modification d'entrées

– Ldapdelete : suppression

– ldapsearch : recherche

Les API

• de nombreuses interfaces de programmation sont disponibles en particulier avec OpenLdap sous Linux : – C/C++– Perl (Net::Ldap)– Python – PHP– Java

Les implémentations

• Sun Java System Directory Server• IBM Tivoli Directory Server• Active Directory (Windows 2000, Server 2003)• Apple Open Directory (Mac OS X Server)• Novell eDirectory, anc. Novell Directory

Services (NDS)• OpenLDAP• 389 Directory Server (RedHat)• Apache Directory Server (Java)

Mise en oeuvre

• gros travail de réflexion de manière à ce que la structure de l’arbre :– reflète bien la structure de l’organisation – ne soit pas trop complexe (nbre de niveaux

limités)– structure plate/structure profonde

• migration lourde sans outils avec OpenLdap

Le format LDIF• Ldap Directory Information File : format

standard d’échange• Le standard : RFC 2849

• fichier texte Ascii utilisé pour insérer des objets/vider un annuaire

• Encodage UTF-8

• Chaque entrée séparée par une ligne blanche

• le programme slapcat (dump annuaire ldap) produit un fichier LDIF utilisé pour les sauvegardes

Utilisation de LDAP

• Partout ou une authentification distribuée et extensible est nécessaire

• permet d’avoir une seule source d’authentification quels que soient les clients et les OS (p. Ex. Windows/Samba et messagerie, Apache, Squid, ...)

• remplacement de service NIS

• Annuaire d’entreprise (avec interface Web depuis Rolodap)

Migration• des outils de migration (scripts shell et perl)

sont disponibles pour passer d’une structure Unix classique à fichiers plats (/etc/passwd et groups) ou de type NIS vers une structure de type Ldap

• on peut migrer : utilisateurs, groupes, aliases, netgroups, hosts, services...

• cf http://www.padl.com

•Openldap

• fonctionne sur tous les Unix/Linux• packagé pour toutes des distributions

importantes• Debian/Ubuntu :

– slapd (serveur)– ldap-utils (client)

Authentification Unix

• permet à des utilisateurs Unix de s'authentifier auprès d'un annuaire LDAP

• basée sur nss_ldap et pam_dap

nss_ldap

• Name Service Switch : permet de faire le lien avec des dispositifs externes (ldap, nis, winbind) – commande getent

• Modification du fichier /etc/nsswitch.conf• recherche d'abord dans les fichiers locaux

/etc/passwd, group, puis dans la base ldap passwd: files ldap group: files ldap shadow: files ldap

pam_ldap - 1• Pam-ldap prend en charge les authentifications

des utilisateurs :– avec le module PAM_LDAP, on permet à des

programmes tels que su, gdm, login, telnet, ftp..., d'aller chercher et vérifier l'information d'authentification dans un annuaire LDAP.

– Ces programmes doivent être ``pam-enabled'' c'est à dire liés à la librairie pam libpam.so pour utiliser ce cadre d'authentification.

– paramétrage dans /etc/pam.d

Pam_ldap – 2 • 4 controles : gestion des comptes, des

authentifications, des password et des sessions – Auth : vérification de l'identité user avec mot de passe– Account: vérification des comptes.. mot de passe

expiré? Accès permis à une ressource?– Password : gestion des mots de passe, expiration etc..– Session : gestion de l'entrée en session.. montage du

home directory• Sufficient : si le test est probant on s'arrete là,

sinon on essaie la suite• Required : succès obligatoire sinon le test échoue

les clients• Le fichier de configuration pour les commandes

clientes :– permet d'éviter de taper les arguments sur la ligne de

commande /etc/ldap/ldap.conf (ubuntu et debian) # adresse des serveurs ldap à contacter HOST 192.168.0.1 192.168.0.2 #Dn de la base BASE dc=dom,dc=fr #adresse des serveurs avec protocole d'accès URI ldap://localhost ldaps://192.168.0.2

Sauvegarde/restauration annuaire• sauvegarde :

slapcat > -l dump.ldif • arrêt annuaire

/etc/init.d/ldap stop• purge base

rm -fr /var/lib/ldap/*• restauration

slapadd -l dump.ldifchown -R ldap.ldap /var/lib/ldap/• /etc/init.d/ldap start