Verbinden mit Objekten im Globalen Katalog
In Tutorial Abschnitt "LDAP Bind: Verbindung mit dem Verzeichnis herstellen" wurde beschrieben, wie man allgemein aus einem Script heraus Verbindung mit einem Verziechnisobjekt herstellt. 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.
Global Catalog Bind mit der User-ID, mit der auch das Skript ausgeführt wird
Es handelt sich hier um einen Standard Bind-Vorgang, bei dem jedoch der LDAP-Pfadnamen so verändert wird, dass die TCP-Port-Nummer 3268 verwendet wird. Dies funktioniert sowohl über die Funktion GetObject als auch mit OpenDSObject.
Voraussetzung ist hierbei natürlich, dass der angesprochene Server
'server.cerrotorre.de' auch als globaler Katalog konfiguriert wurde.
Eine einfachere Variante, die eine Sonderform des Pfadnamens ausnutzt,
wobei der Ausdruck "LDAP" durch "GC" ersetzt wird.
Dann braucht auch die spezielle Port-Nummer 3268 nicht angegeben zu werden:
Auch hierbei können Sie in Active Directory Umgebungen ein Serverless Binding durchführen, dann wird ein globaler Katalog automatisch über DNS gesucht:
Global Catalog Bind unter Angabe von speziellen Anmeldedaten
Die normale Methode des Verzeichnis-Binds 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 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 unseren Beispielen wird also das OU-Objekt in der Domäne "cerrotorre.de zugegriffen, wobei zu diesem Zweck am Server "controller.cerrotorre.de" eine Anmeldung mit Username "administrator" und Passwort "P@ssw0rd" stattfindet. Der letze Parameter (1) führt als Anmelde-Flag dazu, dass eine gesicherte Kerberos-Anmeldung stattfindet.
ADSI-Referenz
im MSDN: OpenDSObject()
Der Benutzername kann bei einer AD-Anmeldung in folgender Form angegeben
werden:
Anmedename ohne Zusätze | z.B. "administrator", hierzu
muss das Anmelde-Flag jedoch auf 1 gesetzt werden (gesicherte Anmeldung) |
NetBIOS-Anmeldename | z.B. "DOMAIN\administrator" |
User Principal Name | z.B. "administrator@domain.com" |
Distinguished Name | z.B. "cn=administrator,cn=users,dc=domain,dc=com", hierzu muss das Anmelde-Flag jedoch auf 0 (Klartext-Anmeldung) stehen. |
Das Anmelde-Flag bestimmt die Art der Anmeldung. Prinzipiell interessant sind die beiden Werte 0 (für unverschlüsselte Anmeldung im Klartext) und 1 (für gesicherte Anmeldung über Kerberos oder NTLM). Eine gesicherte Anmeldung ist der Klartextanmeldung natürlich vorzuziehen. Allerdings kann es auch Situationen geben, wo eine ungesicherte Klartext-Anmeldung benötigt wird, z.B. für SSL-Verbindungen (hier sind alle Daten sowieso durch den SSL-Tunnel geschützt).
Microsoft-Erläuterungen zum Anmelde-Flag im MSDN
Man kann in Active Directory Umgebungen im LDAP-Pfadnamen den Servernamen weglassen, dann wird automatisch an einen erreichbaren Domänen-Controller der eigenen Domäne gefunden.
Global Catalog Bind über LDAP SSL
Man kann auch LDAP-SSL verwenden, wenn man sich mit dem Globalen Katalog verbindet. Dazu baut man die Verbindung einfach mit der TCP-Port-Nummer 3269 (statt 3268) auf. Allerdings klappt das nur, wenn der Server zuvor mit einem SSL-Zertifikat ausgestattet wurde.
Global Ctalog Bind, 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).
Wir können hier aus der Eigenschaft "defaultNamingContext"
den Distinguished Name der eigenen Domäne entnehmen und daraus gleich
einen LDAP-Pfadnamen bauen, mit dem auf die
gewünschten Domänen-Objekte zugegriffen werden kann - auch im Global Katalog:
Im nächsten Beispiel wird gezeigt, wie man den Namen der Root-Domäne des eigenen Forests herausfindet. Man kann dazu die ADSSystemInfo-Schnittstelle verwenden und muß dann den erhaltenen DNS-Namen in einen LDAP-Pfad umwandeln: