Comment gérer et utiliser les serveurs LDAP avec les utilitaires OpenLDAP

introduction

Les systèmes LDAP peuvent sembler difficiles à gérer si vous ne maîtrisez pas bien les outils disponibles, les informations et les méthodes requises par LDAP. Dans ce guide, nous allons montrer comment utiliser les outils LDAP développés par l'équipe OpenLDAP pour interagir avec un serveur d'annuaire LDAP.

Conditions préalables

Pour commencer, vous devez avoir accès à un système avec OpenLDAP installé et configuré. Vous pouvez apprendre comment configurer un serveur OpenLDAPhere. Vous devez être familiarisé avec la terminologie de base utilisée lorsque vous travaillez avec un service d'annuaire LDAP. This guide peut être utilisé pour se familiariser avec ces sujets.

Installer les outils

Les conditions préalables ci-dessus supposent que vous avez déjà accès à un système LDAP, mais que les outils OpenLDAP décrits dans ce guide ne sont peut-être pas déjà installés.

Sur un système Ubuntu ou Debian, vous pouvez installer ces outils via les référentielsapt. Mettez à jour votre index de paquet local et installez-le en tapant:

sudo apt-get update
sudo apt-get install ldap-utils

Sur CentOS ou Fedora, vous pouvez obtenir les fichiers appropriés en utilisantyum. Installez-les en tapant:

sudo yum install openldap-clients

Une fois que vous avez installé les bons paquets, continuez ci-dessous.

Connexion à l'instance LDAP

La plupart des outils OpenLDAP sont extrêmement flexibles, sacrifiant une structure de commande concise pour la capacité d'interagir avec des systèmes dans plusieurs rôles différents. Pour cette raison, un utilisateur doit sélectionner une variété d'arguments simplement pour exprimer le strict minimum nécessaire pour se connecter à un serveur LDAP.

Dans cette section, nous allons nous concentrer sur la construction des arguments nécessaires pour contacter le serveur en fonction du type d'opération que vous souhaitez effectuer. Les arguments discutés ici seront utilisés dans une variété d'outils, mais nous utiliseronsldapsearch à des fins de démonstration.

Spécifier le serveur

Les outils OpenLDAP nécessitent que vous spécifiiez une méthode d'authentification et un emplacement de serveur pour chaque opération. Pour spécifier le serveur, utilisez l'indicateur-H suivi du protocole et de l'emplacement réseau du serveur en question.

Pour une communication de base non chiffrée, le schéma de protocole seraldap:// comme ceci:

ldapsearch -H ldap://server_domain_or_IP . . .

Si vous communiquez avec un serveur local, vous pouvez laisser le nom de domaine ou l'adresse IP du serveur (vous devez toujours spécifier le schéma).

Si vous utilisez LDAP sur SSL pour vous connecter à votre serveur LDAP, vous souhaiterez plutôt utiliser le schémaldaps:// (notez qu'il s'agit d'une méthode obsolète. Le projet OpenLDAP recommande d'utiliser plutôt une mise à niveau STARTTLS sur le port LDAP normal. Apprenez à configurer cecihere):

ldapsearch -H ldaps://server_domain_or_IP . . .

Ces protocoles supposent le port par défaut (389 pour LDAP conventionnel et636 pour LDAP sur SSL). Si vous utilisez un port non standard, vous devrez l’ajouter à la fin avec un signe deux-points et le numéro de port.

Pour vous connecter à un annuaire LDAP sur le serveur que vous interrogez sur Linux IPC (communication interprocessus), vous pouvez utiliser le protocoleldapi://. Ceci est plus sécurisé et nécessaire pour certaines tâches d'administration:

ldapsearch -H ldapi:// . . .

Puisque le schémaldapi nécessite une connexion locale, nous n'aurons jamais à spécifier un nom de serveur ici. Toutefois, si vous avez modifié l'emplacement du fichier de socket dans la configuration du serveur LDAP, vous devrez spécifier le nouvel emplacement de socket dans l'adresse.

Reliure anonyme

LDAP nécessite que les clients s'identifient eux-mêmes afin que le serveur puisse déterminer le niveau d'accès aux demandes d'octroi. Cela fonctionne en utilisant un mécanisme LDAP appelé «liaison», qui est fondamentalement juste un terme pour associer votre demande à une entité de sécurité connue. LDAP comprend trois types d’authentification distincts.

Le type d'authentification le plus générique qu'un client peut utiliser est une liaison «anonyme». C'est à peu près l'absence d'authentification. Les serveurs LDAP peuvent catégoriser certaines opérations comme accessibles à tous (généralement, par défaut, le DIT destiné au public est configuré en lecture seule pour les utilisateurs anonymes). Si vous utilisez une liaison anonyme, ces opérations seront disponibles.

Les outils OpenLDAP supposent l'authentification SASL (nous en discuterons brièvement) par défaut, donc pour permettre une liaison anonyme, nous devons donner l'argument-x. Combiné avec la spécification du serveur, cela ressemblera à ceci:

ldapsearch -H ldap://server_domain_or_IP -x

