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 |
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 |
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)" |
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 |
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))" |
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