Wie kann ich eine vorhandene Gruppe von Subversion-Repositorys auf ActiveDirectory umstellen? (svnserve / windows)

12

Ich habe eine Reihe von privaten Subversion-Repositorys auf einer Windows Server 2003-Box, auf die Entwickler über SVNServe über das Protokoll svn: // zugreifen. Derzeit verwenden wir die Dateien authz und passwd für jedes Repository, um den Zugriff zu steuern. Angesichts der wachsenden Anzahl von Repositorys und Entwicklern erwäge ich jedoch, auf die Verwendung ihrer Anmeldeinformationen aus ActiveDirectory umzusteigen. Wir laufen in einem Microsoft-Shop und verwenden IIS anstelle von Apache auf allen unseren Webservern. Daher würde ich es vorziehen, SVNServe weiterhin zu verwenden, wenn dies möglich ist.

Abgesehen davon, dass es möglich ist, mache ich mir auch Gedanken darüber, wie unsere Repositorys migriert werden sollen, damit der Verlauf für die vorhandenen Benutzer den richtigen ActiveDirectory-Konten zugeordnet wird. Denken Sie auch daran, dass ich nicht der Netzwerkadministrator bin und mit ActiveDirectory nicht sonderlich vertraut bin. Daher muss ich wahrscheinlich einige andere Personen kontaktieren, um die Änderungen in ActiveDirectory vorzunehmen, falls erforderlich.

Welche Möglichkeiten habe ich?

UPDATE 1: Aus der SVN-Dokumentation geht hervor, dass ich mit SASL SVNServe dazu bringen sollte, sich mit ActiveDirectory zu authentifizieren. Um dies zu verdeutlichen, ist die gesuchte Antwort, wie Sie SVNServe (falls möglich) so konfigurieren, dass ActiveDirectory für die Authentifizierung verwendet wird, und wie Sie ein vorhandenes Repository ändern, um vorhandene svn-Benutzer ihren ActiveDirectory-Domänen-Anmeldekonten neu zuzuordnen.

UPDATE 2: Es scheint, dass die SASL-Unterstützung in SVNServe von einem Plugin-Modell ausgeht und die Dokumentation nur als Beispiel dient. In der Cyrus SASL-Bibliothek sieht es so aus, als ob eine Reihe von "Authentifizierungsmechanismen" unterstützt werden. Ich bin mir jedoch nicht sicher, welche für die ActiveDirectory-Unterstützung verwendet werden sollen, und ich kann auch keine Dokumentation zu solchen Themen finden.

UPDATE 3: Ok, es sieht so aus, als würde ich zur Kommunikation mit ActiveDirectory saslauthd anstelle von sasldb für die auxprop_plugin -Eigenschaft verwenden . Leider scheint es, dass saslauthd einigen Posts zufolge (möglicherweise veraltet und ungenau) nicht auf Windows aufbaut und solche Bemühungen als in Arbeit betrachtet werden .

UPDATE 4: Der letzte Beitrag, den ich zu diesem Thema gefunden habe, klingt so, als ob die richtigen Binärdateien () in der MIT Kerberos-Bibliothek verfügbar sind, aber es scheint, als ob der Autor dieses Beitrags auf Nabble.com immer noch Probleme hat, die Dinge zum Laufen zu bringen .

UPDATE 5: Es sieht aus wie aus den TortoiseSVN Diskussionen und auch diesem Beitrag auf svn.haxx.seDies gilt auch dann, wenn saslgssapi.dll oder die erforderlichen Binärdateien auf dem Windows-Server verfügbar und konfiguriert sind und die Clients dieselbe Anpassung benötigen, um mit diesen Repositorys zu arbeiten. Wenn dies zutrifft, können wir ActiveDirectory-Unterstützung nur von einem Windows-Client erhalten, wenn Änderungen an diesen Clients vorgenommen werden, z. B. TortoiseSVN und CollabNet-Build der Client-Binärdateien, um solche Authentifizierungsschemata zu unterstützen. Obwohl dies in diesen Beiträgen vorgeschlagen wird, ist dies ein Widerspruch zu der ursprünglichen Annahme, dass SASL-kompatibel keine Änderungen auf dem Client erfordern sollte, sondern lediglich, dass der Server für die Behandlung des Authentifizierungsmechanismus eingerichtet wird. Nachdem Sie das Dokument über Cyrus SASL in Subversion etwas genauer gelesen habenIn Abschnitt 5 heißt es: "Clients ab 1.5 mit Cyrus SASL-Unterstützung können sich bei aktivierten SASL-Servern ab 1.5 authentifizieren, sofern mindestens einer der vom Server unterstützten Mechanismen auch vom Client unterstützt wird." Aus diesem Grund muss die GSSAPI-Unterstützung (die meines Wissens für Active Directory erforderlich ist) sowohl auf dem Client als auch auf dem Server verfügbar sein.