Si vous tapez cela sans fournir d'arguments supplémentaires, vous devriez obtenir quelque chose comme ceci:

Sortie pour ldapsearch avec une liaison anonyme

# extended LDIF
#
# LDAPv3
# base <> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# search result
search: 2
result: 32 No such object

# numResponses: 1

Cela indique que l’outil n’a pas trouvé ce que nous avons recherché. Comme nous n’avons pas fourni de paramètres de requête, cela est prévu, mais cela nous indique que notre liaison anonyme a été acceptée par le serveur.

Authentification Simple

La deuxième méthode d'authentification sur un serveur LDAP consiste à effectuer une simple liaison. Une simple liaison utilise une entrée du serveur LDAP pour authentifier la demande. Le DN (nom distinctif) de l'entrée sert de nom d'utilisateur pour l'authentification. À l'intérieur de l'entrée, un attribut définit un mot de passe qui doit être fourni lors de la requête.

Recherche de l'entrée racine DIT et de la liaison RDNDN

Pour vous authentifier à l'aide d'une authentification simple, vous devez connaître l'élément parent en haut de la hiérarchie DIT, appelé l'entrée racine, de base ou suffixe, sous lequel toutes les autres entrées sont placées. Vous devez également connaître le nom distinctif auquel vous souhaitez vous connecter.

En règle générale, lors de l'installation du serveur LDAP, une DIT initiale est configurée et configurée avec une entrée administrative, appelée rootDN, et un mot de passe. Lors du démarrage, ce sera le seul DN configuré pour les liaisons.

