Comment configurer OpenLDAP et effectuer des tâches administratives LDAP

introduction

La gestion d’un système OpenLDAP peut s’avérer difficile si vous ne savez pas comment configurer votre système ni où trouver les informations importantes dont vous avez besoin. Dans ce guide, nous montrerons comment interroger votre serveur OpenLDAP pour obtenir des informations cruciales et comment modifier votre système en cours d’exécution.

Conditions préalables

Pour commencer, vous devez avoir accès à un système avec OpenLDAP installé et configuré. Vous pouvez apprendre à configurer un serveur OpenLDAP https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-openldap-and-phpldapadmin-on-an-ubuntu-14-04- serveur [ici]. Vous devez être familiarisé avec la terminologie de base utilisée lorsque vous travaillez avec un service d’annuaire LDAP. Le guide peut vous aider à vous familiariser avec ces sujets.

OpenLDAP Online Configuration

Les systèmes LDAP organisent les données qu’ils stockent dans des structures hiérarchiques appelées * arborescence d’informations de répertoire * ou * DIT *. À partir de la version 2.3, la configuration réelle des serveurs OpenLDAP est gérée dans un DIT spécial, généralement associé à une entrée appelée + cn = config +.

Ce système de configuration est appelé configuration en ligne OpenLDAP ou * OLC *. Contrairement à la méthode de configuration obsolète, qui reposait sur la lecture des fichiers de configuration au démarrage du service, les modifications apportées à OLC sont immédiatement mises en œuvre et ne nécessitent souvent pas le redémarrage du service.

Le système OLC utilise des méthodes LDAP standard pour s’authentifier et apporter des modifications. De ce fait, la gestion des administrateurs LDAP chevronnés est souvent transparente, car ils peuvent utiliser les mêmes connaissances, compétences et outils qu’ils utilisent pour exploiter les fichiers DIT. Cependant, pour les débutants en LDAP, il peut s’avérer difficile de se lancer, car vous devrez peut-être savoir utiliser les outils LDAP pour configurer un environnement d’apprentissage.

Ce guide se concentrera sur l’apprentissage de l’administration OpenLDAP de base pour surmonter cette situation délicate et vous permettre de commencer à apprendre le LDAP et à gérer vos systèmes.

Accéder à la DSE racine

Nous allons commencer par parler d’une construction appelée DSE racine, qui contient tous les fichiers DIT individuels de notre serveur. Il s’agit en fait d’une entrée utilisée pour gérer toutes les DIT connues du serveur. En commençant par cette entrée, nous pouvons interroger le serveur pour voir comment il est organisé et pour savoir où aller ensuite.

Que signifie DSE?

Pour interroger la DSE racine, nous devons effectuer une recherche avec une base de recherche vide (null) et avec une étendue de recherche de «base». La portée de la recherche de base signifie que seule l’entrée donnée sera renvoyée. En règle générale, cela est utilisé pour limiter la profondeur de la recherche, mais lorsque vous utilisez la DSE racine, cela est requis (aucune information ne sera renvoyée si une autre étendue de recherche est sélectionnée).

La commande dont nous avons besoin est la suivante:

ldapsearch -H ldap:// -x -s base -b "" -LLL "+"

Nous supposons que vous effectuez cette opération à partir du serveur LDAP lui-même et que vous n’avez pas encore défini de restriction d’accès. Les résultats devraient ressembler à ceci:

Sortie DSE racine

dn:
structuralObjectClass: OpenLDAProotDSE
configContext: cn=config
namingContexts: dc=example,dc=com
supportedControl: 2.16.840.1.113730.3.4.18

. . .

supportedLDAPVersion: 3
supportedSASLMechanisms: GS2-IAKERB
supportedSASLMechanisms: GS2-KRB5
supportedSASLMechanisms: SCRAM-SHA-1
supportedSASLMechanisms: GSSAPI
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: NTLM
supportedSASLMechanisms: CRAM-MD5
entryDN:
subschemaSubentry: cn=Subschema

Nous avons un peu tronqué la sortie. Vous pouvez voir les métadonnées importantes sur ce serveur LDAP. Nous verrons ce que certains de ces éléments veulent dire dans un instant. Pour le moment, nous allons examiner la commande qui a généré cette sortie.

