Subversion per DAV und SSL auf Debian

Installation von Subversion mit Apache-Modul (über SSL). Es wird ein Beispielrepository mit dem Namen „test“ angelegt. Dieses kann dann per https://localhost/test/ ausgecheckt werden. Die Passwörter für die Benutzer werden hier im Beispiel einfach aus der /etc/shadow-Datei genommen, also von den Linux-Systembenutzern. Anstatt /etc/shadow kann (wird normalerweise) eine seperate Datei für die Nutzerdaten verwendet werden. In der authz-Datei (im Repository-Konfigurationsverzeichnis) müssen diese User dann den entsprechenden Repositories bzw. Unterverzeichnissen zugeordnet werden (rw = Leseschreibzugriff; r = nur Lesezugriff). Im Beispiel gibt es einen Benutzer mit dem Namen „user0″.

Zunächst die benötigte Software installieren (wenn noch nicht installiert sollte dabei Apache und Subversion durch die Abhängigkeiten gleich mitinstalliert werden):

aptitude install subversion libapache2-svn

Apache konfigurieren (Vhost anlegen und Port 443 für SSL setzen)

/etc/apache2/sites-available/subversion:

<VirtualHost 127.0.0.1:443>
ServerName localhost
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
DocumentRoot /var/subversion
<Location />
Order allow,deny
Allow from all
DAV svn
SVNParentPath /var/subversion/public
AuthzSVNAccessFile /var/subversion/public/test/conf/authz
Satisfy Any
Require valid-user
AuthType Basic
AuthName "Test Subversion Repository"
AuthUserFile /etc/shadow
</Location>
</virtualhost>

/etc/apache2/ports.conf

Listen 80
Listen 443

Verzeichnis für Repositories anlegen, zugreifbar machen durch www-data (Apache) und test-Repository mit svnadmin erstellen.

mkdir -p /var/subversion/public
chown -R www-data:www-data /var/subversion
su www-data
cd /var/subversion/public
svnadmin create test

Definition der Benutzer

/var/subversion/public/test/conf/authz:

[groups]
admin = root
test-developers = user0

[/]
@admin = rw

[test:/]
@test-developers = rw

Im Beispiel gibt es 2 SVN-Benutzergruppen: admin und test-developers, denen jeweils ein Benutzer, root und user0 zugeordnet ist. Auf alle Repositories und Unterverzeichnisse (/) haben die Benutzer der Gruppe admin Lese- und Schreibzugriff (rw). Außerdem haben die Benutzer der Gruppe test-developers Lese- und Schreibzugriff (rw) auf das Repository „test“ und alle untergeordneten Verzeichnisse.

Vhost per Symlink aktivieren, ggf SSL-Zertifikat anlegen, SSL-Modul aktivieren, Apache neustarten:

ln -s /etc/apache2/sites-enabled/subversion /etc/apache2/sites-available/subversion
mkdir /etc/apache2/ssl
openssl req -new -x509 -days 365 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.key
a2enmod ssl
/etc/init.d/apache2 restart

Um das Repository auszuchecken muss dann https://localhost/test/ benutzt werden. In einem realen System würde der VHost natürlich nicht auf localhost gesetzt werden.