Si vous ne connaissez pas l'entrée racine du serveur LDAP auquel vous vous connectez, vous pouvez interroger une entrée «méta» spéciale en dehors du DIT LDAP normal pour obtenir des informations sur les entrées racine du DIT qu'il connaît (il s'agit de la DSE racine). . Vous pouvez interroger cette entrée pour les noms DIT en tapant:

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

Le serveur LDAP doit renvoyer les entrées racine connues, qui ressemblent à ceci:

Résultats de l'entrée racine LDAP

dn:
namingContexts: dc=example,dc=com

La zone en surbrillance est la racine du DIT. Nous pouvons utiliser ceci pour rechercher l'entrée à lier. L'entrée d'administration utilise généralement la classe d'objetsimpleSecurityObject afin d'obtenir la possibilité de définir un mot de passe dans l'entrée. Nous pouvons utiliser ceci pour rechercher des entrées avec cette classe:

ldapsearch -H ldap://server_domain_or_IP -x -LLL -b "dc=example,dc=com" "(objectClass=simpleSecurityObject)" dn

Cela vous donnera une liste des entrées qui utilisent cette classe. Habituellement, il n'y en a qu'un:

Résultats de la recherche simpleSecurityObject

dn: cn=admin,dc=example,dc=com

C'est le compte rootDN auquel nous pouvons nous connecter. Vous devez avoir configuré un mot de passe pour ce compte lors de l’installation du serveur. Si vous ne connaissez pas le mot de passe, vous pouvez suivrethis guide pour réinitialiser le mot de passe.

Faire le lien

Une fois que vous avez une entrée et un mot de passe, vous pouvez effectuer une simple liaison lors de votre demande d'authentification auprès du serveur LDAP.

Encore une fois, nous devrons spécifier l’emplacement du serveur LDAP et fournir l’indicateur-x pour indiquer que nous ne souhaitons pas utiliser l’authentification SASL. Pour effectuer la liaison réelle, nous devrons utiliser l'indicateur-D pour spécifier le DN auquel se lier et fournir un mot de passe à l'aide de la commande-w ou-W. L'option-w vous permet de fournir un mot de passe dans le cadre de la commande, tandis que l'option-W vous demandera le mot de passe.

Un exemple de liaison de requête au nom de domaine root se présentera comme suit:

ldapsearch -H ldap://server_domain_or_IP -x -D "cn=admin,dc=example,dc=com" -W

Nous devrions obtenir le même résultat que notre lien anonyme, ce qui indique que nos informations d'identification ont été acceptées. La liaison à une entrée vous donne souvent des privilèges supplémentaires qui ne sont pas disponibles via une liaison anonyme. La liaison au rootDN vous donne un accès en lecture / écriture à l'ensemble du DIT, quels que soient les contrôles d'accès.

Authentification SASL

SASL est synonyme d'authentification simple et de couche de sécurité. Il s'agit d'un cadre permettant de relier des méthodes d'authentification à des protocoles afin de fournir un système d'authentification flexible non lié à une implémentation spécifique. Vous pouvez consulter leswikipedia page pour en savoir plus sur les différentes méthodes disponibles.

Votre serveur LDAP ne prendra probablement en charge qu’un sous-ensemble des mécanismes SASL possibles. Pour savoir quels mécanismes il autorise, vous pouvez taper:

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

Les résultats que vous voyez seront différents selon le schéma que vous avez utilisé pour vous connecter. Pour le schémaldap:// non chiffré, la plupart des systèmes autoriseront par défaut:

ldap:// supportedSASLMechanisms

dn:
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: NTLM
supportedSASLMechanisms: CRAM-MD5

Si vous utilisez le schémaldapi://, qui utilise une communication inter-processus sécurisée, vous aurez probablement une liste de choix étendue:

ldapsearch -H ldapi:// -x -LLL -s base -b "" supportedSASLMechanisms

ldapi:// supportedSASLMechanisms

dn:
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: EXTERNAL
supportedSASLMechanisms: NTLM
supportedSASLMechanisms: CRAM-MD5
supportedSASLMechanisms: LOGIN
supportedSASLMechanisms: PLAIN

La configuration de la plupart des méthodes d'authentification SASL peut prendre un certain temps et nous ne couvrirons donc pas beaucoup de détails ici. Alors que l'authentification SASL sort généralement du cadre de cet article, nous devrions parler de la méthodeEXTERNAL que nous voyons disponible pour une utilisation avec le schémaldapi://.

Le mécanismeEXTERNAL indique que l'authentification et la sécurité sont gérées par d'autres moyens associés à la connexion. Par exemple, il peut être utilisé avec SSL pour fournir un cryptage et une authentification.

Le plus souvent, vous le verrez utilisé avec l'interfaceldapi:// avec les utilisateurs root ousudo. Puisqueldapi:// utilise des sockets Unix, l'utilisateur qui lance la requête peut être obtenu et utilisé pour s'authentifier pour certaines opérations. Le DIT utilisé par LDAP pour la configuration utilise ce mécanisme pour authentifier l'utilisateur racine afin qu'il puisse lire et apporter des modifications à LDAP. Ces demandes ressemblent à ceci:

sudo ldapsearch -H ldapi:// -Y EXTERNAL . . .

Ceci est utilisé pour modifier la configuration LDAP qui est généralement conservée dans un DIT en commençant par une entrée racinecn=config.

Configurer un fichier .ldaprc

Nous avons spécifié les informations de connexion principalement sur la ligne de commande jusqu'à présent. Toutefois, vous pouvez économiser du temps en saisissant certaines des valeurs de connexion courantes dans un fichier de configuration.

Le fichier de configuration client global se trouve à/etc/ldap/ldap.conf, mais vous souhaiterez principalement ajouter des modifications au fichier de configuration de votre utilisateur situé dans votre répertoire personnel à~/.ldaprc. Créez et ouvrez un fichier avec ce nom dans votre éditeur de texte:

nano ~/.ldaprc

À l'intérieur, les paramètres de base que vous souhaitez probablement configurer sontBASE,URI etBINDDN:

  • BASE: le DN de base par défaut utilisé pour spécifier l'entrée où les recherches doivent commencer. Ceci sera annulé si une autre base de recherche est fournie sur la ligne de commande (nous en verrons plus dans la section suivante).

  • URI: l'adresse à laquelle le serveur LDAP peut être atteint. Cela devrait inclure un schéma (ldap pour LDAP normal,ldaps pour LDAP sur SSL etldapi pour LDAP sur un socket IPC) suivi du nom et du port du serveur. Le nom peut être laissé si le serveur est situé sur le même ordinateur et le port si le serveur est exécuté sur le port par défaut pour le modèle sélectionné.

  • BINDDN: Ceci spécifie l'entrée LDAP par défaut à laquelle se lier. Ceci est utilisé pour fournir les informations de «compte» pour l'accès que vous souhaitez utiliser. Vous devrez toujours spécifier un mot de passe sur la ligne de commande.

Cela prendra en charge les informations d'authentification simples. Si vous utilisez l'authentification SASL, consultezman ldap.conf pour voir les options de configuration des informations d'identification SASL.

Si l’entrée de base de notre LDAP estdc=example,dc=com, le serveur est situé sur l’ordinateur local et que nous utilisons lescn=admin,dc=example,dc=com pour nous lier, nous pourrions avoir un fichier~/.ldaprc qui ressemble à ceci:

~/.ldaprc

BASE    dc=example,dc=com
URI     ldap://
BINDDN  cn=admin,dc=example,dc=com

En utilisant cela, nous pourrions effectuer une recherche de base en spécifiant simplement une authentification non-SASL et en fournissant le mot de passe associé à l'entrée admin. Ceci fournirait une recherche complète de sous-arborescence du DN de base par défaut que nous avons spécifié:

ldapsearch -x -w password

Cela peut aider à raccourcir vos options de connexion standard lorsque vous utilisez les utilitaires LDAP. Tout au long de ce guide, nous allons inclure les informations de connexion dans les commandes afin d’être explicites, mais lorsqu’elles sont exécutées, vous pouvez supprimer toute partie spécifiée dans votre fichier de configuration.

Utilisation de ldapsearch pour interroger les entrées DIT et Lookup

Maintenant que nous savons comment nous authentifier et spécifier un serveur LDAP, nous pouvons commencer à parler un peu plus des outils réellement à votre disposition. Pour la plupart de nos exemples, nous supposerons que nous effectuons ces opérations sur le même serveur que celui qui héberge le serveur LDAP. Cela signifie que nos spécifications d’hôte seront vides après le schéma. Nous supposerons également que l’entrée de base du DIT que le serveur gère est pourdc=example,dc=com. Le rootDN seracn=admin,dc=example,dc=com. Commençons.

Nous allons commencer parldapsearch, puisque nous l’avons utilisé dans nos exemples jusqu’à présent. Les systèmes LDAP sont optimisés pour les opérations de recherche, de lecture et de recherche. Si vous utilisez un annuaire LDAP, la majorité de vos opérations seront probablement des recherches ou des recherches. L'outilldapsearch est utilisé pour interroger et afficher des informations dans un LDAP DIT.

Nous avons couvert une partie de la syntaxe responsable du nommage et de la connexion au serveur, qui ressemble à ceci:

ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -W

Cela nous donne le minimum nécessaire pour nous connecter et nous authentifier à l’instance LDAP exécutée sur le serveur. Cependant, nous ne cherchons pas vraiment quoi que ce soit. Pour en savoir plus, nous devrons discuter des concepts de base de recherche et de portée de recherche.

Base de recherche et portée

Dans LDAP, l'endroit où commence une recherche est appelé lessearch base. Il s’agit d’une entrée dans un DIT à partir de laquelle l’opération commencera et servira d’ancre. Nous spécifions la base de recherche en passant le nom de l'entrée avec l'indicateur-b.

Par exemple, pour commencer à la racine de notredc=example,dc=com DIT, nous pouvons l'utiliser comme base de recherche, comme ceci:

ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com"

Cette commande doit produire chaque entrée sous l'entréedc=example,dc=com à laquelle l'utilisateur auquel vous êtes lié a accès. Si nous utilisons une entrée différente, nous aurions une autre section de l’arbre. Par exemple, si nous commençons par l'entrée admin, vous ne pouvez obtenir que l'entrée admin elle-même:

ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "cn=admin,dc=example,dc=com"

base de recherche sur cn = admin, dc = exemple, dc = com

# extended LDIF
#
# LDAPv3
# base  with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# admin, example.com
dn: cn=admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9ejN2UmHoRjdha09tQY96TC9IN0kxYUVCSjhLeXBsc3A=

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Nous avons spécifié la base dans ces exemples, mais nous pouvons mieux définir la manière dont l'outil recherche les résultats en spécifiant l'étendue de la recherche. Cette option est définie par l'option-s et peut être l'une des suivantes:

  • sub: la portée de recherche par défaut si aucune autre n'est spécifiée. Ceci recherche l'entrée de base elle-même et tous les descendants tout au long de l'arbre. C'est la plus grande portée.

  • base: Cela recherche uniquement la base de recherche elle-même. Il est utilisé pour renvoyer l'entrée spécifiée dans la base de recherche et mieux définie en tant que recherche qu'une recherche.

  • one: Ceci recherche uniquement les descendants / enfants immédiats de la base de recherche (le niveau de hiérarchie unique sous la base de recherche). Cela n'inclut pas la base de recherche elle-même ni la sous-arborescence située en dessous d'une de ces entrées.

  • children: Cela fonctionne de la même manière que la portée desub, mais il n'inclut pas la base de recherche elle-même dans les résultats (recherche chaque entrée en dessous, mais n'inclut pas la base de recherche).

