top of page
  • AutorenbildOliver Schwerttner

Subversion Teil 2: Server (deamon) konfigurieren

Aktualisiert: 21. Apr. 2023

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.

20 Ansichten0 Kommentare

Aktuelle Beiträge

Alle ansehen

댓글


left.jpg
bottom of page