Structure d’un filtre LDAP
Un filtre LDAP décrit les objets que doit renvoyer une recherche. Chaque condition est entre parenthèses et l’opérateur vient en premier : (&(a)(b)) signifie « a et b », (|(a)(b)) « a ou b », (!(a)) « pas a ». C’est vite écrit et vite mal parenthésé, d’où le constructeur.
Ce qui diffère dans Active Directory
- Trouver les utilisateurs :
(objectClass=user)seul renvoie aussi les ordinateurs, car les comptes ordinateur héritent de « user ». Fiable :(&(objectCategory=person)(objectClass=user)). - Bits de userAccountControl : la désactivation d’un compte est stockée dans un seul bit. On l’interroge avec la règle
1.2.840.113556.1.4.803(ET binaire), p. ex.(userAccountControl:1.2.840.113556.1.4.803:=2). L’outil affiche la signification des bits. - Groupes imbriqués :
memberOf=…ne trouve que les membres directs. Avec1.2.840.113556.1.4.1941(LDAP_MATCHING_RULE_IN_CHAIN), les membres des sous-groupes sont aussi trouvés. - Valeurs de temps :
lastLogonTimestamp,pwdLastSetetaccountExpirescomptent des pas de 100 nanosecondes depuis 1601 (FILETIME). Le convertisseur ci-dessous transforme une date.lastLogonTimestampn’est répliqué qu’environ tous les 14 jours, ce qui suffit pour « inactif depuis 90 jours ».
Caractères spéciaux dans les valeurs
Les caractères *, (, ), \ et NUL s’écrivent \2a, \28, \29, \5c et \00 dans une valeur (RFC 4515). Le constructeur le fait automatiquement. Un nom de groupe comme « Ventes (Nord) » devient Ventes \28Nord\29. En PowerShell, le filtre se met entre apostrophes pour que $ et ` ne soient pas interprétés.
D’autres outils pour l’administration : filtre tcpdump, calculateur de sous-réseaux et recherche DNS.
FAQ
Pourquoi mon filtre objectClass=user renvoie-t-il aussi des ordinateurs ?
Parce que la classe « computer » dérive de « user » dans AD. Ajoute (objectCategory=person) et seuls les utilisateurs restent. C’est aussi plus rapide, car objectCategory est indexé.
Comment trouver tous les membres d’un groupe, sous-groupes compris ?
Avec (memberOf:1.2.840.113556.1.4.1941:=CN=Groupe,OU=…,DC=…). La valeur doit être le nom distinctif complet du groupe. Une imbrication très profonde peut ralentir la requête.
Comment interroger les comptes désactivés ou verrouillés ?
Désactivés : (userAccountControl:1.2.840.113556.1.4.803:=2). Verrouillés : (lockoutTime>=1). AD ne gère plus le bit 16 de userAccountControl. lockoutTime reste défini après la fin du verrouillage jusqu’à la prochaine connexion.
Mes filtres sont-ils envoyés quelque part ?
Non. Constructeur, vérification et conversion fonctionnent entièrement dans ton navigateur. Seule la barre d’adresse contient le filtre actuel, pour pouvoir le partager en lien.
Cela fonctionne-t-il avec OpenLDAP ?
Oui, la syntaxe est normalisée (RFC 4515). OpenLDAP ne connaît cependant pas les règles propres à AD pour les bits et les groupes imbriqués, et les attributs y portent souvent d’autres noms, p. ex. uid au lieu de sAMAccountName.