En utilisant l'indicateur-s et l'indicateur-b, nous pouvons commencer à façonner les zones du DIT dans lesquelles l'outil doit se pencher. Par exemple, nous pouvons voir tous les enfants de premier niveau de notre entrée de base en utilisant la portéeone, comme ceci:

ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -s one -LLL dn

Nous avons ajouté-LLL dn à la fin pour filtrer un peu la sortie. Nous en discuterons plus loin dans l’article. Si nous avions ajouté quelques entrées supplémentaires à l’arbre, cela aurait pu donner des résultats comme celui-ci:

sortie

dn: cn=admin,dc=example,dc=com

dn: ou=groups,dc=example,dc=com

dn: ou=people,dc=example,dc=com

Si nous voulions tout voir sous l'entréeou=people, nous pourrions définir cela comme base de recherche et utiliser la portéechildren:

ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "ou=people,dc=example,dc=com" -s children -LLL dn

En peaufinant la base de recherche et le périmètre de recherche, vous ne pouvez utiliser que les parties du DIT qui vous intéressent. Cela améliorera les performances de votre requête en recherchant uniquement une section de l'arborescence et en renvoyant uniquement les entrées qui vous intéressent.

Suppression des sorties superflues

Avant de continuer, voyons comment supprimer une partie de la sortie supplémentaire queldapsearch produit.

La majorité de la sortie supplémentaire est contrôlée avec les indicateurs-L. Vous pouvez utiliser de zéro à trois indicateurs-L selon le niveau de sortie que vous souhaitez voir. Plus vous ajoutez d'indicateurs-L, plus d'informations sont supprimées. Il peut être judicieux de ne supprimer aucune sortie lors de l’apprentissage ou du dépannage, mais lors du fonctionnement normal, l’utilisation des trois niveaux entraînera probablement une meilleure expérience.

