OpenLDAP est un annuaire libre puissant, performant et stable qui est déjà bien connu et largement utilisé. Pourtant, il existe de nombreux modules, configurations et bonnes pratiques qui permettent d’en faire l’annuaire d’entreprise idéal qui ne sont pas toujours évidents au premier abord. Cette session présentera quelques unes de ces astuces - intégrité de données, sécurité, architectures pour disponibilité et montée en charge, monitoring - et sera illustrée de nombreux retours d’expériences des annuaires petits et grands sur lesquels l’orateur a eu l’occasion de travailler.
OpenLDAP - Astuces pour en faire l'annuaire d'entreprise idéal
1. THÈME TECHNIQUE - ADMINISTRATION SYSTÈME
OpenLDAP
Astuces pour en faire
l'annuaire d'entreprise idéal
Jonathan CLARKE - jcl@normation.com Normation – CC-BY-SA
normation.com
2. Qui suis-je ?
● Jonathan Clarke
● Job : Co-fondateur et directeur technique de Normation
● Métier :
– D'abord administration système, gestion d'infrastructures…
– Projets LDAP et gestion d'identités
– Maintenant un peu de tout !!
● Logiciel libre : Contributeur OpenLDAP, CFEngine, LSC, LTB...
Contacts
Mail : jcl@normation.com
Twitter : @jooooooon42 (ca fait 7 'o', mais c'est pas ma faute...)
Normation – CC-BY-SA
normation.com 2
4. De quoi parle-t-on ?
Annuaire LDAP central
● LDAP = Lightweight Directory Access Protocol
● Standard pour communiquer avec et stocker des données dans
des annuaires
● Annuaires ? Sorte de base de données objet, hierarchique...
● Bref, « LDAP, c'est compliqué... »
Normation – CC-BY-SA
normation.com 4
6. De quoi parle-t-on ?
Problématique
Authentification Gestion des droits Création de comptes
d'applications (administrateurs) (RH)
● Source unique de « vérité »
● Origines des mises à jours
LDAP
multiples et variées
● Point central → critique
Normation – CC-BY-SA
normation.com 6
7. De quoi parle-t-on ?
Objectifs
● Montrer quelques fonctionnalités pas forcément connues
● Donner des exemples concrets de configuration, pour
slapd.conf et cn=config
● Retours d'expériences et idées sur la gestion d'un service
LDAP en production
Normation – CC-BY-SA
normation.com 7
8. Sommaire
1. De quoi parle-t-on ?
2. OpenLDAP: présentation et principes
3. Intégrité des données
4. Architecture réseau et réplication
5. Monitoring
Jonathan CLARKE - jcl@normation.com Normation – CC-BY-SA
normation.com 8
9. OpenLDAP
● Implémentation LDAP de référence
● Open source (licence propre, de type BSD)
● Multi-plateforme
● Écrit en C
● Version majeure actuelle : 2.4
● Contributeurs :
● Créé en 1998 par Kurt Zeilenga
● Core team actuelle :
– Howard Chu, Pierangelo Maserati et Kurt Zeilenga
● Engineering team actuelle :
– 14 membres officiels
● De nombreux contributeurs occasionnels
Normation – CC-BY-SA
normation.com 9
10. OpenLDAP
● Un annuaire LDAP parmi d'autres...
Normation – CC-BY-SA
normation.com 10
11. OpenLDAP
● Contient 3 composants :
● Un serveur LDAP : slapd
– Outils d'administration côté serveur : slap*
● Des clients LDAP : ldap*
– Lecture : ldapsearch, ldapcompare
– Écriture : ldapadd, ldapmodify, ldapmodrdn, ldapdelete
– Divers : ldappasswd, ldapwhoami, ldapexop
– Utilitaire : ldapurl
● Une librairie LDAP : libldap
– Librairie standard en C
Normation – CC-BY-SA
normation.com 11
13. OpenLDAP : configuration
● Deux formats de configuration :
● slapd.conf – Fichier de configuration « traditionnel »
● cn=config – Base de configuration accessible via LDAP
● Comparaison :
● Édition :
– slapd.conf: éditeur texte (vim, emacs, etc)
– cn=config: client LDAP (ldapsearch/ldapmodify, Apache Directory Studio...)
● Prise en compte des changements :
– slapd.conf: redémarrage du serveur obligatoire
– cn=config: prise en compte à chaud de tous les changements
● Replication :
– slapd.conf: partage de la configuration manuelle seulement
– cn=config: synchronisation possible entre serveurs via syncrepl (clusters, haute-dispo)
● Compatibilité :
– slapd.conf: pourrait être déprécié à l'avenir
– cn=config: considéré comme standard depuis OpenLDAP 2.4
Normation – CC-BY-SA
normation.com 13
14. OpenLDAP : configuration
● slapd.conf – Structure et format
# comment - these options apply to every database
<global configuration options>
# first database definition & configuration options
database <database 1 backend type>
<configuration options specific to database 1>
# subsequent database definitions & configuration options
database <database 2 backend type>
# add an overlay to database 2
overlay <overlay type>
<configuration options specific to overlay on database 2>
Normation – CC-BY-SA
normation.com 14
15. OpenLDAP : configuration
● slapd.conf mappé vers cn=config
cn=config
# options apply to every database
<global configuration options>
# first database
database <database 1 type> olcDatabase={-1}frontend
<configuration for database 1>
olcDatabase={0}config
# subsequent databases
database <database 2 type>
olcDatabase={1}bdb
# add an overlay to database 2
overlay <overlay type>
<configuration for overlay> olcDatabase={2}hdb
olcOverlay={0]type
Normation – CC-BY-SA
normation.com 15
16. Sommaire
1. De quoi parle-t-on ?
2. OpenLDAP : présentation et principes
3. Intégrité des données
4. Architecture réseau et réplication
5. Monitoring
Jonathan CLARKE - jcl@normation.com Normation – CC-BY-SA
normation.com 16
18. Intégrité des données
● LDAP impose nécessaire un contrôlé des données grace à son
schéma :
● ObjectClasses : définit les types d'attributs autorisés dans chaque objet
● Attributs : définit les valeurs autorisées dans un attribut
● Mais ce n'est pas toujours suffisant !
● Aller plus loin :
● Imposer l'unicité de valeurs à travers l'annuaire (UID, mail...)
● Mettre à jour les références (retirer un utilisateur supprimé de ses groupes...)
● Affiner les valeurs autorisées par attribut (liste de choix...)
Normation – CC-BY-SA
normation.com 18
19. Intégrité des données
● “unique” overlay
● Principe : interdire de créer des valeurs identiques à d'autres déjà existantes
● Rappel : LDAP URIs
– ldap:///[base dn]?[attributes...]?scope[?filter]
– Base DN defaults to current database baseDN
● Configuration :
– Définir une recherche par URI qui renvoie les attributs censés être uniques
● Exemples :
overlay unique
unique_uri ldap:///?uid?sub?
dn: olcOverlay={0}unique,olcDatabase={1}bdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcUniqueConfig
olcUniqueURI: ldap:///ou=people,o=training?mail?sub?
Normation – CC-BY-SA
normation.com 19
20. Intégrité des données
● “refint” overlay
● Principe : liens entre objets (attributs de type DN) mis à jour en cas de
changement de l'objet pointé
● Configuration :
– Définir les attributs dans lesquels on cherche lors des renommage ou suppression
● Exemples :
overlay refint
refint_attribute manager
refint_attribute secretary
dn: olcOverlay=refint,olcDatabase={1}bdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
OlcRefintAttribute: manager
OlcRefintAttribute: secretary
Normation – CC-BY-SA
normation.com 20
21. Intégrité des données
● “memberof” overlay
● Principe : lien dans les fiches personne vers les groupes dont ils sont membres
● Configuration :
– Minimum : activation + inclusion schéma
– Optionnel : changement des types de groupes, nom de l'attribut memberOf, etc...
● Exemples :
overlay memberof
dn: olcOverlay=memberof,olcDatabase={1}bdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcMemberofConfig
Normation – CC-BY-SA
normation.com 21
22. Intégrité des données
● “constraint” overlay
● Principe :
– Impose des règles plus strictes que le schéma sur les valeurs d'attributs
● Possibilités :
– Par expression régulière (mail ~= ^[[:alnum:]]+@mydomain.com$)
– Limites de longeur (photo de 100 ko max)
– Limite de nombre de valeurs (userPassword multi-valué mais limité à 1 password)
– Par recherche de valeurs dans l'annuaire (service = un des services définis)
– Par règles de correspondance (cn = givenName + " " + sn)
● Syntaxe « set » des ACL
Normation – CC-BY-SA
normation.com 22
23. Intégrité des données
● “constraint” overlay
● Configuration :
– Activation + définition des règles
● Exemples :
dn: olcOverlay=constraint,olcDatabase={1}bdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcConstraintConfig
OolcConstraintAttribute: jpegPhoto size 131072
olcConstraintAttribute: userPassword count 1
overlay constraint
constraint_attribute mail regex ^[[:alnum:]]+@mydomain.com$
constraint_attribute service uri
ldap:///ou=services,dc=example,dc=com?cn?sub?(objectClass=service)
restrict="ldap:///ou=People,dc=example,dc=com??sub?(objectClass=person)"
Normation – CC-BY-SA
normation.com 23
24. Intégrité des données
● Attention !
● Limitation de cette approche :
● Les overlays n'interceptent que les nouvelles opérations...
● Ils ne corrigeront pas les donneés déjà présentes dans l'annuaire !
Normation – CC-BY-SA
normation.com 24
25. Sommaire
1. De quoi parle-t-on ?
2. OpenLDAP : présentation et principes
3. Intégrité des données
4. Architecture réseau et réplication
5. Monitoring
Jonathan CLARKE - jcl@normation.com Normation – CC-BY-SA
normation.com 25
26. Réplication
● C'est quoi la réplication ?
● Reproduire à l'identique tout ou partie du contenu d'un annuaire, de manière
périodique ou en continu
● Aucune modification ni transformation des données ne peut être apportée lors
d'une réplication
– Il s'agit là de synchronisation
– Pour les annuaires LDAP, voir le projet Ldap Synchronization Connector (LSC)
Normation – CC-BY-SA
normation.com 26
27. Réplication
● Le mécanisme historique : slurpd
● Présent jusqu'en OpenLDAP 2.3, déprécié en 2.4
● Le serveur OpenLDAP était configuré pour écrire toutes les modifications dans
un journal
● Le démon slurpd tournait en parallèle et prenait chaque modification et
l'appliquait à chaque esclave, grace à un compte administrateur
● Plusieurs inconvénients :
– Mécanisme fragile : désynchronisations régulières et difficiles à détecter
– Fort couplage de configuration maîtres-esclaves
Normation – CC-BY-SA
normation.com 27
28. Réplication
● Le mécanisme syncrepl
● Officiellement "LDAP Sync Replication"
● Syncrepl est normalisé par l'IETF : RFC 4533
● Plusieurs implémentations :
– Serveurs LDAP : OpenLDAP et ApacheDS
– Clients : outils de synchronisation, API Java UnboundID
● Fonctionnement nominal par entrée complète :
– Si un attribut a changé, l'entrée complète est répliquée
● delta-syncrepl : réplication par attribut
– Nécessite une base externe pour stocker les modifications
– Spécifique OpenLDAP
– Non-compatible avec les modes multi-maître
Normation – CC-BY-SA
normation.com 28
29. Réplication
● Réplication simple maître-esclave
● Réplication maître-maître
● Depuis OpenLDAP 2.4 avec syncrepl
● Aucun avantage de répartition de charge !
● Utile pour la haute disponibilité
● Aucune garantie de réplication !
● Synchronicité des changements
– Avec syncrepl, les entrées sont répliquées entièrement
– Avec syncrepl, l'entrée la plus récemment modifiée "gagne"
– Si deux changements sur une même entrée sont réalisées en "peu de temps" (avant
que la réplication ait pu se faire), un changement sera perdu !
● Acceptable ou non selon le fonctionnement de votre application...
Normation – CC-BY-SA
normation.com 29
31. Sommaire
1. De quoi parle-t-on ?
2. OpenLDAP : présentation et principes
3. Intégrité des données
4. Architecture réseau et réplication
5. Monitoring
Jonathan CLARKE - jcl@normation.com Normation – CC-BY-SA
normation.com 31
32. Monitoring
● Supervision à plusieurs niveaux :
● Supervision spécifique LDAP
● Supervision système standard (non spécifique LDAP)
– Indicateurs classiques du serveur :
● ping
● espace disque
● charge
● mémoire disponible
● etc...
– Indicateurs système pertinents pour OpenLDAP :
● Disponiblité du service LDAP (vérification simple sur port TCP 389)
● Tracer l'évolution de la taille sur disque du répertoire de données
● Tracer l'évolution du nombre de connexions TCP ouvertes
Normation – CC-BY-SA
normation.com 32
33. Monitoring
● Supervision spécifique LDAP
● Disponibilité du service LDAP par vérification LDAP
– Recherche simple pour valider que le serveur répond
– Recherche avec authentification pour valider le service d'authentification
– Modification d'un attribut de test sur une entrée de test pour valider le service
d'écriture
– Compte du nombre d'entrées modifiées dans la dernière heure/journée pour valider
les services très sollicités
– Plugins Nagios disponibles sur LTB Project :
● http://ltb-project.org/wiki/documentation/nagios-plugins/check_ldap_dn
● http://ltb-project.org/wiki/documentation/nagios-plugins/check_ldap_query
http://ltb-project.org
Normation – CC-BY-SA
normation.com 33
34. Monitoring
● Supervision spécifique LDAP
● Temps de réponse du service LDAP par vérification LDAP
– Calcul du temps de réponse moyen d'une recherche simple
– Plugin Nagios disponible sur LTB Project :
● http://ltb-project.org/wiki/documentation/nagios-plugins/check_ldap_time
– Plugin Cacti disponible sur LTB Project :
● http://ltb-project.org/wiki/documentation/cacti-plugins/ldap_response_time
Normation – CC-BY-SA
normation.com 34
35. Monitoring
● Supervision spécifique LDAP
● État de la réplication LDAP entre plusieurs serveurs
– Validation que les serveurs esclaves ont le même niveau de synchronisation que le
maître
● Adaptable au multi-maître avec des vérifications croisées
– Plugin Nagios disponible sur LTB Project :
– http://ltb-project.org/wiki/documentation/nagios-plugins/check_ldap_syncrepl_status
Normation – CC-BY-SA
normation.com 35
36. Monitoring
● Supervision spécifique LDAP
● Statistiques d'utilisation obtenues dans cn=monitor
– cn=monitor est un backend spécial qui rend accessible des statistiques sur l'utilisation
et la configuration d'OpenLDAP par une interface LDAP
● Opérations effectuées (tracer dans le temps)
– Recherches, Ajouts, Modifications, Suppressions...
– Plugin Cacti disponible sur LTB Project :
● http://ltb-project.org/wiki/documentation/cacti-plugins/openldap_operations
● Taille des caches BerkeleyDB (backend bdb, hdb)
Normation – CC-BY-SA
normation.com 36
37. Monitoring
● Résumé supervision :
● La disponibilité du service est un minimum
– Disponibilité au sens LDAP (pas que TCP) car OpenLDAP a souvent souffert
de bugs où le port TCP est ouvert mais non fonctionnel...
● Les statistiques d'utilisations (graphiques d'évolution au cours du
temps) sont très utiles pour analyser et prévoir les problèmes
– Lorsqu'un incident survient,
pouvoir voir l'évolution
récente de l'usage
– Prévoir les dépassements
de capacité
Normation – CC-BY-SA
normation.com 37
38. Récapitulons
● Nombreuses fonctionnalités via des overlays
– Souvent simples à configurer
● Des outils hors du projet OpenLDAP
http://ltb-project.org
● Architecture réseau et supervision à adapter...
comme pour tout service critique
Normation – CC-BY-SA
normation.com 38