La commande + -H ldap: // + est utilisée pour spécifier une requête LDAP non chiffrée sur l’hôte local. Le + -x + sans aucune information d’authentification indique au serveur que vous souhaitez une connexion anonyme. Nous lui indiquons l’étendue de la recherche et définissons la base de recherche sur null avec + -s base -b" "+. Nous supprimons certaines sorties superflues avec + -LLL +. Enfin, le " + " indique que nous voulons voir les attributs opérationnels qui seraient normalement masqués (c’est là que nous trouverons les informations dont nous avons besoin).

Trouver les fichiers DIT gérés par ce serveur

Pour ce qui nous concerne maintenant, nous essayons de savoir quelles DIT ce serveur LDAP particulier est configuré pour servir. Nous pouvons trouver cela comme la valeur de l’attribut opérationnel + namingContexts + que nous pouvons voir dans la sortie ci-dessus.

Si c’était la seule information que nous voulions, nous pourrions construire une meilleure requête qui ressemblerait à ceci:

ldapsearch -H ldap:// -x -s base -b "" -LLL "namingContexts"

Ici, nous avons appelé l’attribut exact dont nous voulons connaître la valeur. L’entrée de base de chaque DIT sur le serveur est disponible via l’attribut + namingContexts +. Il s’agit d’un attribut opérationnel qui devrait normalement être masqué, mais l’appel de ce dernier explicitement permet son renvoi.

Cela supprimera les autres informations, nous donnant une sortie propre qui ressemble à ceci:

namingContexts recherche

dn:
namingContexts:

Nous pouvons voir que ce serveur LDAP n’a qu’un seul DIT (de gestion) qui est enraciné dans une entrée avec un nom distinctif (DN) de + dc = exemple, dc = com +. Il est possible que cela renvoie plusieurs valeurs si le serveur est responsable de DIT supplémentaires.

Trouver la configuration DIT

Le fichier DIT pouvant être utilisé pour configurer le serveur OpenLDAP n’est pas renvoyé par une recherche de + namingContexts +. L’entrée racine du fichier DIT de config est plutôt stockée dans un attribut dédié appelé + configContext +.

Pour connaître le DN de base du DIT de configuration, vous interrogez cet attribut spécifique, comme nous le faisions auparavant:

ldapsearch -H ldap:// -x -s base -b "" -LLL "configContext"

Le résultat sera probablement le suivant:

configContext recherche

dn:
configContext:

La configuration DIT est basée sur un DN appelé + cn = config +. Comme il est probable que cela corresponde exactement à votre configuration DIT, nous l’utiliserons tout au long de ce guide. Modifiez les commandes données si votre configuration DIT est différente.

Accéder au DIT de configuration

Maintenant que nous connaissons l’emplacement de la configuration DIT, nous pouvons l’interroger pour voir les paramètres actuels. Pour ce faire, nous devons en fait s’écarter légèrement du format que nous utilisions jusqu’à présent.

Comme ce DIT peut être utilisé pour modifier les paramètres de notre système LDAP, certains contrôles d’accès sont en place. Il est configuré, par défaut, pour autoriser l’administration des utilisateurs root ou + sudo + du système d’exploitation.

La commande dont nous avons besoin ressemble à ceci:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q

Pour que cela fonctionne, vous devez utiliser + sudo + avant la commande et remplacer le + -x + dans nos précédentes commandes + ldapsearch + par + +Y EXTERNAL + pour indiquer que nous souhaitons utiliser une méthode d’authentification SASL. . Vous devez également modifier le protocole + ldap: // + en + + ldapi: // + pour effectuer la requête sur une socket Unix. Cela permet à OpenLDAP de vérifier l’utilisateur du système d’exploitation, ce dont il a besoin pour évaluer les propriétés de contrôle d’accès. Nous utilisons ensuite l’entrée `+ cn = config + comme base de notre recherche.

Le résultat sera une longue liste de paramètres. Il peut être utile de le diriger vers un téléavertisseur afin que vous puissiez facilement faire défiler de haut en bas:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q | less

Vous pouvez voir qu’il y a beaucoup d’informations, qui peuvent être très difficiles à traiter. Cette commande imprimait l’arbre de configuration complet. Pour avoir une meilleure idée de la hiérarchie dans laquelle les informations sont organisées et stockées, imprimons à la place les différents DN d’entrée:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q dn

Ce sera une liste beaucoup plus gérable, montrant les titres d’entrée (DN) eux-mêmes au lieu de tout leur contenu:

cn = DN de l’entrée de configuration

dn: cn=config

dn: cn=module{0},cn=config

dn: cn=schema,cn=config

dn: cn={0}core,cn=schema,cn=config

dn: cn={1}cosine,cn=schema,cn=config

dn: cn={2}nis,cn=schema,cn=config

dn: cn={3}inetorgperson,cn=schema,cn=config

dn: olcBackend={0}hdb,cn=config

dn: olcDatabase={-1}frontend,cn=config

dn: olcDatabase={0}config,cn=config

dn: olcDatabase={1}hdb,cn=config

Ces entrées représentent la hiérarchie de configuration dans laquelle différentes zones du système LDAP sont configurées. Examinons quels paramètres sont gérés par chacune de ces entrées:

L’entrée de niveau supérieur contient des paramètres globaux qui s’appliqueront à l’ensemble du système (sauf s’ils sont remplacés dans un contexte plus spécifique). Vous pouvez voir ce qui est stocké dans cette entrée en tapant:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q -s base

Les éléments communs de cette section sont les paramètres d’autorisation généraux, les paramètres de détail du niveau de journalisation, un pointeur sur l’emplacement du fichier PID du processus et des informations sur l’authentification SASL.

Les entrées en dessous configurent des zones plus spécifiques du système. Jetons un coup d’œil aux différents types d’entrées que vous êtes susceptible de voir.

Rechercher une entrée d’administrateur

Maintenant que vous avez accès au menu + cn = config DIET, nous pouvons trouver les racines de tous les DIT du système. Un rootDN est fondamentalement l’entrée administrative. Nous pouvons également trouver le mot de passe (généralement haché) pouvant être utilisé pour se connecter à ce compte.

Pour trouver le rootDN de chacun de vos DIT, tapez:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" "(olcRootDN=*)" olcSuffix olcRootDN olcRootPW -LLL -Q

Vous obtiendrez un imprimé ressemblant à ceci:

Informations rootDN

dn: olcDatabase={1}hdb,cn=config
olcSuffix: dc=example,dc=com
olcRootDN: cn=admin,dc=example,dc=com
olcRootPW: {SSHA}AOADkATWBqb0SJVbGhcIAYF+ePzQJmW+

Si votre système gère plusieurs DIT, vous devriez voir un bloc pour chacun d’eux. Ici, nous pouvons voir que notre entrée admin est + cn = admin, dc = exemple, dc = com + pour le DIT basé sur + dc = exemple, dc = com +. Nous pouvons également voir le mot de passe haché.

Affichage des informations sur le schéma

Les schémas LDAP définissent les objectClasses et les attributs disponibles pour le système. Des schémas peuvent être ajoutés au système pendant l’exécution pour rendre différents types d’objet et attributs disponibles. Cependant, certaines propriétés sont intégrées au système lui-même.

Afficher le schéma intégré

Le schéma intégré se trouve dans l’entrée + cn = schema, cn = config +. Vous pouvez voir le schéma intégré au système LDAP en tapant:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=schema,cn=config" -s base -LLL -Q | less

Cela vous montrera le schéma inclus dans le système OpenLDAP lui-même. Contrairement à tous les autres schémas, il n’est pas nécessaire de l’ajouter au système pour pouvoir l’utiliser.

Afficher un schéma supplémentaire

Le schéma intégré constitue un bon point de départ, mais il ne contient probablement pas tout ce que vous souhaitez utiliser dans vos entrées. Vous pouvez ajouter un schéma supplémentaire à votre système via les méthodes LDIF conventionnelles. Celles-ci seront disponibles en tant que sous-entrées sous l’entrée + cn = schema + qui représente le schéma intégré.

Celles-ci sont généralement nommées avec un nombre entre crochets suivi du nom du schéma, comme + cn = {0} core, cn = schéma, cn = config +. Le nombre entre crochets représente un index utilisé pour déterminer l’ordre dans lequel les schémas sont lus dans le système. Ceci est généralement effectué automatiquement par le système lors de leur ajout.

Pour voir uniquement les noms du schéma supplémentaire chargé sur le système, vous pouvez taper:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=schema,cn=config" -s one -Q -LLL dn

La sortie affichera les noms des sous-entrées. Cela peut ressembler à quelque chose comme ceci, en fonction de ce qui a été chargé sur le système:

schémas supplémentaires

dn: cn={0}core,cn=schema,cn=config

dn: cn={1}cosine,cn=schema,cn=config

dn: cn={2}nis,cn=schema,cn=config

dn: cn={3}inetorgperson,cn=schema,cn=config

