Wie richte ich die Zugriffskontrolle in SVN ein?

83

Ich habe ein Repository mit SVN eingerichtet und Projekte hochgeladen. An diesen Projekten arbeiten mehrere Benutzer. Aber nicht jeder benötigt Zugriff auf alle Projekte. Ich möchte Benutzerberechtigungen für jedes Projekt einrichten.

Wie kann ich das erreichen?

user15425
quelle

Antworten:

84

In Ihrem Ordner svn \ repos \ YourRepo \ conf finden Sie zwei Dateien, authz und passwd . Dies sind die beiden, die Sie anpassen müssen.

In der passwd- Datei müssen Sie einige Benutzernamen und Passwörter hinzufügen. Ich gehe davon aus, dass Sie dies bereits getan haben, da Sie Leute haben, die es verwenden:

[users]
User1=password1
User2=password2

Dann möchten Sie mit der authz- Datei entsprechende Berechtigungen zuweisen :

Erstellen Sie die gewünschten konzeptionellen Gruppen und fügen Sie Personen hinzu:

[groups]
allaccess = user1
someaccess = user2

Wählen Sie dann den Zugriff aus, den sie sowohl auf Berechtigungs- als auch auf Projektebene haben.

Lassen Sie uns also unseren "All Access" -Typen von der Wurzel aus Zugriff gewähren:

[/]
@allaccess = rw

Aber geben Sie unseren "einigen Zugriff" -Typen nur Lesezugriff auf ein Projekt auf niedrigerer Ebene:

[/someproject]
@someaccess = r

Eine einfache Dokumentation finden Sie auch in den Dateien authz und passwd .

Stephen Bailey
quelle
8
relevante Handbuchseite ist: svnbook.red-bean.com/de/1.7/…
ErichBSchulz
1
Hinweis: Es wird nicht funktionieren, wenn Sie direkt über ssh (ohne svnserve) auf das Repository zugreifen
ALex_hha
Wenn ich dem Benutzer beispielsweise einen Ordner unter einem Repository gebe, kann der Benutzer nur über einen direkten Link auf diesen Ordner zugreifen. Kann der Benutzer ein Repository hinzufügen und ihm nur die ihm zugewiesenen Ordner anzeigen? Danke für die Antwort .
Maoanz
Gruppen werden mit @groupnamediesem einen Bit bei der Definition von Regeln aufgerufen , es ist perfekt in Ihren Beispielen, nur um darauf hinzuweisen.
Wolfeh
28

@ Stephen Bailey

Um Ihre Antwort zu vervollständigen, können Sie die Benutzerrechte auch über eine Nur-Text-Datei in Ihrem Repository an den Projektmanager delegieren.

Dazu richten Sie Ihre SVN-Datenbank mit einer Standarddatei ein authz, die Folgendes enthält:

###########################################################################
# The content of this file always precedes the content of the
# $REPOS/admin/acl_descriptions.txt file.
# It describes the immutable permissions on main folders.
###########################################################################
[groups]
svnadmins = xxx,yyy,....

[/]
@svnadmins = rw
* = r
[/admin]
@svnadmins = rw
@projadmins = r
* =

[/admin/acl_descriptions.txt]
@projadmins = rw

Diese Standarddatei authzberechtigt die SVN-Administratoren, eine sichtbare Nur- Text-Datei in Ihrem SVN-Repository mit dem Namen "/admin/acl_descriptions.txt" zu ändern , in der die SVN-Administratoren oder Projektmanager die Benutzer ändern und registrieren.

Anschließend richten Sie einen Pre-Commit-Hook ein, der erkennt, ob die Revision aus dieser Datei (und nur dieser Datei) besteht.

Wenn dies der Fall ist, überprüft das Skript dieses Hooks den Inhalt Ihrer Nur-Text-Datei und prüft, ob jede Zeile der SVN-Syntax entspricht.

Anschließend aktualisiert ein Post-Commit-Hook die \conf\authzDatei mit der Verkettung von:

  • die oben authzdargestellte TEMPLATE- Datei
  • die Klartextdatei /admin/acl_descriptions.txt

Die erste Iteration wird vom SVN-Administrator durchgeführt, der Folgendes hinzufügt:

[groups]
projadmins = zzzz

Er schreibt seine Änderung fest und das aktualisiert die authzDatei.

Dann kann der Projektmanager 'zzzz' jede Benutzergruppe und jeden gewünschten Benutzer hinzufügen, entfernen oder deklarieren. Er schreibt die Datei fest und die authzDatei wird aktualisiert.

Auf diese Weise muss der SVN-Administrator nicht alle Benutzer für alle SVN-Repositorys einzeln verwalten .

