Active Directory LDAP-Zugriffe mit mehreren Domain Controllern

Auch in einer Windows-Domänen Umgebung kommt man früher oder später darauf, dass es eine Anwendung gibt die nicht auf Windows und IIS, sondern auf einem Apache läuft, vielleicht mit PHP oder einer anderen Skriptsprache. Sowohl PHP als auch der Apache direkt bieten über LDAP die Möglichkeit einen Domain Controller abzufragen, Beispielsweise zur Authentifizierung.

Spätestens wenn ausgerechnet der Domain-Controller ausgefallen (oder wegen Wartungsarbeiten nicht erreichbar) ist, den die PHP-Scripte zur Authentifizierung benutzen, stellt sich die Frage wie man es einrichtet dass irgend ein verfügbarer Domain Controller genutzt wird. Glücklicherweise sind sowohl PHP als auch das Apache-Modul für diesen Fall vorbereitet, und nutzen sogar das gleiche Prinzip dafür. Man muss lediglich an der Stelle wo der Servername steht mehrere Adressen durch Leerzeichen getrennt eintragen.

PHP-Aufruf:

$conn = ldap_connect("dc01.domain.local dc02.domain.local");
ldap_bind($conn, $username, $password);

Eintrag in der Apache-Konfiguration:

AuthLDAPUrl "ldap://dc01.domain.local:3268 dc02.domain.local:3268/dc=domain,dc=local?sAMAccountName?sub?(objectClass=*)" STARTTLS

Hier muss man darauf achten dass der LDAP-String in Anführungszeichen steht (solange kein Leerzeichen vorkommt funktioniert es auch ohne).

Auf diese Art werden alle angegebenen Server durchprobiert bis einer gefunden wird der erreichbar ist.

Quellen: mod_auth_ldap Dokumentation, Kommentar in der PHP-Dokumentation zu ldap_connect()

Active Directory Primärgruppe eines Users mit PHP finden

Versucht man über LDAP Infos über Benutzeraccounts aus dem Active Directory zu laden, dann wird ein nicht ganz unwichtiges Detail unterschlagen: Die Primary Group des Benutzers. Eine LDAP-Abfrage nach memberOf liefert alle Gruppen, mit Ausnahme der primären. Stattdessen wird im Benutzer-Objekt eine numerische primaryGroupID abgespeichert. Diese ID taucht jedoch im Objekt der Gruppe auf den ersten Blick nicht auf. Das ganze geht sogar noch weiter: Gruppen enthalten mit dem member-Attribut alle Mitglieder. Es liegt also nahe, mit der Abfrage „(&(member=$userDN)(objectType=group))“ alle Gruppen zu finden in denen sich der Benutzer befindet. Leider macht uns das Active Directory hier auch einen Strich durch die Rechnung, es liefert wieder nur alle Gruppen ohne die Primärgruppe. Active Directory Primärgruppe eines Users mit PHP finden weiterlesen