Si vous utilisez l'authentification SASL, lors de la modification du DITcn=config par exemple, vous pouvez en outre utiliser l'indicateur-Q. Cela activera le mode silencieux SASL, qui supprimera toute sortie liée à SASL. C'est bien lorsque vous utilisez la méthode-Y EXTERNAL, mais soyez prudent si vous utilisez un mécanisme qui demande des informations d'identification car cela sera également supprimé (conduisant à un échec d'authentification).

Filtres de recherche et filtres d'attributs de sortie

Pour effectuer une recherche au lieu de simplement afficher l'intégralité de l'étendue de la recherche, vous devez spécifier le filtre de recherche.

Ceux-ci peuvent être placés vers la fin de la ligne et prendre la forme d'un type d'attribut, d'un opérateur de comparaison et d'une valeur. Souvent, ils sont spécifiés entre guillemets pour empêcher toute interprétation par le shell. Les parenthèses sont utilisées pour indiquer les limites d’un filtre à un autre. Celles-ci sont facultatives dans les recherches simples à attribut unique, mais requises dans les filtres composés plus complexes. Nous les utiliserons ici pour mieux indiquer où se trouve le filtre de recherche.

À titre d'exemple, nous pourrions voir s'il y a une entrée dans le DITdc=example,dc=com avec un attribut username (uid) défini sur «jsmith». Ceci recherche dans chaque entrée de la zone de recherche un attribut défini sur cette valeur:

ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(uid=jsmith)"

Nous avons utilisé l’opérateur d’égalité dans l’exemple ci-dessus, qui teste la correspondance exacte de la valeur d’un attribut. Il existe également divers autres opérateurs, qui fonctionnent comme prévu. Par exemple, pour rechercher des entrées quicontainest un attribut, sans vous soucier de l'ensemble de valeurs, vous pouvez utiliser l'opérateur «présence», qui est simplement un signe égal avec un caractère générique sur le côté droit de la comparaison. Nous pourrions rechercher des entrées contenant un mot de passe en tapant:

ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(userPassword=*)"

Certains filtres de recherche utiles sont:

  • Equality: utilise l'opérateur= pour faire correspondre une valeur d'attribut exacte.

  • Presence: utilise=* pour vérifier l'existence de l'attribut sans tenir compte de sa valeur.

  • Greater than or equal: utilise l'opérateur>= pour vérifier les valeurs supérieures ou égales à la valeur donnée.

  • Less than or equal: utilise l'opérateur<= pour vérifier les valeurs inférieures ou égales à la valeur donnée.

  • Substring: utilise= avec une chaîne et le caractère générique* dans le cadre d'une chaîne. Utilisé pour spécifier une partie de la valeur que vous recherchez.

  • Proximity: utilise l'opérateur~= pour faire correspondre approximativement ce qui se trouve à droite. Ceci n'est pas toujours pris en charge par le serveur LDAP (auquel cas une recherche d'égalité ou de sous-chaîne sera effectuée à la place).

Vous pouvez également annuler la plupart des recherches en encapsulant le filtre de recherche dans un ensemble supplémentaire de parenthèses précédées du symbole de négation «!». Par exemple, pour rechercher toutes les entrées d'unité organisationnelle, nous pourrions utiliser ce filtre:

"(ou=*)"

Pour rechercher toutes les entrées qui sont des entrées d'unité organisationnellenot, nous pourrions utiliser ce filtre:

"(!(ou=*)"

Le modificateur de négation inverse la signification du filtre de recherche qui suit.

Après la spécification du filtre, nous pouvons également ajouter des filtres de sortie d'attribut. Ceci est juste une liste d'attributs que vous souhaitez afficher à partir de chaque entrée correspondante. Par défaut, chaque attribut auquel vos informations d'identification ont un accès en lecture est affiché pour chaque entrée correspondante. La définition d’un filtre de sortie d’attribut vous permet de spécifier exactement le type de sortie que vous souhaitez voir.

Par exemple, nous pouvons rechercher toutes les entrées qui ont des ID utilisateur, mais afficher uniquement lescommon name associés de chaque entrée en tapant:

ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(uid=*)" cn

Cela pourrait produire une liste qui ressemble à ceci:

Sortie

dn: uid=bwright,ou=People,dc=example,dc=com
cn: Brian Wright

dn: uid=jsmith1,ou=People,dc=example,dc=com
cn: Johnny Smith

dn: uid=sbrown2,ou=People,dc=example,dc=com
cn: Sally Brown

Si nous voulons également voir la description de leur entrée, nous pouvons simplement l'ajouter à la liste des attributs à afficher:

ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(uid=*)" cn description

Cela montrerait plutôt quelque chose comme ceci:

Sortie

dn: uid=bwright,ou=People,dc=example,dc=com
cn: Brian Wright
description: Brian Wright from Marketing.  Brian takes care of marketing, pres
 s, and community.  Ask him for help if you need any help with outreach.

dn: uid=jsmith1,ou=People,dc=example,dc=com
cn: Johnny Smith
description: Johnny Smith from Accounting.  Johnny is in charge of the company
  books and hiring within the Accounting department.

dn: uid=sbrown2,ou=People,dc=example,dc=com
cn: Sally Brown
description: Sally Brown from engineering.  Sally is responsible for designing
  the blue prints and testing the structural integrity of the design.

Si aucun filtre d'attribut n'est donné, tous les attributs sont retournés. Ceci peut être explicité avec le caractère “*”. Pour renvoyer des attributs opérationnels (attributs de métadonnées spéciaux gérés en arrière-plan pour chaque entrée), vous pouvez utiliser le symbole spécial «+». Par exemple, pour voir les attributs opérationnels pour notre rootDN, nous pourrions taper:

ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -b "dc=example,dc=com" -LLL "(cn=admin)" "+"

Les résultats ressembleraient à ceci:

Sortie

dn: cn=admin,dc=example,dc=com
structuralObjectClass: organizationalRole
entryUUID: cdc718a0-8c3c-1034-8646-e30b83a2e38d
creatorsName: cn=admin,dc=example,dc=com
createTimestamp: 20150511151904Z
entryCSN: 20150514191233.782384Z#000000#000#000000
modifiersName: cn=admin,dc=example,dc=com
modifyTimestamp: 20150514191233Z
entryDN: cn=admin,dc=example,dc=com
subschemaSubentry: cn=Subschema
hasSubordinates: FALSE

Recherche de composé

La recherche composée implique la combinaison de deux filtres de recherche individuels ou plus pour obtenir des résultats plus précis. Les filtres de recherche sont combinés en les enveloppant dans un autre jeu de parenthèses avec un opérateur relationnel en tant que premier élément. Ceci est plus facile démontré qu'expliqué.

Les opérateurs relationnels sont le caractère "&" qui fonctionne comme un ET logique, et le caractère "|" qui signifie un OU logique. Celles-ci précèdent les filtres dont elles définissent les relations dans un ensemble de parenthèses externe.

Donc, pour rechercher une entrée qui a à la fois une description et une adresse email dans notre domaine, nous pourrions construire un filtre comme celui-ci:

"(&(description=*)(mail=*@example.com))"

Pour qu'une entrée soit renvoyée, il faut que ces deux attributs soient définis.

Le symbole OU renverra les résultats si l'un des sous-filtres est vrai. Si nous voulons sortir des entrées pour lesquelles nous avons des informations de contact, nous pourrions essayer un filtre comme celui-ci:

"(|(telephoneNumber=*)(mail=*)(street=*))"

Nous voyons ici que l’opérateur peut s’appliquer à plus de deux sous-filtres. Nous pouvons également imbriquer ces constructions logiques au besoin pour créer des modèles assez complexes.

Utilisation de ldapmodify et de variantes pour modifier ou créer des entrées LDAP

Jusqu'à présent, nous nous sommes concentrés exclusivement sur la commandeldapsearch, qui est utile pour rechercher, rechercher et afficher les entrées et les segments d'entrée dans un LDAP DIT. Cela satisfera la majorité des besoins en lecture seule des utilisateurs, mais nous avons besoin d’un outil différent si nous voulons modifier les objets dans le DIT.

La commandeldapmodify manipule un DIT via l'utilisation de fichiers LDIF. Vous pouvez en savoir plus sur les fichiers LDIF et les détails de leur utilisation pour modifier ou ajouter des entrées en consultantthis guide.

Le format de base deldapmodify correspond étroitement à la syntaxe deldapsearch que nous avons utilisée tout au long de ce guide. Par exemple, vous devrez toujours spécifier le serveur avec l'indicateur-H, vous authentifier à l'aide de l'indicateur-Y pour l'authentification SASL ou les-x,-D et-[W|w]) pour une authentification simple.

Application de modifications à partir d'un fichier LDIF

Après avoir fourni ces options standard, l’action la plus courante consiste à lire un fichier LDIF et à l’appliquer au DIT. Cela peut être accompli avec l'option-f (si vous n'utilisez pas l'option-f, vous devrez saisir une modification en utilisant le format LDIF sur la ligne de commande). Vous devrez créer le fichier LDIF vous-même, en utilisant la syntaxe décrite dans le guide lié à ci-dessus:

ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -f /path/to/file.ldif

Cela lira le fichier LDIF et appliquera les modifications spécifiées dans. Pour la commandeldapmodify, chaque modification LDIF doit avoir unchangetype spécifié. La commandeldapmodify est la forme la plus générale des commandes de manipulation DIT.

Si votre fichier LDIF ajoute de nouvelles entrées et quedoes not inclutchangetype: add pour chaque entrée, vous pouvez utiliser l'indicateur-a avecldapmodify, ou simplement utiliser lesldapadd commande, qui alias essentiellement ce comportement. Par exemple, un fichier LDIF dontincludes leschangetype ressemblerait à ceci:

LDIF avec changetype

dn: ou=newgroup,dc=example,dc=com
changetype: add
objectClass: organizationalUnit
ou: newgroup

Pour traiter ce fichier, vous pouvez simplement utiliserldapmodify:

ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -f /path/to/file.ldif

Cependant, le fichier peut également être construitwithout thechangetype, comme ceci:

LDIF sans type de changement

dn: ou=newgroup,dc=example,dc=com
objectClass: organizationalUnit
ou: newgroup

Dans ce cas, pour ajouter cette entrée au DIT, vous devez soit utiliser l'indicateur-a avecldapmodify, soit utiliser la commandeldapadd. Soit:

ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -a -f /path/to/file.ldif

Ou ca:

ldapadd -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -f /path/to/file.ldif

Des commandes similaires sont disponibles pour la suppression des entrées (ldapdelete) et le déplacement des entrées LDAP (ldapmodrdn). L'utilisation de ces commandes vous évite d'avoir à spécifier respectivementchangetype: delete etchangetype: modrdn dans les fichiers. Pour chacun de ces éléments, vous choisissez le format à utiliser (spécifiez la modification dans le fichier LDIF ou sur la ligne de commande).

Tester les modifications et gérer les erreurs

Si vous souhaitez effectuer une analyse à sec d'un fichier LDIF, vous pouvez utiliser les indicateurs-n et-v. Cela vous indiquera quel changement serait effectué sans modifier le DIT réel:

ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -n -v -f /path/to/file.ldif

Généralement, si une erreur survient lors du traitement d'un fichier LDIF, l'opération est immédiatement interrompue. C’est généralement la solution la plus sûre, car souvent, les demandes de modification ultérieures dans le fichier modifient le fichier DIT en supposant que les modifications antérieures ont été appliquées correctement.

Cependant, si vous souhaitez que la commande continue dans le fichier, en ignorant les modifications à l'origine de l'erreur, vous pouvez utiliser l'indicateur-c. Vous souhaiterez probablement également utiliser l'indicateur-S pour pointer vers un fichier dans lequel les erreurs peuvent être écrites afin de pouvoir corriger les requêtes incriminées et les réexécuter:

ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -c -S /path/to/error_file -f /path/to/file.ldif

De cette façon, vous aurez un journal (avec des commentaires indiquant les entrées incriminées) à évaluer après l'opération.

Diverses autres commandes LDAP

Les commandes que nous avons déjà décrites exécutent les opérations LDAP les plus courantes que vous utiliserez au quotidien. Il existe cependant quelques commandes supplémentaires qu'il est utile de connaître.

ldappasswd

Si certaines de vos entrées LDAP ont des mots de passe, la commandeldappasswd peut être utilisée pour modifier l'entrée. Cela fonctionne en authentifiant à l'aide du compte en question ou d'un compte administratif, puis en fournissant le nouveau mot de passe (et éventuellement l'ancien mot de passe).

