Objekte im Globalen Katalog suchen
In Tutorial Abschnitt "LDAP Objekte im Verzeichnis suchen (ADO)" wurde beschrieben, wie man allgemein aus einem Script heraus nach Verzeichnisobjekten sucht. Hier soll speziell gezeigt werden, wie man auf Objekte im Globalen Katalog zugreift. Bitte beachten: Im Globalen Katalog sind nur Lesezugriffe möglich, und es sind stehen nicht alle Attribute zur Verfügung. Man kann in der LDAP-Filter der Suche nur Attribute verwenden, die auch im Global Catalog enthalten sind!
Standard-Suche im Globalen Catalog |
GC-Suche unter Angabe von speziellen Anmeldedaten |
GC-Suche über LDAP SSL |
GC-Suche, wenn der eigene Domänenname / Forest nicht bekannt ist |
Standard-Suche im Globalen Catalog
Wir benutzen hier eine normale LDAP-Such-Operation, bei der LDAP-Pfad geändert wird, so dass der TCP-Port-Nummer 3268 verwendet wird. Darüber hinaus mußr eine andere LDAP Search Base gesetzt werden - es muß hier der DNS-Name der Root-Domäne (dies ist die Domäne, die in der AD-Gesamtstruktur wie die erste Domäne installiert wurde) als Search Base konfiguriert werden.
Wenn wir also einen Active Directory Forest mit der Root-Domäne 'cerrotorre.de' haben und wir eine Liste aller DCs im Forest erhalten wollen, dann würde die Suche ungefähr so aussehen:
Beachten Sie bitte, dass der LDAP Search String den man gewöhnlich verwendet (z.B. 'OU=accounts,DC=slefadsi,DC=org') ersetzt wird durch den DNS Namen der Root-Domäne (hier 'cerrotorre.de'). Der für diese Operation notwendige GC wird durch interne ADSI API Funktionen automatisch gefunden.
GC-Suche unter Angabe von speziellen Anmeldedaten
Die normale Methode der LDAP Verzeichnissuche funktioniert immer dann, wenn ich als angemeldeter User auf Objekte aus meiner eigenen Domäne bzw. aus meinem eigenen Active Directory Forest zugreifen will. Oft ist es jedoch notwendig, auf ein Verzeichnis-System zuzugreifen, bei dem man aktuell nicht als User authentifiziert ist. Hier ist die Angabe von zusätzlichen Anmeldedaten erforderlich. Und: Hier gibt es die Bind-Variante mit dem Befehl OpenDSObject, der die Übergabe von Username und Passwort erlaubt und so eine Anmeldung z.B. auch an fremde Forests ermöglicht.
In diesem Beispiel gibt die Suche die Distinguished Names aller Domänencontroller im Forest zurück. Wir verbinden uns mit den betreffenden Objekten mit einem OpenDSObject Aufruf, der letze Parameter (1) führt als Anmelde-Flag dazu,
dass eine gesicherte Kerberos-Anmeldung stattfindet.
Voraussetzung hierbei ist natürlich, dass die Station von der aus der Script aufgerufen wird, den Domänennamen der Forest Root Domäne (hier 'cerotorre.de' in eine IP Adresse eines zuständigen DCs dieser Domäne auflösen kann. Indem die SRV-Records ausgelesen werden, die im DNS gespeichert sind, kann der globale Katalog Server mit internen ADSI API Funktionen automatisch gefunden werden.
GC-Suche über LDAP SSL
Man kann auch LDAP-SSL verwenden, wenn man sich den Globalen Katalog durchsuchen will. Dazu benutzt man einfach die TCP-Port-Nummer 3269 (statt 3268) auf. Allerdings klappt das nur, wenn der Server zuvor mit einem SSL-Zertifikat ausgestattet wurde.
Das Beipiel demonstriert, wie man nach allen deaktivierten Benutzerkonten im Forest sucht, und zwar über eine SSL-Verbindung:
GC-Suche, wenn der eigene Domänenname / Forest nicht bekannt ist
Oft will man Skripte entwickeln, die in verschiedenen Active Directory Umgebungen laufen.
Stellen Sie sich z.B. ein Skript vor, dass in der eigenen Domäne irgendwelche
Infos zu diversen Objekten ausgibt oder spezielle Änderungen vornimmt.
Damit das Skript in beliebigen Domänen läuft, könnte man
natürlich den Domänen-Namen als Parameter übergeben lassen.
Aber noch eleganter ist es, den Domänen-Namen zu ermiteln, indem man
mit einem Serverless Binding das Active Directory selbst danach fragt.
Die entsprechenden Informationen stehen in einem speziellen Verzeichnis-Eintrag,
der auf jedem Domänen-Controller zur Verfügung steht: dem rootDSE-Eintrag
(Root Directory Service Entry).
Also ist dies ein Beispiel, wie man nach den deaktivierten Benutzern in demjenigen Forest sucht, an dem man gerade angemeldet ist: