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
X500 Standard OSI (protocole à 7 couches) Protocoles : DAP : communication client-serveur (Directory Access Protocol) DSP : communication serveur-serveur (Directory System Protocol) Données au format objets-attributs Objects Identifiers Structure hiérarchique : arbre, branches, feuilles Encodage ASN.1 Sé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 Base Unité organisationelle O=darkstar,c=US (X500) dc=darkstar.org dc=darkstar,dc=org (RFC 2247) Base Unité organisationelle dc=darkstar,dc=org Ou=Groups,dc=darkstar,dc=org Ou=People,dc=darkstar,dc=org cn=Vador,ou=People,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 comparaison Les 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 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 passe access 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>?<sco pe>?<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?scop e=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és Il est possible d’utiliser des annuaires distribués au moyen de referral : dn: ou=explore,dc=darkstar,dc=org objectClass: organizationalUnit objectClass: referral ou: explore ref: 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.ldif chown -R ldap.ldap /var/lib/ldap/ /etc/init.d/ldap start