THÈME TECHNIQUE - ADMINISTRATION SYSTÈME OpenLDAP Astuces pour en faire l'annuaire d'entreprise idéal Jonathan CLARKE - jcl@ Normation CC-BY-SA
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@ Twitter : @jooooooon42 (ca fait 7 'o', mais c'est pas ma faute...) Normation CC-BY-SA 2
De quoi parle-t-on? Gestion des identités électroniques en entreprise Normation CC-BY-SA 3
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 4
De quoi parle-t-on? Source : Wikipedia Normation CC-BY-SA 5
De quoi parle-t-on? Problématique Authentification d'applications Gestion des droits (administrateurs) Création de comptes (RH) Source unique de «vérité» Origines des mises à jours multiples et variées Point central critique LDAP Normation CC-BY-SA 6
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 7
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 CC-BY-SA 8
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 : Engineering team actuelle : Howard Chu, Pierangelo Maserati et Kurt Zeilenga 14 membres officiels De nombreux contributeurs occasionnels Normation CC-BY-SA 9
OpenLDAP Un annuaire LDAP parmi d'autres... Normation CC-BY-SA 10
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 : Utilitaire : ldapurl ldappasswd, ldapwhoami, ldapexop Une librairie LDAP : libldap Librairie standard en C Normation CC-BY-SA 11
OpenLDAP : architecture du serveur Requête entrante Frontend Overlay 1 Backend bdb/hdb Overlay 2 Backend ldif... Overlay n Backend ldap/meta Backend shell/perl Backend SQL Backend monitor Normation CC-BY-SA 12
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 13
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 14
OpenLDAP : configuration slapd.conf mappé vers cn=config cn=config # options apply to every database <global configuration options> # first database database <database 1 type> <configuration for database 1> # subsequent databases database <database 2 type> # add an overlay to database 2 overlay <overlay type> <configuration for overlay> olcdatabase={-1}frontend olcdatabase={0}config olcdatabase={1}bdb olcdatabase={2}hdb olcoverlay={0]type Normation CC-BY-SA 15
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 CC-BY-SA 16
Intégrité des données Ce qu'on veut éviter Normation CC-BY-SA 17
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 18
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 19
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 20
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 21
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 22
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 23
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 24
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 CC-BY-SA 25
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 26
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 27
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 28
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 29
Réplication serveur-client Normation CC-BY-SA 30
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 CC-BY-SA 31
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 32
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 33
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 34
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 35
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 36
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 37
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 38
Questions? Normation CC-BY-SA