Mit LDAP steht eine Schnittstelle zu dem bei meinem Arbeitgeber eingesetzten Microsoft Active Directory zur Verfügung. Doch der Teufel steckt im Detail… Nach kurzer Suche im Meta-Wiki bin ich auf den LDAP-Authentification-Patch für die aktuellen MediaWiki-Versionen gestoßen. Nach anfänglichen Schwierigkeiten mit den Konfigurationsbeispielen brachte ich schließlich immerhin die Funktion zum Laufen, dass der Login eines Benutzers im AD geprüft wird und sich der Benutzer bei korrektem Passwort erfolgreich einloggen kann. Die hierfür nötige Konfiguration lautet wie folgt:
# LDAP Authentication patch
require_once( “includes/LdapAuthentication.php” );
$wgAuth = new LdapAuthenticationPlugin();
$wgLDAPDomainNames = array( “unseredomain” );
$wgLDAPServerNames = array( “unseredomain”=>”domaincontroller.unseredomain.firma.net” );
$wgLDAPSearchStrings = array( “unseredomain”=>”unseredomain\USER-NAME” ); //do not change “USER-NAME”!
$wgLDAPUseSSL = false; //not recommended but OK for testing
$wgLDAPUseLocal = false;
$wgMinimalPasswordLength = 1;
$wgLDAPRetrievePrefs = false;
$wgLDAPBaseDNs = array( “unseredomain”=>”dc=unseredomain,dc=firma,dc=net” );[/geshi]
Folgende Einstellungen sollte man noch vornehmen, um grundsätzlich ein Login der Benutzer zu erzwingen, zusammen mit ein bisschen Kosmetik (wir möchten keine IP bei anonymen Benutzern sehen!):
# This snippet prevents new registrations from anonymous users
# (Sysops can still create user accounts)
$wgGroupPermissions['*']['createaccount'] = false;
# This snippet prevents editing from anonymous users
$wgGroupPermissions['*']['edit'] = false;
#$wgWhitelistRead = array( “Main Page”, “Special:Userlogin”, “-”, “MediaWiki:Monobook.css” );
$wgWhitelistRead = array( “Hauptseite”, “Spezial:Userlogin”, “-”, “MediaWiki:Monobook.css” );
$wgGroupPermissions['*']['read'] = false;
# remove IP display in header for non logged-in users
$wgShowIPinHeader = false; # For non-logged in users [/geshi]
Das war allerdings nicht genug. Die Anforderungen besagen, dass es nur bestimmten Benutzern ermöglicht werden soll, auf das jeweilige Wiki zuzugreifen. Bei einem vorhandenen Active Directory kann man dies natürlich wunderbar über eine Gruppe abbilden. Ich habe nun die vergangenen Tage mehrmals die Dokumentation (hier auch) und die Diskussionsseiten gewälzt und sämtliche Parameter durchprobiert – immer ohne Erfolg.
Als kleines Nebenprodukt ist dabei unter Verwendung der Klasse adLDAP ein PHP-Skript enstanden, mit der wir uns nun webbasiert sämtliche wichtigen Infos zu einem Benutzer oder einer Gruppe ausgeben lassen können. Immerhin hatte ich mittlerweile die doch relativ wilde Struktur des AD verinnerlicht, auch dank einer gewohnt guten Präsentation von Kris Köhntopp.
Mir blieb nichts anderes übrig, als den Code step-by-step durchzugehen und nachzuvollziehen, was genau passiert. Herausgekommen ist folgender Patch für die LdapAuthentication.php (1.0g):
# Changed by Fabian Fischer (ff@nodomain.cc) to really work with our
# Active Directory, 24.08.2006 (see LocalSettings.php for configuration!)
754,756c756,761
if ( in_array( $group, $reqgroups ) ) {
$this->printDebug(“Found user in a group.”,1);
return true;
—
//case-insensitive search
foreach ($reqgroups as $item) {
if (strtolower($item) == $group) {
$this->printDebug(“Found user in a group.”,1);
return true;
}
848,849c853,854
foreach ($info as $i) {
$mem = strtolower($i['dn']);
—
foreach ($info[0]['memberof'] as $i) {
$mem = strtolower($i);
852c857,858
—
array_shift($groups);
Mit diesen Parametern in der LocalSettings.php bin ich nun endlich in der Lage, definierte Gruppen auf das Wiki zu berechtigen:
# groups
$wgLDAPRequiredGroups = array( “unseredomain”=>array(“CN=WIKIGRUPPE,OU=Group,DC=unseredomain,DC=firma,DC=net”) );
$wgLDAPGroupUseFullDN = array( “unseredomain”=>false );
$wgLDAPGroupObjectclass = array( “unseredomain”=>”*” );
$wgLDAPGroupAttribute = array( “unseredomain”=>”samaccountname” );
$wgLDAPGroupSearchNestedGroups = array( “unseredomain”=>false );
Ein Link zur LDAP Extension und damit auch zur LdapAuthentication.php findest du HIER.


Hi,
danke für die tollen Tipps bzgl der LDAP Integration. Hast Du Dir viel Arbeit gemacht, die Zeit hätt ich garnicht
Ich kann leider bisher nicht den Patch für die LdapAuthentication.php benutzen, wie muss ich den genau in die Datei implementieren?
Gruß
Enrico