Archiv für Februar 2008

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.

Debian als NAT-Router (ip-forwarding, masquerading)

Mit einer WLAN-Karte (eth3) habe ich eine Verbindung ins Internet ueber 192.168.178.1. Die Debian-Kiste soll den Rechnern in meinem Netz (192.168.1.0/24) die Route genattet bereitstellen. An sich is das keine komplizierte Sache, aber hier nochmal niedergeschrieben, wie es wohl vorgesehen ist das unter Debian zu machen.

in /etc/network/interfaces:

# (lokal)
auto eth1
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0

# (fremdes wlan)
auto eth3
iface eth3 inet static
wireless-mode Managed
wireless-essid netzwerkname
wireless-key off
address 192.168.178.53
netmask 255.255.255.0
broadcast 192.168.178.255
gateway 192.168.178.1

in /etc/sysctl.conf:


net.ipv4.ip_forward = 1

ipmasq installieren:


aptitude install ipmasq

Statt ipmasq zu installieren, koennen auch die folgenden 2 Zeilen z.B. in die /etc/rc.local ergaenzt werden (ipmasq setzt auch nur automatisiert mit iptables die richtigen Regeln). Ich hab jedoch nicht ueberblickt was das, was ipmasq macht, fuer nen Unterschied zur manuellen Variante ist. Aber ipmasq ist wohl eher der Debian-way es zu machen.


iptables -t nat -P POSTROUTING DROP
iptables -t nat -A POSTROUTING -o eth3 -j MASQUERADE