Le schéma et le numéro d’index attribué peuvent varier. Vous pouvez voir le contenu d’un schéma spécifique en effectuant une recherche de base et en listant le schéma spécifique qui vous intéresse. Par exemple, si nous voulions voir le schéma + cn = {3} inetorgperson + énuméré ci-dessus, nous pourrions taper:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "" -s base -LLL -Q | less

Si vous souhaitez imprimer tout le schéma supplémentaire, tapez plutôt:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=schema,cn=config" -s one -LLL -Q | less

Si vous souhaitez imprimer tout le schéma, y ​​compris le schéma intégré, utilisez plutôt ceci:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=schema,cn=config" -LLL -Q | less

Modules, backends et paramètres de base de données

Certains autres domaines d’intérêt dans la configuration DIT sont les modules et les divers paramètres de technologie de stockage.

Modules

Les modules sont utilisés pour étendre les fonctionnalités du système OpenLDAP. Ces entrées sont utilisées pour pointer et charger des modules afin d’utiliser leurs fonctionnalités. La configuration réelle est effectuée via d’autres entrées.

Les entrées utilisées pour charger les modules commenceront par + cn = module {#} + où la parenthèse contient un numéro afin de commander le chargement des modules et de différencier les différentes entrées.

Vous pouvez voir les modules chargés dynamiquement sur le système en tapant:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q "objectClass=olcModuleList"

Vous verrez les modules actuellement chargés dans le système:

modules chargés

dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb

Cet exemple particulier n’a qu’un seul module, ce qui nous permet d’utiliser le module backend + hdb +.

Backends

Les entrées de backend sont utilisées pour spécifier la technologie de stockage qui gérera réellement le stockage de données.

Pour voir quels systèmes sont actifs pour votre système, tapez:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q "objectClass=olcBackendConfig"

Le résultat vous donnera une idée de la technologie de stockage utilisée. Cela peut ressembler à quelque chose comme ça:

OpenLDAP actifs backends

dn: olcBackend={0}hdb,cn=config
objectClass: olcBackendConfig
olcBackend: {0}hdb

Bases de données

La configuration réelle de ces systèmes de stockage est effectuée dans des entrées de base de données distinctes. Il doit y avoir une entrée de base de données pour chacun des DIT desservis par un système OpenLDAP. Les attributs disponibles dépendent du backend utilisé pour chacune des bases de données.

Pour voir tous les noms des entrées de base de données sur le système, tapez:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q "olcDatabase=*" dn

Vous devriez voir les DN des entrées de la base de données:

entrées de base de données

dn: olcDatabase={-1}frontend,cn=config

dn: olcDatabase={0}config,cn=config

dn: olcDatabase={1}hdb,cn=config

Parlons un peu de l’utilisation de chacune d’elles:

  • * + olcDatabase = {- 1} frontend, cn = config + *: cette entrée est utilisée pour définir les fonctionnalités de la base de données spéciale «frontend». Il s’agit d’une pseudo-base de données utilisée pour définir les paramètres globaux qui devraient s’appliquer à toutes les autres bases de données (sauf en cas de substitution).

  • * + olcDatabase = {0} config, cn = config + *: cette entrée est utilisée pour définir les paramètres de la base de données + cn = config + que nous utilisons maintenant. La plupart du temps, il s’agira principalement de paramètres de contrôle d’accès, de configuration de réplication, etc.

  • * + olcDatabase = {1} hdb, cn = config + *: cette entrée définit les paramètres d’une base de données du type spécifié (+ hdb + dans ce cas). Celles-ci définiront généralement les contrôles d’accès, les détails de la manière dont les données seront stockées, mises en cache et mises en mémoire tampon, ainsi que l’entrée racine et les détails administratifs du DIT.

Les nombres entre parenthèses représentent une valeur d’index. Ils sont principalement créés automatiquement par le système. Vous devrez substituer la valeur donnée à l’entrée pour pouvoir la référencer avec succès.

Vous pouvez voir le contenu de n’importe laquelle de ces entrées en tapant:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "" -LLL -Q -s base | less

Utilisez les DN d’entrée renvoyés par la commande précédente pour renseigner le champ ++.

Imprimer les attributs opérationnels d’une entrée (métadonnées)

Jusqu’ici, nous avons principalement travaillé avec le répertoire de commandes + cn = config. Le reste de ce guide s’appliquera également aux DIT ordinaires.

Chaque entrée possède des attributs opérationnels qui agissent comme des métadonnées administratives. Ceux-ci peuvent être consultés dans n’importe quel DIT afin de trouver des informations importantes sur l’entrée.

Pour imprimer tous les attributs opérationnels d’une entrée, vous pouvez spécifier l’attribut spécial «» après l'entrée. Par exemple, pour imprimer les attributs opérationnels d'une entrée à ` ​​dc = exemple, dc = com +`, nous pourrions taper:

ldapsearch -H ldap:// -x -s base -b "dc=example,dc=com" -LLL "+"

Cela imprimera tous les attributs opérationnels. Cela ressemblera probablement à quelque chose comme ça:

[list operational attributes]
dn: dc=example,dc=com
structuralObjectClass: organization
entryUUID: cdc658a2-8c3c-1034-8645-e30b83a2e38d
creatorsName: cn=admin,dc=example,dc=com
createTimestamp: 20150511151904Z
entryCSN: 20150511151904.220840Z#000000#000#000000
modifiersName: cn=admin,dc=example,dc=com
modifyTimestamp: 20150511151904Z
entryDN: dc=example,dc=com
subschemaSubentry: cn=Subschema
hasSubordinates: TRUE

Cela peut être utile pour savoir qui a modifié ou créé une entrée à quelle heure, entre autres.

Travailler avec le sous-schéma

Le sous-schéma est une représentation des classes et attributs disponibles. Il affiche des informations similaires aux entrées de schéma du DIET + cn = config, avec quelques informations supplémentaires. Cette fonctionnalité est disponible via des DIT non configurés standard. Par conséquent, l’accès root n’est pas requis.

Trouver le sous-schéma

Pour trouver le sous-schéma d’une entrée, vous pouvez interroger tous les attributs opérationnels d’une entrée, comme précédemment, ou vous pouvez demander l’attribut spécifique qui définit le sous-schéma de l’entrée (+ subschemaSubentry +):

ldapsearch -H ldap:// -x -s base -b "dc=example,dc=com" -LLL subschemaSubentry

Ceci affichera l’entrée de sous-schéma associée à l’entrée actuelle:

[list subchema entry]
dn: dc=chilidonuts,dc=tk
subschemaSubentry:

Il est courant que toutes les entrées d’une arborescence partagent le même sous-schéma. Vous n’aurez donc généralement pas à interroger cette entrée pour chaque entrée.

Affichage du sous-schéma

Pour afficher le contenu de l’entrée de sous-schéma, nous devons interroger l’entrée de sous-schéma que nous avons trouvée ci-dessus avec une portée de «base». Toutes les informations importantes sont stockées dans des attributs opérationnels, nous devrons donc utiliser à nouveau le sélecteur spécial «+».

La commande dont nous avons besoin est:

ldapsearch -H ldap:// -x -s base -b "<^>cn=subschema" -LLL "+" | less

Ceci affichera l’intégralité de l’entrée du sous-schéma. Nous pouvons filtrer en fonction du type d’informations que nous recherchons.

Si vous souhaitez voir les définitions de syntaxe LDAP, vous pouvez filtrer en tapant:

ldapsearch -H ldap:// -x -s base -b "cn=subschema" -LLL ldapSyntaxes | less

Si vous souhaitez afficher les définitions qui contrôlent le traitement des recherches pour faire correspondre les entrées, tapez:

ldapsearch -H ldap:// -x -s base -b "cn=subschema" -LLL matchingRules | less

Pour voir à quels éléments les règles de correspondance peuvent être utilisées, tapez:

ldapsearch -H ldap:// -x -s base -b "cn=subschema" -LLL matchingRuleUse | less

Pour afficher les définitions des types d’attributs disponibles, utilisez:

ldapsearch -H ldap:// -x -s base -b "cn=subschema" -LLL attributeTypes | less

Pour afficher les définitions de objectClass, tapez:

ldapsearch -H ldap:// -x -s base -b "cn=subschema" -LLL objectClasses | less

Conclusion

Bien que l’exploitation d’un serveur OpenLDAP puisse sembler délicate au début, il est utile de connaître le DIT de configuration et de trouver des métadonnées dans le système. La modification de + cn = config + DIT avec des fichiers LDIF peut affecter immédiatement le système en cours d’exécution. En outre, la configuration du système via une DIT vous permet de configurer éventuellement l’administration à distance à l’aide des outils LDAP uniquement. Cela signifie que vous pouvez séparer l’administration LDAP de l’administration du serveur.