Uubu.org

Systèmes d'information: une approche OpenSource

OpenLDAP - Configuration de base

Description des étapes de configuration initiales

Le 12 avril 2014 , Aucun commentaire pour cet article


Dans cet article, je décris une configuration initiale d'OpenLDAP. La configuration sera proche du minimum requis pour démarrer le serveur. J'écrirai d'autres articles dédiés à des configurations plus avançées.

OpenLDAP est un serveur modulaire basé sur le protocole LDAP (Lightweight Directory Access Protocol) lui-même dérivé des annuaires DAP X.500 qui ne sont plus utilisés. LDAP est donc un annuaire DAP léger, puisque c'est à l'origine une version simplifiée du protocole. Au fil des ans, il a intégré de nombreuses fonctionnalités X.500 et même plus de nos jours. La version 3 du protocole a apporté de nombreuses améliorations, notamment en terme de sécurité, internationalisation, et l'ajout des opérations étendues.

Un annuaire LDAP peut se définir comme une base d'objets hiérarchisée et optimisée pour la lecture.

 

Définitions

Avant d'aller plus loin, un petit refresh sur les définitions clés importantes pour la suite.

DIB Directory Information Base
DUA Directory User Agent
DSA Directory System Agent
DSE DSA-Specific Entry
DIT Directory Information Tree
RDN Relative Distinguished Name
AVA Attribute Value Assertions
RootDSE La racine d'un DIT est un DSE et ne fait partie d'aucun contexte de nommage (ou d'un subtree). Il fournis des informations sur le serveur lui-même ou spécifiques à d'autres serveurs.
Naming Context La plus grande collection d'entrées, commençant à une entrée maître, et incluant tous ses subordonnés et leur subordonnés, jusqu’aux entrées qui sont maître sur d’autres serveurs.
Backend Moteur de base de données
Frontend Le DSA, gère les échanges avec les DUA
Overlay Modules optionnels agissant comme un hook juste en dessous du frontend.

 

Configuration

Les directives de configuration d'OpenLDAP sont hiérarchisées. Ainsi, les directives de configuration globale sont tout en haut de cette hiérarchie.

 

Directives de configuration globale

la configuration global se trouve dans cn=config, il contient tous les paramètres propre au serveur. La classe objet olcGlobal embarquée permet de définir le jeu de fonctionnalités à autoriser, les rêgles d'authentification et d'autorisation, les paramètres de connexion et timeout, les index initiaux, les paramètres de sécurité, etc.

voici un exemple de configuration, n'incluant que quelques options pour rester le plus simple possible.

dn: cn=config
objectClass: top
objectClass: olcConfig
objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/slapd/slapd.args
olcLogLevel: none
olcPidFile: /var/run/slapd/slapd.pid
olcToolThreads: 1
structuralObjectClass: olcGlobal

 

olcGlobal, contient les options de configuration global au serveur.

Avant d'aller plus loin, il est intérressant de démarrer le serveur. Celà permet, entre autre, de visualiser le schéma embarqué, qu'il est intérressant de connaître et sera utile dans l'article consacré au schéma LDAP.

 

Directives de configuration du frontend et des bases

frontend est spécial et contient des directives de base de données communes à toutes les autres. Il est toujours x-ordered à -1.

dn: olcDatabase={-1}frontend,cn=config
objectClass: top
objectClass: olcConfig
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
olcDatabase: {-1}frontend
olcAddContentAcl: TRUE
olcLastMod: TRUE
olcMaxDerefDepth: 0
olcReadOnly: FALSE
olcSchemaDN: cn=Subschema
olcSyncUseSubentry: FALSE
olcMonitoring: TRUE
structuralObjectClass: olcDatabaseConfig

 

config est également spécial et contient des directives communes. A noter qu'il contient un compte qui a tous les droits sur la configuration. Il est toujours x-ordered à 0.


dn: olcDatabase={0}config,cn=config
objectClass: top
objectClass: olcConfig
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to *  by * none
olcAddContentAcl: TRUE
olcLastMod: TRUE
olcMaxDerefDepth: 15
olcReadOnly: FALSE
olcRootDN: cn=config
olcRootPW:: e1NTSEF9eHdZMjRxM09sUkFvVmwxVWt6bXU2TXBPTWdDVWRiS2o=
olcSyncUseSubentry: FALSE
olcMonitoring: TRUE
structuralObjectClass: olcDatabaseConfig

 

Directives de configuration de backend

Les backends sont très simples à déclarer:

dn: olcBackend=mdb,cn=config
objectClass: top
objectClass: olcConfig
objectClass: olcBackendConfig
olcBackend: mdb
structuralObjectClass: olcBackendConfig

olcBackendConfig n'a qu'un attribut: olcBackend

 

Directives de configuration de schéma

cn=schema.ldif contient le schéma embarqué et est créé automatiquement. Les entrées sous cn=schema sont des directives olcSchemaConfig qui permettent de définir les OID, syntaxes, types d'attributs, classes d'objet, etc. Je vais consacrer un article sur les shémas, je n'en discute donc pas ici.

 

Directives de configuration de bases de données

La déclaration d'une base de données se fait avec olcDatabase:

dn: olcDatabase=mdb,cn=config
objectClass: top
objectClass: olcConfig
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: Mdb
olcDbDirectory: /var/lib/data/
olcAccess: to * by dn="cn=admin,dc=uubu,dc=fr" write by * read
olcSuffix: dc=uubu,dc=fr
olcRootDN: cn=admin,dc=uubu,dc=fr
olcRootPW:: e1NTSEF9eHdZMjRxM09sUkFvVmwxVWt6bXU2TXBPTWdDVWRiS2o=
olcDbCheckpoint: 512 30
olcDbIndex: objectClass eq

Ici les directives olcDatabaseConfig sont facilement compréhensibles, le répertoire où placer les fichiers de la base, le suffixe, compte et mot de passe admin, et une ACL. Les directives spécifiques à LMDB sont destinés à définir les index et la fréquence de vidage de tampons.

 

Directives de configuration des modules

les modules se déclarent dans des sous-entrées cn=module. Voici un exemple de déclaration d'un backend lmdb:

dn: cn=module,cn=config
objectClass: top
objectClass: olcConfig
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib/ldap
olcModuleLoad: back_mdb
structuralObjectClass: olcModuleList

olcModuleList définis 2 attributs, olcModulePath, et olcModuleLoad qui est un attribut multi-valué, et spécifie le ou les modules à charger. À noter que si OpenLdap est compilé avec les module statiquement, ces objets sont inutiles et génèreront une erreur si vous tentez de les importer.

Pour plus de clareté, il est préférable de définir plusieurs entrées module, au moins un pour les backend et un pour les overlay, voir un par module à charger s'il y'en a peu.

 

Aller un peu plus loin

Configurer Monitor

Le backend monitor permet de récupérer des informations sur le serveur. La base de données est maintenue automatiquement par slapd.

dn: olcDatabase={2}Monitor,cn=config
objectClass: top
objectClass: olcConfig
objectClass: olcDatabaseConfig
objectClass: olcMonitorConfig
olcDatabase: {2}monitor
olcAccess: {0}to dn.subtree="cn=Monitor" by dn.exact="uid=Admin,dc=uubu,dc=fr" read by * none

 

Ajouter des overlay

Pour ajouter un overlay, nous allons déclarer le module unique et le configurer pour dc=uubu,dc=fr:

dn: cn=module,cn=config
objectClass: top
objectClass: olcConfig
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib/ldap
olcModuleLoad: unique
structuralObjectClass: olcModuleList

olcUniqueConfig devient disponible, nous pouvons le paramétrer:

dn: olcOverlay=unique,olcDatabase={1}mdb,cn=config
objectClass: top
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcUniqueConfig
olcOverlay: unique
olcUniqueURI: ldap:///?cn?sub?(objectClass=inetOrgPerson)

 

Démarrer le serveur

Avant de démarrer le serveur, il y'a quelques étapes importantes:

- créer un utilisateur:groupe dédié (ex: openldap:openldap)

- le fichier olcArgsFile, le répertoire de configuration et les répertoires contenant les bases de données doivent tous être possédés par cet utilisateur:groupe

L'import des directives de configuration est importante, en suivant cet ordre:

- cn=config

- cn=schema, olcModule et olcBackend

- olcDatabase

- olcOverlay puis vos données

 

Commandes utiles

Quelques commandes utiles dans cet article:

Ajouter vos fichiers de configuration:

slapadd -F /etc/ldap/slapd.d/ -bcn=config -l ./path/to/my/file.ldif

visualiser la configuration:

slapcat -bcn=config

pour cibler le schéma:

slapcat -bcn=schema,cn=config

démarrer le serveur:

/usr/sbin/slapd -F /etc/ldap/slapd.d -h ldap:///:389 -u openldap -g openldap

Aucun commentaire pour cet article

Note: Les commentaires sont temporaiment désactivés, merci de contacter l'auteur par mail