ldapsearch

Sur un contrôleur de domaine Windows, ou sur un serveur Linux OpenLDAP, le protocole LDAP permet de centraliser l’authentification. La commande ldapsearch permet de rechercher des entrées dans une arborescence d’annuaires LDAP

Configuration du serveur LDAP

Pour voir la configuration de votre LDAP, on utilise les options cn=config et -Y suivi de EXTERNAL, avoir accès à la configuration est utile pour par exemple modifier les contrôles d’accès ou modifier le mot de passe root. La commande doit être exécutée directement sur le serveur :

# ldapsearch -Y EXTERNE -H ldapi:/// -b cn=config

Pour limiter la recherche aux configurations de la DB, on spécifie la classe olcDatabaseConfig :

# ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config "(objectclass=olcDatabaseConfig)"

Recherche avec ldapsearch

Recherche anonyme

La commande ldapsearch s’utilise avec l’option -x pour s’authentification et -b pour spécifier une recherche. Si vous n’exécutez pas la commande directement sur le serveur LDAP, il faut spécifier l’hôte avec l’option -H :

# ldapsearch -x -b <patternRecherche> -H <ldap_host>

Exemple si le serveur accepte l’authentification anonyme et si aucun filtre n’est spécifié, le client LDAP supposera qu’on souhaite exécuter une recherche sur toutes les classes d’objets de l’arborescence:

# ldapsearch -x -b "dc=ponyville,dc=com" -H ldap://192.168.42.42

# extended DIFF
#
# LDAPv3
# base <dc=ponyville,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# ponyville.com
dn: dc=ponyville,dc=com
objectClass: top
objectclass: dcObject
objectclass: organization
o: ponyville
dc: ponyville

Recherche avec compte admin

Le compte administrateur permet d’afficher des informations supplémentaires, il faut dans ce cas utiliser l’option -D pour préciser le DN et -W pour saisir le mot de passe admin :

# ldapsearch -x -b <patternRecherche> -H <ldap_host> -D <dn_name> -W

Exemple avec un compte admin ayant comme DN cn=admin, dc=ponyville, dc=com :

# ldapsearch -x -b "dc=ponyville,dc=com" -H ldap://192.168.42.42 -D "cn=admin,dc=ponyville,dc=com" -W

Enter LDAP Password:
# extended DIFF
#
# LDAPv3
# base <dc=ponyville,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# ponyville.com
dn: dc=ponyville,dc=com
objectClass: top
objectclass: dcObject
objectclass: organization
o: ponyville
dc: ponyville

Recherches LDAP filtrée

Pour rechercher une entrée filtrée LDAP, on peut ajouter des filtres à la fin de la commande comme le type d’objet et sa valeur ainsi que des options supplémentaires :

# ldapsearch <previous_options> "(object_type)=(object_value)" <optional_attributes>

Pour ajouter plusieurs filtres :

# ldapsearch <previous_options> "<object_type>:<op1>:<op2>:=<object_value>"

Recherche d’utilisateurs

Rechercher tous les comptes

Pour rechercher tous les comptes d’utilisateurs dans l’arborescence de l’annuaire LDAP (ici les utilisateurs appartiennent à la classe d’objets compte) :

# ldapsearch -x -b <search_base> -H <ldap_host> -D <bind_dn> -W "objectclass=account"

Exemple :

# ldapsearch -x -b "dc=ponyville,dc=com" -H ldap://192.168.42.42 -D "cn=admin,dc=ponyville,dc=com" -W "(objectclass=account)"

Enter LDAP Password:
# extended DIFF
#
# LDAPv3
# base <dc=ponyville,dc=com> with scope subtree
# filter: (objectclass=account)
# requesting: ALL
#

# ember, Ponies, ponyville.com
dn: cn=ember,ou=Ponies,dc=ponyville,dc=com
objectClass: top
objectclass: account
objectclass: posixAccount
objectclass: shadowAccount
cn: ember
uid: ember

Rechercher tous les comptes avec des restrictions

