Nach langer Überlegungsphase habe ich heute endlich mal den Schritt gewagt und Trac mit dem Active Directory verbunden. Alle Benutzer, die sich an Trac anmelden, werden im AD authentiziert und autorisiert.
Allerdings benutze ich dafür nicht LdapPlugin , sondern AccountManagerPlugin (AMP).
AMP ruft, nachdem Benutzername und Passwort in der Trac-Seite eingegeben worden, eine beliebig definierbare Adresse auf und überprüft, ob der Webserver einen 200er- oder 401er-Statuscode zurückgibt. Das komplette Plugin ist nicht mehr als 30 Zeilen lang.
Zuerst muss AMP installiert werden, danach müssen in der trac.ini des Projekts folgende Optionen gesetzt werden:
[components] trac.web.auth.LoginModule = disabled acct_mgr.http.HttpAuthStore = enabled acct_mgr.web_ui.LoginModule = enabled acct_mgr.web_ui.RegistrationModule = disabled acct_mgr.htfile.HtPasswdStore = disabled acct_mgr.admin.AccountManagerAdminPage = enabled acct_mgr.web_ui.AccountModule = enabled [account-manager] authentication_url = $HOST$/$SUBURL$ password_store = HttpAuthStore
$URL$ wird durch die URL ersetzt, die vom Apache überprüft werden soll.
Die httpd.conf (oder $VHOST$.conf) muss so abgeändert werden:
# Benötigte Module laden LoadModule auth_module modules/mod_auth.so LoadModule ldap_module modules/util_ldap.so LoadModule auth_ldap_module modules/mod_auth_ldap.so SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnvParentDir c:/server/trac PythonOption TracUriRoot /trac AuthType Basic AuthName "Trac Active Directory" AuthLDAPURL "ldap://domaincontroller.domain.local:389/OU=$OU$,DC=$DOMAIN$,DC=local?sAMAccountName?sub?(objectClass=user)" AuthLDAPBindDN "$LDAP-BENUTZER$@$DOMAIN$.local" AuthLDAPBindPassword "$PASSWORT$" authldapauthoritative Off require group CN=Trac-Gruppe,DC=$DOMAIN$,DC=local
Der obige Code stammt aus einem unserer Virtual-Hosts und muss natürlich entsprechend eurer Umgebung angepasst werden.
Wichtig ist, dass $SUBURL$ auf eine bestehende Datei im DocumentRoot liegt, diese kann leer sein. Außerdem darf die Trac-Instanz nicht direkt über “/” zu erreichen sein, da sonst die $SUBURL$ durch den Python-Handler verwaltet wird.
Das obige Beispiel benutzt kein SSL. $DOMAIN$ muss durch die Domäne ersetzt werden, $LDAP-BENUTZER$ entspricht einem Benutzer, der im Active Directory existiert und $PASSWORT$ entspricht … naja dem Passwort halt.
Das Binden ist nötig, da Windows (2003) von Haus aus keine anonymen Zugriffe erlaubt.
Nun muss im Active Directory eine neue Sicherheitsgruppe mit dem Namen “Trac-Gruppe” erstellt werden, in der die erlaubten Benutzer eingetragen werden.
Das war es eigentlich auch schon.
Zur Fehleranalyse ist es sinnvoll, im Apache den LogLevel auf “debug” zu setzen und zu schauen, dass der Apache sich auch wirklich mit dem Active Directory verbinden kann, d.h. die Binding-Credentials in Ordnung sind.
0 Comments