VonC
quelle
27

Ein Gotcha, das mich erwischt hat:

[repos:/path/to/dir/] # this won't work

aber

[repos:/path/to/dir]  # this is right

Sie müssen keinen abschließenden Schrägstrich in das Verzeichnis einfügen, sonst wird 403 für die OPTIONS-Anforderung angezeigt.

Chris Burgess
quelle
8

Sie können svn + ssh: verwenden und es basiert dann auf der Zugriffssteuerung auf das Repository am angegebenen Speicherort.

Auf diese Weise hoste ich ein Projektgruppen-Repository an meiner Uni, in dem ich nichts anderes einrichten kann. Nur ein Verzeichnis zu haben, das der Gruppe gehört, und svn-admin (oder was auch immer es war) darin auszuführen, bedeutet, dass ich keine Konfiguration vornehmen musste.

Matthew Schinckel
quelle
Dies ist eine entsetzliche Antwort. Diese SSH-Methode ist schlecht dokumentiert und scheint nur unter Linux zu funktionieren.
user1040323
Einfach nicht wahr. Man muss nur einen SSH-Daemon auf seinem Windows-Server ausführen und svn + ssh funktioniert für Windows genauso wie für Linux. Es gibt viele Tutorials, in denen erklärt wird, wie SSH auf einem Windows-Computer ausgeführt wird.
Chuck Wolber
Außerdem, lieber @ user1040323, gibt es andere Nicht-Linux-Plattformen als Windows: Ich bin mir ziemlich sicher, dass der Computer, auf dem ich war, nicht Linux war, sondern eine BSD-Variante.
Matthew Schinckel
5

Obwohl ich vorschlagen würde, dass der Apache-Ansatz besser ist, funktioniert SVN Serve einwandfrei und ist ziemlich einfach.

Angenommen, Ihr Repository heißt "my_repo" und wird in C: \ svn_repos: gespeichert.

  1. Erstellen Sie eine Datei mit dem Namen "passwd" in "C: \ svn_repos \ my_repo \ conf". Diese Datei sollte folgendermaßen aussehen:

    [Users]
    username = password
    john = johns_password
    steve = steves_password
    
  2. In C: \ svn_repos \ my_repo \ conf \ svnserve.conf setzen:

    [general]
    password-db = passwd
    auth-access=read
    auth-access=write
    

Dadurch werden Benutzer gezwungen, sich anzumelden, um in dieses Repository zu lesen oder zu schreiben.

Befolgen Sie diese Schritte für jedes Repository, und schließen Sie nur die entsprechenden Benutzer in die passwdDatei für jedes Repository ein.

RB.
quelle
Achtung: Passwörter werden im Klartext in der SVN-Conf-Datei gespeichert!
AVA
3

Der beste Weg ist, Apache einzurichten und den Zugriff über ihn einzurichten. Überprüfen Sie das SVN-Buch auf Hilfe. Wenn Sie Apache nicht verwenden möchten, können Sie mit svnserve auch eine minimalistische Zugriffskontrolle durchführen.

Mladen Mihajlovic
quelle
0

Apache Subversion unterstützt die pfadbasierte Autorisierung , mit der Sie detaillierte Berechtigungen für Benutzer- und Gruppenkonten für Pfade in Ihren Repositorys (Dateien oder Verzeichnisse) konfigurieren können. Die pfadbasierte Autorisierung unterstützt drei Zugriffsebenen: Kein Zugriff, Schreibgeschützt und Lesen / Schreiben.

Pfadbasierte Berechtigungsberechtigungen werden in Berechtigungsdateien pro Repository oder pro Server mit einer speziellen Syntax gespeichert. Hier ist ein Beispiel aus SVNBook:

[calc:/branches/calc/bug-142]
harry = rw
sally = r

Wenn Sie eine komplexe Berechtigungsstruktur mit vielen Pfaden und Konten benötigen, können Sie von den von VisualSVN Server bereitgestellten GUI-basierten Berechtigungsverwaltungstools profitieren:

  • Serveradministratoren können Benutzer- und Gruppenberechtigungen über die VisualSVN Server Manager-Konsole oder PowerShell verwalten.
  • Benutzer ohne Administratorrechte können Berechtigungen über RepoCfg verwalten.

Repository-Berechtigungen in VisualSVN Server Manager Geben Sie hier die Bildbeschreibung ein

Repository-Berechtigungen in PowerShell Geben Sie hier die Bildbeschreibung ein

Benutzer ohne Administratorrechte können Berechtigungen über das RepoCfg-Tool verwalten Geben Sie hier die Bildbeschreibung ein

bahrep
quelle