Nachfolgend wird beschrieben, wie man den SVN-Deamon absichert, sprich die Verschlüsselung der Kommunikation zw. dem SVN-Client und dem SVN-Deamon mit SASL und DIGEST-MD5 aktiviert.
Zuerst muss man SASL per APT installieren
# apt install sasl2-bin libsasl2-modules libsasl2-2
Dann öffnen und editieren wir die Datei "/etc/default/saslauthd"
START=yes
OPTIONS="-c -m /var/run/saslauthd -V"
Durch die Option -V werden SASL Informationen zukünftig in die LOG-Datei "/var/log/auth.log" geschrieben.
Allerdings hat SASL einen uralten BUG, der auch nicht mehr gefixed wird und die LOG-Datei mit dem Eintrag "svnserve: DIGEST-MD5 common mech free" zuspammt! Um das zu verhindern, ersetzen wir in der Datei "/etc/logcheck/ignore.d.server/libsasl2-modules" den bestehenden Eintrag, durch folgende Zeile:
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ svnserve: DIGEST-MD5 common mech free
Durch die Installation von SASL wird u. a. auch eine SASL-Benutzerdatenbank "/etc/sasldb2" erstellt. Wir müssen nun "svnserve", welche unter dem Benutzernamen SVN läuft, den Zugriff auf die SASLDB2 ermöglichen. Wir fügen daher den SVN User der SASL Gruppe hinzu.
# usermod -aG sasl svn
Nun aktivieren wir SASL in der Repository-Konfiguration. In Teil 2 haben wir das Repository "repo01" erstellt und diesem den Realm-Namen "SvnRep01" gegeben. Wir öffnen nun daher die Datei "/var/lib/svn/repo01/conf/svnserve.conf" und fügen dieser folgenden Text hinzu:
[sasl]
use-sasl = true
min-encryption = 128
max-encryption = 2048
pwcheck_method: auxprop
auxprop_plugin: sasldb
sasldb_path: /etc/sasldb2
mech_list: DIGEST-MD5
SASL verwendet, wie bereits erwähnt eine eigene Benutzerdatenbank. Wir müssen daher nun in dieser die Login-Informationen für alle User und den Realm eintragen, die sich zukünftig per SASL in den SVN-Deamon einloggen wollen.
Wichtig hierbei ist jedoch, das der Realm-Name exakt mit den Realm-Namen übereinstimmt, welchen wir in der Datei "svnserve.conf" definiert haben!
Aufgrund der Einschränkungen von SASL darf dieser Name nur aus einem Wort bestehen, welches nur aus Buchstaben und Zahlen besteht und mit einem Buchstaben beginnen muss. Sonder- und Leerzeichen werden nicht unterstützt.
Wir definieren nun die SASL-Logindaten mit folgendem Befehl:
saslpasswd2 -c -f /etc/sasldb2 -u [realm] [username]
Also für unser Beispiel
saslpasswd2 -c -f /etc/sasldb2 -u SvnRep01 testuser01
password: testpass01
Wir machen das jetzt aber nur für den "testuser01", nicht aber für den "testuser02"!
Den Realm-Namen und die 2 Test-User haben wir bereits in Teil 2 erstellt und den Login bzw. den Checkout bereits ohne SASL getestet.
Nachdem wir nun alle erforderlichen Konfigurationen durchgeführt haben, aktivieren und starten wir nun SASL und den SVN-Deamon.
# systemctl enable saslauthd
# systemctl restart saslauthd
# systemctl restart svn.service
Und zuletzt testen wir das Auschecken des Repository mit SASL mit dem "testuser01", für welchen wir den Befehl "saslpasswd2" verwendet haben.
cd ~/temp
svn checkout --username test01user svn://locahost/repo01 repo01
Wenn alles korrekt konfiguriert wurde, dann hat der "checkout" nun funktioniert.
Wir löschen nun das Unterverzeichnis "repo01" und versuchen das Gleiche nun mit dem "testuser02", für welchen wir den Befehl "saslpasswd2" nicht verwendet haben, welcher aber ohne SASL in Teil 2 den "checkout" erfolgreich durchgeführt hat.
svn checkout --username test02user svn://locahost/repo01 repo01
Wenn alles korrekt konfiguriert wurde, dann hat der "checkout" nun nicht funktioniert!
Das ist der Nachweis, dass der Login in den SVN-Deamon nur noch mit SASL funktioniert, wenn der Benutzer in die SASL-Datenbank eingetragen wurde, welche nur von SASL verwendet wird!
Wichtiger Hinweis:
Fehlermeldung: Konnte die Liste der SASL-Mechanismen nicht erhalten
Diese Meldung erscheint, wenn der Wert von "min-encryption" bei der SASL-Konfiguration größer als 128 ist!
Weitere SASL Befehle:
"# sasldblistusers2": zeigt alle Benutzer der SASLDB2 an
"# saslpluginviewer": zeigt alle installierten und verfügbaren Module an
Comments