Subversion + Apache & multiple AD Authentication Directories

Kurt Klinner

Seit einer kleinen Ewigkeit nutzen wir in Teilprojekten SVN als VCS. Um den Entwicklern das Leben einfach zu machen ist der Apache, der mittels mod_dav_svn Zugriff auf die Repos ermöglicht, an unsere AD Server angebuden.

Bedingt durch einige Umstrukturierungen innerhalb der AD Bäume, wurden ein paar Entwickler in eine neue OU verschoben, was zur Folge hatte, daß die Authenifizierung fehl schlug. Ein Ansatz den Eintrittspunkt weit oben im Baum zu wählen und über gezielte Policies den Zugriff zu steuern, wurde auf Grund des etwaigen Mehraufwands bei der Pflege der selbigen verworfen.

Nach kurzer Recherche stellte sich heraus,
das es möglich ist mehrere Authentication Provider zu definieren und zu referenzieren.

Gesagt getan

<AuthnProviderAlias ldap AD1>
       AuthLDAPURL "ldap://ad.mydomain.com:389/OU=Users,OU=XX,OU=XX,DC=XX,DC=XX?sAMAccountName?sub?(objectClass=*)"
       AuthLDAPBindDN "CN=ldap read,OU=XX,DC=XX,DC=XX"
       AuthLDAPBindPassword XXXX
</AuthnProviderAlias>
 
<AuthnProviderAlias ldap AD2>
       AuthLDAPURL "ldap://ad.mydomain.com:389/ou=USERS,ou=YY,ou=YY,DC=YY,DC=YY?sAMAccountName?sub?(objectClass=*)"
       AuthLDAPBindDN "CN=ldap read,OU=XX,DC=XX,DC=XXX"
       AuthLDAPBindPassword XXXX
</AuthnProviderAlias>

Es werden zwei Einträge definiert, die sich nur durch die verschiedenen AuthLDAPURL unterscheiden (und somit die verschiedenen Pfade referenzieren)

Innerhalb der VirtualHost Konfiguration spricht man die definierten Authentication Provider
innerhalb der AuthBasicProvider Directive an.
In dem unten aufgeführten Bespiel ist ergänzend noch file als Option angelistet, um lokal gepflegte User aus der unter AuthUserFile angegebenen Datei ebenfalls zu berücksichtigen.

<VirtualHost VHOSTNAME>
...
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so
...
<Location /svn/>
       DAV svn
       SVNParentPath /svn/
       SVNListParentPath on
       AuthType Basic
       AuthBasicProvider AD1 AD2 file
       AuthzLDAPAuthoritative off
       AuthBasicAuthoritative off
       AuthzSVNAccessFile /etc/httpd/conf/svnpolicy
       AuthUserFile /etc/httpd/conf/svnusers
       Require valid-user
</Location>
 ...
</VirtualHost>