Nachfolgend wird beschrieben, wie man ein SVN-Repository erstellt und die Rechte von Benutzern / Gruppen konfiguriert.
Hierfür wird das Tool "svnadmin" verwendet, das bereits im Teil 1 per APT installiert wurde.
Um ein neues SVN-Repository zu erstellen, verwendet man den Befehl "svnadmin create" und setzt rekursiv die Besitzrechte auf den SVN User.
# svnadmin create /var/lib/svn/repo01
# chown -R svn:svn /var/lib/svn
Nun hat man ein SVN-Repository mit folgender Struktur erstellt
Benutzer, Gruppen und Rechte verwalten
Grundsätzlich wurden bei der Erstellung des SVN-Repository auch bereits alle notwendigen Dateien (svnserv.conf, passwd, authz, usw.) erstellt und mit Beispiel-Kommentaren beschrieben.
Die Zugriffsverwaltung kann entweder sehr pauschal für das gesamte Repository auf Benutzerebene oder aber auch feingranuliert für Benutzer, Gruppen und Verzeichnisse erfolgen.
A) Namensdefinition für das Repository (realm)
Jedes Repository benötigt eine Namensdefinition. Diese wird für die Rechteverwaltung benötigt. Sollen bspw. für 2 Repository nur 1 Rechtemanagement verwendet werden, müssen diese unterschiedlichen Repository den selben Realm-Namen verwenden.
Editieren sie hierzu die Datei "svnserv.conf" und entfernen Sie das Kommentarzeichen '#' von der folgenden Zeile, unterhalb von [general] und vergeben Sie einen Namen für ihr Repository:
realm = SvnRep01
B) Pauschale Rechtevergabe für Benutzer und das gesamte Repository
Editieren sie hierzu die Datei "svnserv.conf" und entfernen Sie das Kommentarzeichen '#' von den folgenden Zeilen, unterhalb von [general]:
anon-access = read
auth-access = write
password-db = passwd
Als pauschale Rechte für das gesamte Repository können Sie folgende Werte definieren
none: gar keine Rechte
read: nur Leserechte
write: Lese- und Schreibrechte
Des weiteren wird unterschieden zw. Benutzern, die ohne Login (anon-access) oder Benutzern, die nach einem erfolgreichen Login (auth-access) auf das Repository zugreifen wollen.
Die Login-Konfiguration für die Benutzer erfolgt in der Datei "passwd" unterhalb von [users] nach dem Schema [Benutzer] = [Passwort im Klartext].
2 Beispiel-Benutzer sind in der Datei "passwd" bereits auskommentiert definiert.
[users]
# harry = harryssecret
# sally = sallyssecret
Für unser Beispiel fügen wir nun einen Testuser der Datei hinzu:
[users]
# harry = harryssecret
# sally = sallyssecret
testuser01 = testpass01
testuser02 = testpass02
C) Feingranulierte Rechtevergabe für Benutzer, Gruppen und Verzeichnisse
Editieren sie hierzu die Datei "svnserv.conf" und entfernen Sie das Kommentarzeichen '#' von den folgenden Zeilen, unterhalb von [general]:
authz-db = authz
In der Datei "authz" werden dann die Gruppen definiert, den Gruppen die Benutzer und den Verzeichnissen die Gruppen und Rechte zugewiesen.
Auch in dieser Datei sind bereits Beispiel-Konfigurationen auskommentiert enthalten.
[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average
[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
# [/foo/bar]
# harry = rw
# &joe = r
# * =
# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r
[groups] enthält die Gruppendefinitionen und die Zuweisung der Benutzer zu den Gruppen
[/foo/bar] ist die Definition eines Verzeichnisses innerhalb des Repository und die Zuweisung von Rechten auf Benutzerebene. '* =' gilt auch für anonyme Zugriffe. Wenn nach dem '=' nichts definiert wurde, ist das gleichbedeutend mit der Zugriff hat gar keine Rechte.
[repository:/baz/fuz] ist die Definition eines Verzeichnisses innerhalb des Repository und die Zuweisung von Rechten auf Gruppenebene.
[aliases] enthält ein Beispiel für einen LDAP / Active Directory Pfad. Hierzu müsste man dann aber auch noch weitergehende Konfigurationen, bspw. mit SASL und der Datei "groups-db" durchführen. Das würde aber den Umfang für diesen Artikel sprengen. Details hierzu findet man in der unten verlinkten Original-Dokumentation von Apache und RedBean.
Für unser Beispiel erlauben wir unserem "testuser01" nun den Lese- und Schreibzugriff auf das root-Verzeichnis unseres Test-Repository und fügen der Datei "authz" folgenden Eintrag hinzu. Der 2te Eintrag "* =" bedeutet alle andere Benutzer oder auch anonyme Login-Versuche sind für das root-Verzeichnis gesperrt.
[/]
testuser01 = rw
testuser02 = rw
* =
Zuletzt testen wir, ob wir das Repository mit beiden Testusern "auschecken", sprich eine physikalische Kopie auf unseren eigenen PC in ein temporäres Verzeichnis kopieren können.
# mkdir -p ~/temp
# cd ~/temp
# svn checkout --username testuser01 svn://localhost/repo01 repo01
... wenn das funktioniert hat
# rm -R ./repo01
# svn checkout --username testuser02 svn://localhost/repo01 repo01
Wir haben nun mit 2 Testusern das Repository "aus-checken" können.
Wichtige Hinweise:
[repository:] hat keine Auswirkungen für anonyme Konfigurationen, da [repository:] nur für Gruppen gilt, welche wiederum nur für Benutzer und somit nur für authentifizierte Logins gelten.
[Pfad] ohne "repository:" gilt für Benutzer aber auch für anonyme Zugriffe
Der SVN-Deamon muss nach Änderungen der Konfigurationsdateien normalerweise nicht neu gestartet werden, es schadet aber auch nicht, wenn gerade kein Entwickler mit dem Repository arbeitet.
Die Datei "authz" hat vor der Datei "svnserve.conf" Vorrang
Fehlermeldung: Verbindungsprobleme, wenn man die SVN-Historie sehen will Lösung: folgende Rechte setzen anon-access = none auth-access = write
Dieser Artikel beschreibt nur die wichtigsten Punkte. Eine ausführliche Dokumentation zu Subversion findet man im offiziellen Buch "Subversion" von RedBean, das auch kostenlos online verfügbar ist.
Weitere Informationen findet man auch auf der offiziellen Subversion Webseite von Apache, welches Subversion entwickelt und verwaltet.
Comments