View
114
Download
0
Category
Preview:
Citation preview
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
Recommended