LDAP-Filter: 20 Beispiele für Active Directory

Die meisten LDAP-Abfragen im Active Directory folgen einer Handvoll Muster. Hier sind die 20 häufigsten, jeweils mit kurzer Erklärung und einem Klick zum Anpassen im Filter-Builder.

So setzt du die Filter ein

# PowerShell (RSAT, Modul ActiveDirectory)
Get-ADUser -LDAPFilter '(&(objectCategory=person)(objectClass=user)(mail=*))' -Properties mail

# Linux/macOS
ldapsearch -H ldaps://dc1.example.com -D 'svc-ldap@example.com' -W \
  -b 'DC=example,DC=com' '(&(objectCategory=person)(objectClass=user)(mail=*))' sAMAccountName mail

# Windows-Bordmittel
dsquery * -filter "(&(objectCategory=person)(objectClass=user)(mail=*))" -attr sAMAccountName mail

Der Filter legt fest, was gesucht wird. Wo gesucht wird (die ganze Domäne oder nur eine OU), bestimmt die Suchbasis (-b bzw. -SearchBase).

Benutzer

1. Alle Benutzerkonten

(&(objectCategory=person)(objectClass=user))

objectCategory=person und objectClass=user zusammen liefern nur echte Benutzer, keine Kontakte und keine Computer (Computer sind in AD auch user). Im Builder öffnen ›

2. Aktive Benutzer

(&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))

Bit 2 im userAccountControl bedeutet „deaktiviert“. Die lange Zahl ist die Regel für bitweises UND, verneint ergibt sich „nicht deaktiviert“. Im Builder öffnen ›

3. Deaktivierte Benutzer

(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=2))

Dasselbe ohne Verneinung, praktisch zum Aufräumen. Im Builder öffnen ›

4. Gesperrte Konten

(&(objectCategory=person)(objectClass=user)(lockoutTime>=1))

lockoutTime größer als 0 heißt: Das Konto wurde gesperrt. Der Wert bleibt auch nach Ablauf der Sperrdauer stehen, bis sich der Benutzer wieder anmeldet. Die Liste kann also mehr Konten enthalten als gerade wirklich gesperrt sind. Im Builder öffnen ›

5. Kennwort läuft nie ab

(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=65536))

Bit 65536 (DONT_EXPIRE_PASSWORD). Ein Fall für Audits. Im Builder öffnen ›

6. Kennwort muss bei der nächsten Anmeldung geändert werden

(&(objectCategory=person)(objectClass=user)(pwdLastSet=0))

pwdLastSet=0 ist genau dieser Zustand. Im Builder öffnen ›

7. Mitglieder einer Gruppe (direkt)

(&(objectCategory=person)(objectClass=user)(memberOf=CN=VPN-Users,OU=Groups,DC=example,DC=com))

Die Gruppe muss mit vollem DN angegeben werden. Platzhalter wie CN=VPN* funktionieren bei memberOf nicht. Im Builder öffnen ›

8. Mitglieder einer Gruppe inklusive verschachtelter Gruppen

(&(objectCategory=person)(objectClass=user)(memberOf:1.2.840.113556.1.4.1941:=CN=VPN-Users,OU=Groups,DC=example,DC=com))

Die Regel 1.2.840.113556.1.4.1941 (LDAP_MATCHING_RULE_IN_CHAIN) löst verschachtelte Gruppen auf. Bei großen Verzeichnissen langsamer. Im Builder öffnen ›

9. Benutzer mit E-Mail-Adresse

(&(objectCategory=person)(objectClass=user)(mail=*))

=* heißt „Attribut ist vorhanden“. Im Builder öffnen ›

10. Benutzer ohne E-Mail-Adresse

(&(objectCategory=person)(objectClass=user)(!(mail=*)))

Verneint: Attribut fehlt. Im Builder öffnen ›

11. Suche wie im Adressbuch

(anr=Müller)

