Welche Informationen des Active Directorys kann ein einfacher Benutzer mittels LDAP-Anfrage erhalten? Kurzeinstieg: Was ist LDAP überhaupt? LDAP ist die Abkürzung für Lightweight Directory Access Protocol, einem Protokoll, welches eine Kommunikation zwischen einem Client und einem Verzeichnisdienst ermöglicht. Auf Seiten von Microsoft ist Active Directory ein solcher Verzeichnisdienst, aber auch andere Hersteller und Betriebssysteme haben ein entsprechendes Verzeichnisdienst, welches über dieses Protokoll ausgelesen werden kann.

Wie kann ich Active Directory Objekte direkt ansprechen? Im Active Directory hat jedes Objekt zahlreiche Namensattribute, wie beispielsweise Vor- und Nachname, Anzeige- und Windwos-Anmeldename. Da Vor- und Nachname aber mehrfach vergeben werden können, steht uns der eindeutige "Distinguished Name" zur Seite, um die passenden Objekte zu finden. Dieser Wert beinhaltet das Objekt selbst und alle Container, in denen sich das Objekt befindet.

Zum Beispiel könnte dies für einen User aus der Domäne Trilab.Local so aussehen: CN=Test LDP, CN=Users, DC=Trilab, DC=Local

Im Folgenden verwende ich ldp.exe, welches standardmäßig seit Windows Server 2000 in den Server Versionen enthalten ist.

Welche Informationen kann ein Benutzer mittels LDAP-Anfrage aus dem AD erhalten? Ein kleiner Test mit dem User 'NT AUTHORITY\ANONYMOUS LOGON' zeigt, dass zwar eine Verbindung aufgebaut, aber keinerlei Informationen aus dem Active Directory ausgelesen werden kann:

bind and search with anonymous logon

bind and search with anonymous logon

Seit Windows Server 2003 wird ein anonymer Zugriff standardmäßig nur auf den 'Root Directory Service Entry', kurz rootDSE, zugelassen. Damit kann man zum Beispiel die Active Directory Version des Forests auslesen, aber keine Objekte im Active Directory selbst. Dies könnte man bei Bedarf jedoch mit dem AD-Attribut dsHeuristik mittels ADSIEdit ändern.

Verwendet man nun einen "einfachen" Benutzer, kann man sich mit dem Server verbinden und ein Benutzerobjekt auslesen:

bind and search with user

bind and search with user

Hiermit wurde gezeigt, dass ein Benutzer ohne Administrator Rechte Objekte aus dem Active Directory auslesen kann. Eine Modifizierung, hier 'Delete', ist dennoch nicht möglich:

ldp delete with normal user

ldp delete with normal user

Dies liegt daran, dass der User zu der Gruppe 'Authenticated User' gehört, somit die Lese-Berechtigungen besitzt. Die vorhandenen Berechtigungen kann man mit dem Active Directory Users and Computers nachschauen und ändern:

    • Rechtsklick auf die Domäne
    • Properties > Security > Advanced
    • Add... > Benutzer auswählen
    • Apply To: 'Descendant User objects' reicht für dieses Beispiel
    • Zum Löschen reicht ein Haken bei Allow 'Delete'
    • Dreimal mit OK bestätigen

Möchte man andere Berechtigungen setzen, kann man dies hier ebenfalls tun. Aufpassen muss man bei 'Apply To': Hierbei bezieht sich 'This object only' nur auf die Domäne, 'All descendant objects' auf alle in der Domäne befindenden Objekte.

Nachdem ich nun die Berechtigung 'Delete' gesetzt habe, konnte ich den Test-User aus dem Active Directory löschen:

ldp delete with permissions

ldp delete with permissions

Mit LDAP lassen sich so auch Objekte erstellen, gelöschte Objekte wiederherstellen oder Attribute ändern - solange die Berechtigungen stimmen...