En ajoutant des attributs on peut restreindre par exemple la recherche aux CN (cn), l’UID (uid) et répertoire personnel (homeDirectory) :

# ldapsearch -x -b <search_base> -H <ldap_host> -D <bind_dn> -W "objectclass=account" cn uid homeDirectory

Exemple :

# ldapsearch -x -b "dc=ponyville,dc=com" -H ldap://192.168.42.42 -D "cn=admin,dc=ponyville,dc=com" -W "(objectclass=account)" cn uid homeDirectory

Enter LDAP Password:
# extended DIFF
#
# LDAPv3
# base <dc=ponyville,dc=com> with scope subtree
# filter: (objectclass=account)
# requesting: cn uid homeDirectory
#

# ember, Ponies, ponyville.com
dn: cn=ember,ou=Ponies,dc=ponyville,dc=com
cn: ember
uid: ember
homedirectory: /home/ember

Casse

Pour avoir une recherche sensible à la casse :

# ldapsearch <previous_options> "cn:caseExactMatch:=Ember"

Les opérateurs

Les opérateurs ET et OU

Les opérateurs ET et OU fonctionnent entre parenthèses.

Opérateur ET

On utilise le caractère & au début de la requête :

# ldapsearch <previous_options> "(&(<condition_1>)(<condition_2>)...)"

Exemple : trouver toutes les entrées ayant un objectclass égal à account avec un uid égal à ember

# ldapsearch <previous_options> "(&(objectclass=account)(uid=ember))"

Enter LDAP Password:
# extended DIFF
#
# LDAPv3
# base <dc=ponyville,dc=com> with scope subtree
# filter: (objectclass=account)(uid=ember)
# requesting: ALL
#

# ember, Ponies, ponyville.com
dn: cn=ember,ou=Ponies,dc=ponyville,dc=com
objectClass: top
objectclass: account
objectclass: posixAccount
objectclass: shadowAccount
cn: ember
uid: ember
uidNumber: 10001
gidNumber: 10001
homedirectory: /home/ember
loginShell: /bin/bash

Opérateur OU

On utilise le caractère | au début de la requête :

# ldapsearch <previous_options> "(|(<condition_1>)(<condition_2>)...)"

Exemple : trouver toutes les entrées ayant un objectclass égal à account ou égal à organizationalRole

# ldapsearch <previous_options> "(|(objectclass=account)(objectclass=organizationalRole))"

Imbrication ET et OU

Exemple imbriqué : ( | (&(<condition_1>)(<condition_2>)) (&(<condition_3>)(<condition_4>)) )

# ldapsearch <previous_options> "(|(&(<condition_1>)(<condition_2>))(&(<condition_3>)(<condition_4>)))"

Signification : (condition_1 AND condition_2) OR (condition_3 AND condition_4)

Négation

On utilise le caractère ! au début de la requête :

# ldapsearch <previous_options> "(!(<condition_1>)(<condition_2>)...)"

Exemple : trouver toutes les entrées n’ayant PAS d’attribut cn égal à ember

# ldapsearch <previous_options> "(!(cn=ember))"

Wildcards

Le caractère * est utilisé comme joker.

Recherche de tous les objets dans l’arborescence des répertoires

Ici * permet d’afficher tous les objets et tous les attributs disponibles dans l’arborescence :

# ldapsearch -x -b <search_base> -H <ldap_host> -D <bind_dn> -W "objectclass=*"

Utiliser les wildcards

Ici il peut être positionné avant ou après la recherche :

# ldapsearch <previous_options> "(object_type)=*(object_value)"
# ldapsearch <previous_options> "(object_type)=(object_value)*"

Exemple : rechercher toutes les entrées ayant un attribut uid commençant par la lettre e

# ldapsearch <previous_options> "uid=e*"

Documentation

https://devconnected.com/how-to-search-ldap-using-ldapsearch-examples/
https://ldapwiki.com
https://ldapwiki.com/wiki/LDAP%20Filter%20Choices

> Partager <