anr (Ambiguous Name Resolution) ist eine AD-Besonderheit und sucht in Name, Vorname, Anzeigename, Anmeldename und weiteren Feldern gleichzeitig. Im Builder öffnen ›

12. Anmeldung per Benutzername oder UPN

(&(objectCategory=person)(objectClass=user)(|(sAMAccountName={user})(userPrincipalName={user})))

Der typische Filter für Anwendungen mit LDAP-Login. {user} ersetzt die Anwendung durch die Eingabe. Die Eingabe muss dabei nach RFC 4515 maskiert werden, sonst ist LDAP-Injection möglich. Im Builder öffnen ›

13. Lange nicht angemeldet

(&(objectCategory=person)(objectClass=user)(lastLogonTimestamp<=134116992000000000))

lastLogonTimestamp ist ein Windows-Zeitstempel (100-ns-Schritte seit 1601). Die Zahl im Beispiel entspricht dem 1. Januar 2026. Das Attribut wird nur etwa alle 9–14 Tage aktualisiert und eignet sich für „seit Monaten nicht angemeldet“, nicht für „seit gestern“. Im Builder öffnen ›

14. Seit einem Datum angelegt

(&(objectCategory=person)(objectClass=user)(whenCreated>=20260101000000.0Z))

whenCreated ist im Format JJJJMMTTHHMMSS.0Z (UTC). Im Builder öffnen ›

15. Konten mit Service Principal Name

(&(objectCategory=person)(objectClass=user)(servicePrincipalName=*))

Benutzerkonten mit SPN sind Dienstkonten und das Ziel von Kerberoasting. Sie sollten lange, zufällige Kennwörter haben oder gMSA sein. Im Builder öffnen ›

16. Geschützte Konten (adminCount)

(&(objectCategory=person)(objectClass=user)(adminCount=1))

adminCount=1 tragen Konten, die Mitglied einer privilegierten Gruppe sind oder waren. Gut, um vergessene Admin-Rechte zu finden. Im Builder öffnen ›

Computer und Gruppen

17. Alle Computer

(objectCategory=computer)

Computerkonten in der Domäne. Im Builder öffnen ›

18. Domänencontroller

(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=8192))

Bit 8192 (SERVER_TRUST_ACCOUNT) haben nur Domänencontroller. Im Builder öffnen ›

19. Windows-Server

(&(objectCategory=computer)(operatingSystem=*Server*))

Platzhalter funktionieren bei normalen Textattributen wie operatingSystem. Im Builder öffnen ›

20. Leere Sicherheitsgruppen

(&(objectCategory=group)(groupType:1.2.840.113556.1.4.803:=2147483648)(!(member=*)))

Bit 2147483648 im groupType kennzeichnet Sicherheitsgruppen, !(member=*) heißt „keine Mitglieder“. Mitglieder über die primäre Gruppe (z. B. Domänen-Benutzer) zählen hier nicht. Im Builder öffnen ›

Tipps für schnelle und sichere Filter

FAQ

Warum findet mein Filter Computer, obwohl ich nach objectClass=user suche?

In Active Directory erben Computerkonten von der Klasse user. Mit objectCategory=person schließt du sie aus.

Wie finde ich alle Gruppen eines Benutzers inklusive verschachtelter?

Mit der IN_CHAIN-Regel andersherum: (member:1.2.840.113556.1.4.1941:=CN=Max Muster,OU=Users,DC=example,DC=com) auf Gruppen angewendet.

Warum liefert die Abfrage nur 1000 Ergebnisse?

Active Directory begrenzt Antworten standardmäßig auf 1000 Einträge pro Seite. Das Werkzeug muss Paging nutzen. Get-ADUser macht das automatisch, ldapsearch mit -E pr=1000/noprompt.

Kann ich mit einem Filter nach dem Kennwort suchen?

Nein. Kennwörter sind nicht lesbar und nicht durchsuchbar. Filtern lässt sich nur nach Metadaten wie pwdLastSet.