Ich muss sagen, ich lerne viel zu viel über die Interna, wie Subversion mit Authentifizierung umgeht, als ich es jemals wollte. Und leider suchte ich nur nach einer Antwort, ob ich Unterstützung für die Active Directory-Authentifizierung haben kann, wenn ich SVNServe auf einem Windows-Server verwende und von Windows-Clients aus darauf zugreife. Laut der offiziellen Dokumentation scheint dies möglich zu sein, Sie können jedoch feststellen, dass die Konfiguration nicht trivial ist, wenn überhaupt möglich.

UPDATE: 6: Könnte irgendjemand etwas darüber sagen, ob Subversion 1.7 die Situation verbessern wird, SVNServe dazu zu bringen, sich mit Active Directory zu authentifizieren?

jpierson
quelle
dann schau mal hier .. stackoverflow.com/questions/333146 aber es scheint mir ein ziemlicher hack zu sein. Sie können IIS Seite an Seite mit Apache erhalten [indem Sie den zweiten
ausführen,
2
+1 für diese Frage. Es ist etwas, auf das ich immer wieder eine Antwort finden möchte und das fehlschlägt. Die meisten Leute scheinen Apache für akzeptabel zu halten (normalerweise in VisualSVN-Form). Aber es ist ein Schmerz, wenn Sie bereits viele svn: // Referenzen haben. Und für mich ist es einfach besser, svnserve für den Repository-Zugriff auszuführen, als Apache.
Jim T
1
+ 1 wollte dies auch schon vor langer Zeit tun, ich hasse es wirklich, Apache auf einer Windows-Box laufen zu lassen, nur aus Prinzip, wenn es nicht benötigt werden sollte ... zusätzliche Punkte für die Kombination mit SSL-Zugriff über IIS ^ ^
Oskar Duveborn
@Oskar - Ich denke, es wäre großartig, wenn jemand ein WAS-Modul für IIS7 und höher erstellen würde, um sowohl das apache-basierte http-Protokoll als auch das svnserve-Protokoll innerhalb von IIS zu hosten. Wenn ich mehr Zeit hätte, würde ich versuchen, so etwas in .NET als Open-Source-Projekt zu erstellen.
Jpierson

Antworten:

5

Wie bereits erwähnt, ist VisualSVN Server das gewünschte Tool. Es ist ein All-in-One-Paket für Windows, das nur zufällig Apache verwendet. Sie werden es nie erfahren, es sei denn, Sie stöbern in den DLLs, die es installiert. Für alle ist es ein Windows-Dienst, der ein MMC-Snap-In hat verwalte es. Sie können den Port ändern, auf dem es ausgeführt wird, wenn Port 80 bereits belegt ist.

Ich verstehe, dass derzeit an der Unterstützung von sasl durch svnserve gearbeitet wird.

gbjbaanb
quelle
Wenn es eine Möglichkeit gäbe, den Apache-Dienst über IIS zum Laufen zu bringen, oder wenn beide den Port 80 verwenden, wäre das großartig. Leider gibt es für diejenigen, die bei svnserve bleiben oder IIS verwenden möchten, nicht viele andere Möglichkeiten, als abzuwarten, ob die Arbeit an der sasl-Unterstützung für svnserve zum Tragen kommt. Wenn es nicht zu viel Mühe gibt, verlinken Sie bitte zu einem Ort, an dem wir aktuelle Informationen zu dieser Funktion erhalten können. Das SVN-Projekt ist zwar in letzter Zeit besser, scheint der Community jedoch nicht sehr gut mitzuteilen, welche Anstrengungen sie unternommen und welche Fortschritte sie durch ihren Bug-Tracker erzielt haben.
JPIerson
Ich bin neugierig, ob Sie einen Beitrag dazu haben, ob die sasl-Unterstützung, an der für svnserve gearbeitet wird / wurde, zu irgendeiner Verwirklichung gelangt ist. Können wir mit Verbesserungen in Subversion 1.7 rechnen?
JPIERSON
1

Ich verwende Apache mit Svn unter Debian Linux, das die Autorisierung für einen Active Directory-Server vornimmt. Clients stellen über das http-Protokoll eine Verbindung zum Repository her. Wenn dieses Setup für Sie akzeptabel ist, lesen Sie weiter.

Dies sollte auch unter Apache für Windows funktionieren, aber ich habe es nie ausprobiert. was folgt ist debian-spezifisch, sollte aber unter Windows / anderen Distributionen ähnlich funktionieren; Sie werden Ihre SVN-Geschichte während der Migration nicht verlieren ...

benötigte Software installieren:

apt-get install libapache2-svn subversion apache2

in der Konfiguration für den vhost von apache [symlinks zu diesen finden Sie in / etc / apache2 / sites-enabled]. in VirtualHost hinzufügen:

<Location /svn>
        DAV svn
        #change this to actual path
        SVNPath /full/path/to/your/current/svn/directory

        AuthType Basic
        AuthName "SVN Server"
        AuthBasicProvider ldap
        AuthzLDAPAuthoritative Off

        # provide here credentials for existing domain user. 
        # in my case domain is called domainName and user - user
        AuthLDAPBindDN "domainName\user"
        AuthLDAPBindPassword usersPassword
        # put here ip of the domain controler and full path to OU containing accounts
        AuthLDAPURL ldap://10.11.22.33:389/ou=Users,dc=domainName,dc=companyName,dc=whatever?sAMAccountName?sub?(objectClass=*)
        Require valid-user
        SVNAutoversioning on

        AuthzSVNAccessFile /etc/apache2/svn_authz
</Location>

Stellen Sie sicher, dass Apache das LDAP-Modul lädt:

cd /etc/apache2/mods-enabled
ln -s ../mods-available/authnz_ldap.load
ln -s ../mods-available/ldap.load
/etc/init.d/apache2 reload

Stellen Sie sicher, dass Apache Dateien im SVN-Repository ändern kann:

chown www-data:www-data -R /full/path/to/your/current/svn/directory

Ihr svn_authz sollte Regeln enthalten, die angeben, wer auf was zugreifen kann. in meinem Fall:

[groups]
ops=jack.brown,john.smith

[/]
* = rw

[/priv]
* =
@ops = rw

Weitere Informationen zur Syntax für diese Datei finden Sie hier .

Wenn Sie so weit gekommen sind, können Ihre Benutzer mit einem beliebigen SVN-Client von http: //server.address/svn/ auschecken [tortoise / cmdline / visual svn]. Sie sehen dann den gesamten Verlauf und lesen / schreiben weiter.

pQd
quelle
1
Die Verwendung von Apache ist möglicherweise akzeptabel, wenn es keine anderen Alternativen gibt. Derzeit verfügen wir jedoch bereits über mehrere svn: // -URLs, auf die in unseren internen Foren und in der Bugtracking-Software verwiesen wird, und möchten die Verwendung dieser URLs lieber fortsetzen. Außerdem haben wir die zugehörigen Ports für SVNServe bereits in unserer Firewall geöffnet. Wenn es eine Möglichkeit gab, Appache zusammen mit IIS auf meinem Windows Server 2003-Computer auszuführen, ist dies möglicherweise eine realistische Methode, obwohl ich im Moment mehr daran interessiert bin, wie SVNServe mit ActiveDirectory authentifiziert werden kann.
Jpierson
1

Sie könnten saslNTML anstelle von GSSAPI verwenden. Die saslNTML-DLL wird standardmäßig mit TSVN installiert, und ich denke, sie ist auch im svn-Client von collab.net enthalten.

Es gibt zwei Optionen, die Sie in Ihrer sasl-Konfigurationsdatei einstellen müssen:

ntml_server

und optional

ntml_v2

und natürlich müssen Sie die Mech-Liste in Ihrer Konfigurationsdatei so einstellen, dass sie NTML enthält.

Ich habe das nur einmal mit TSVN versucht, als ich das Ganze implementiert habe. Aber ich hatte jemand anderes einen Testserver für mich eingerichtet, damit ich keine Ahnung habe, was die genauen Konfigurationsoptionen sind.

Stefan
quelle
Ausgezeichnet, ich werde es bald ausprobieren und sehen, wo ich es bekommen kann.
jpierson
Ich habe eine Reihe von Dingen ausprobiert, bekomme jedoch immer die folgende Fehlermeldung, wenn ich versuche, mit TortoiseSVN auszuchecken. Fehler: Authentifizierungsfehler vom Server: SASL (-13): Benutzer nicht gefunden: Fehler nicht gefunden: Rückruf: 2
jpierson
"Benutzer nicht gefunden" bedeutet, dass der Computer nicht Teil der Domäne ist, bei der Sie sich authentifizieren möchten, oder der Benutzer die Domäne nicht kennt. Vielleicht können Sie versuchen, den Netzwerkverkehr zu erfassen und herauszufinden, was passiert?
Stefan