L'ancien mot de passe doit être spécifié en utilisant soit l'indicateur-a (l'ancien mot de passe est donné en ligne comme élément suivant), l'indicateur-A (l'ancien mot de passe est demandé), soit le-t flag (l'ancien mot de passe est lu à partir du fichier donné comme élément suivant). Ceci est facultatif pour certaines implémentations LDAP mais requis par d'autres, il est donc préférable de l'inclure.

Le nouveau mot de passe doit être spécifié en utilisant soit l'indicateur-s (le nouveau mot de passe est donné en ligne comme élément suivant), l'indicateur-S (le nouveau mot de passe est demandé), soit le-T flag (le nouveau mot de passe est lu à partir du fichier donné comme élément suivant).

Donc, un changement typique peut ressembler à ceci:

ldappasswd -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w oldpassword -a oldpassword -s newpassword

Si aucune entrée n'est donnée, l'entrée utilisée pour la liaison sera modifiée. Si vous vous liez à une entrée administrative, vous pouvez modifier les autres entrées auxquelles vous avez accès en écriture en les fournissant après la commande.

ldappasswd -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w adminpassword -a oldpassword -s newpassword "uid=user,dc=example,dc=com"

Pour en savoir plus sur la modification et la réinitialisation des mots de passe, consultezthis guide.

ldapwhoami

La commandeldapwhoami peut vous dire comment le serveur LDAP vous voit après l'authentification.

Si vous utilisez une authentification anonyme ou simple, les résultats ne seront probablement pas trop utiles («anonyme» ou exactement l'entrée à laquelle vous vous associez, respectivement). Cependant, pour l'authentification SASL, cela peut donner un aperçu de la façon dont votre mécanisme d'authentification est vu.

Par exemple, si nous utilisons le mécanisme SASL-Y EXTERNAL avecsudo pour effectuer des opérations sur le DITcn=config, nous pourrions vérifier avecldapwhoami pour voir le DN d'authentification:

sudo ldapwhoami -H ldapi:// -Y EXTERNAL -Q

sortie ldapwhoami

dn:gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

Ce n'est pas une entrée réelle dans notre DIT, c'est simplement comment l'authentification SASL est traduite dans un format que le protocole LDAP peut comprendre. L'affichage du nom distinctif d'authentification peut être utilisé pour créer des mappages et des restrictions d'accès. Il est donc utile de savoir comment obtenir ces informations.

ldapurl

L'outilldapurl vous permet de construire des URL LDAP en spécifiant les différents composants impliqués dans votre requête. Les URL LDAP permettent de demander des ressources à un serveur LDAP via une URL normalisée. Ce sont des connexions non authentifiées et sont en lecture seule. De nombreuses solutions LDAP ne prennent plus en charge les URL LDAP pour les demandes de ressources. Par conséquent, leur utilisation peut être limitée en fonction du logiciel que vous utilisez.

L'URL LDAP standard est formatée à l'aide de la syntaxe suivante:

ldap://host:port/base_dn?attr_to_return?search_scope?filter?extension

Les composants sont les suivants:

  • base_dn: le DN de base à partir duquel commencer la recherche.

  • attr_to_return: les attributs des entités correspondantes qui vous intéressent. Ceux-ci doivent être séparés par des virgules.

  • search_scope: la portée de la recherche. Soit base, sous, un, ou des enfants.

  • filter: le filtre de recherche utilisé pour sélectionner les entrées à renvoyer.

  • extension: Les extensions LDAP que vous souhaitez spécifier. Nous ne couvrirons pas ceux-ci ici.

Chacun des éléments est séparé dans l'URL par un point d'interrogation. Vous n'êtes pas obligé de fournir les éléments que vous n'utilisez pas, mais comme le type d'élément est identifié par sa position dans la chaîne, vous devez laisser la "fente" vide pour cet élément, ce qui vous laissera plusieurs points d'interrogation. une rangée. Vous pouvez arrêter l'URL dès que vous avez ajouté vos informations (vous n'avez pas besoin de points d'interrogation à la fin pour représenter les "emplacements" inutilisés).

Par exemple, une URL peut ressembler à ceci:

ldap://localhost:389/dc=example,dc=com?dn,ou?sub?(ou=*)

Si vous deviez introduire cela dans l'outilldapurl, vous utiliseriez l'indicateur-H et mettre l'URL entre guillemets:

ldapurl -H "ldap://localhost:389/dc=example,dc=com?dn,ou?sub?(ou=*)"

La commande le séparerait comme ceci:

sortie ldapurl

scheme: ldap
host: localhost
port: 389
dn: dc=chilidonuts,dc=tk
selector: dn
selector: ou
scope: sub
filter: (ou=*)

Vous pouvez également utiliser ces indicateurs pour inverser le processus et bricoler une URL LDAP. Celles-ci reflètent les différents composants de l'URL LDAP:

  • -S: le schéma d'URL (ldap,ldaps ouldapi). Le schémaldap est par défaut.

  • -h: le nom ou l'adresse du serveur LDAP

  • -p: le port du serveur LDAP. La valeur par défaut dépend du schéma.

  • -b: le DN de base pour démarrer la requête

  • -a: une liste d'attributs séparés par des virgules à renvoyer

  • -s: la portée de recherche à utiliser (base, sous, enfants ou un)

  • -f: le filtre LDAP pour sélectionner les entrées à renvoyer

  • -e: les extensions LDAP à spécifier

En utilisant ceux-ci, vous pouvez taper quelque chose comme ceci:

ldapurl -h localhost -b "dc=example,dc=com" -a dn,ou -s sub -f "(ou=*)"

La commande renverrait l'URL construite, qui ressemblerait à ceci:

sortie ldapurl

ldap://localhost:389/dc=example,dc=com?dn,ou?sub?(ou=*)

Vous pouvez l'utiliser pour créer des URL pouvant être utilisées avec un client LDAP capable de communiquer en utilisant ce format.

ldapcompare

L’outilldapcompare peut être utilisé pour comparer l’attribut d’une entrée à une valeur. Ceci est utilisé pour effectuer des vérifications d'assertion simples afin de valider les données.

Le processus implique une liaison comme vous le feriez normalement en fonction des données interrogées, en fournissant le DN d'entrée et l'assertion à vérifier. L'assertion est donnée en spécifiant un attribut puis une valeur, séparés par un ou deux points. Pour les valeurs de chaîne simples, un seul deux-points doit être utilisé. Un double-point indique qu'une valeur encodée en base64 a été donnée.

Vous pouvez donc affirmer que John est membre du groupe des «utilisateurs intensifs» avec quelque chose comme ceci:

ldapcompare -H ldap:// -x "ou=powerusers,ou=groups,dc=example,dc=com" "member:uid=john,ou=people,dc=example,dc=com"

S'il est dans le groupe, il retourneraTRUE. Sinon, la commande renverraFALSE. Si le DN utilisé pour la liaison n'a pas les privilèges suffisants pour lire l'attribut en question, il renverraUNDEFINED.

Cela pourrait servir de base à un système d'autorisation en vérifiant l'appartenance à un groupe avant d'effectuer les actions demandées.

Conclusion

Vous devriez maintenant avoir une bonne idée de la façon d'utiliser certains utilitaires LDAP pour vous connecter, gérer et utiliser votre serveur LDAP. D'autres clients peuvent fournir une interface plus utilisable à votre système LDAP pour la gestion quotidienne, mais ces outils peuvent vous aider à comprendre les rouages ​​et à fournir un bon accès de bas niveau aux données et aux structures de votre DIT.