Wie beschränke ich den Repository-Zugriff über WebSVN?


8

Ich habe mehrere Subversion-Repositorys, die über Apache 2.2 und WebDAV bereitgestellt werden. Sie befinden sich alle an einem zentralen Ort, und ich habe diesen Artikel von debian-administration.org als Grundlage verwendet (ich habe jedoch die Verwendung der Datenbankauthentifizierung für eine einfache htpasswd-Datei eingestellt).

Seitdem benutze ich auch WebSVN . Mein Problem ist, dass nicht alle Benutzer im System auf die verschiedenen Repositorys zugreifen können sollten. Die Standardeinstellung von WebSVN besteht darin, jedem zu erlauben, der sich authentifizieren kann.

Laut der WebSVN-Dokumentation besteht der beste Weg, dies zu umgehen, darin, das Pfadzugriffssystem von Subversion zu verwenden. Daher habe ich versucht, dies mithilfe der AuthzSVNAccessFile-Direktive zu erstellen.

Wenn ich das mache, bekomme ich immer wieder "403 Forbidden" -Nachrichten.

Meine Dateien sehen wie folgt aus:

Ich habe Standardrichtlinieneinstellungen in einer Datei:

<Location /svn/>
  DAV svn
  SVNParentPath  /var/lib/svn/repository

  Order deny,allow
  Deny from all
</Location>

Jedes Repository erhält eine Richtliniendatei wie folgt:

<Location /svn/sysadmin/>
    Include  /var/lib/svn/conf/default_auth.conf
    AuthName "Repository for sysadmin"
    require user joebloggs jimsmith mickmurphy
</Location>

Die Datei default_auth.conf enthält Folgendes:

SVNParentPath      /var/lib/svn/repository
AuthType           basic
AuthUserFile       /var/lib/svn/conf/.dav_svn.passwd
AuthzSVNAccessFile /var/lib/svn/conf/svnaccess.conf

Ich bin mir nicht ganz sicher, warum ich den zweiten SVNParentPath in default_auth.conf benötige, aber ich habe dies heute hinzugefügt, da ich aufgrund des Hinzufügens der AuthzSVNAccessFile-Direktive Fehlermeldungen erhielt.

Mit einer völlig zulässigen Zugriffsdatei

[/]
joebloggs = rw

Das System funktionierte einwandfrei (und war im Wesentlichen unverändert), aber sobald ich anfange, irgendwelche Einschränkungen hinzuzufügen, wie z

[sysadmin:/]
joebloggs = rw

Stattdessen erhalte ich erneut die Fehler "Berechtigung verweigert". Die Einträge in der Protokolldatei sind:

[Thu May 28 10:40:17 2009] [error] [client 89.100.219.180] Access denied: 'joebloggs' GET websvn:/
[Thu May 28 10:40:20 2009] [error] [client 89.100.219.180] Access denied: 'joebloggs' GET svn:/sysadmin

Was muss ich tun, damit dies funktioniert? Haben Sie Apache falsch konfiguriert oder ist mein Verständnis der Datei svnaccess.conf falsch?

Wenn ich dies falsch mache, habe ich keine besondere Bindung an meinen Gesamtansatz. Sie können also auch Alternativen anbieten.

UPDATE (20090528-1600):

Ich habe versucht, diese Antwort zu implementieren , aber ich kann sie immer noch nicht richtig zum Laufen bringen.

Ich weiß, dass der größte Teil der Konfiguration korrekt ist, wie ich hinzugefügt habe

[/]
joebloggs = rw

am start und 'joebloggs' hat dann den richtigen zugang.

Wenn ich jedoch versuche, repository-spezifisch zu werden, mache ich so etwas

[/]
joebloggs = rw

[sysadmin:/]
mickmurphy = rw

dann bekam ich eine Erlaubnis verweigert mickmurphy Fehler (joebloggs funktioniert immer noch), mit einem Fehler ähnlich dem, den ich bereits zuvor hatte

[Thu May 28 10:40:20 2009] [error] [client 89.100.219.180] Access denied: 'mickmurphy' GET svn:/sysadmin

Außerdem habe ich zuvor vergessen zu erklären, dass sich alle meine Repositories darunter befinden

/var/lib/svn/repository

UPDATE (20090529-1245):

Immer noch kein Glück, dass dies funktioniert, aber alle Anzeichen scheinen darauf hinzudeuten, dass das Problem mit der Pfadzugriffskontrolle in Subversion nicht richtig funktioniert. Ich gehe davon aus, dass ich Apache oder SVN nicht so konfiguriert habe, dass meine Repository-Struktur richtig erkannt wird.

Dies liegt daran, dass der Eintrag '[/]' perfekt zu funktionieren scheint.

Mir fällt auch ein, dass dies eine Frage ist, die besser zu StackOverflow gehört.

UPDATE (20090603-1740):

Als Antwort auf einen der Kommentare zu dieser Frage erhält mein WebDAV-Setup für die Subversion selbst den Speicherort / svn / repos, aber websvn ist auf / websvn gesetzt.


Unter welcher relativen Server-URL wird Ihr Websvn ausgeführt? In meinem aktuellen Setup befindet sich websvn unter / websvn, während sich das Repository selbst unter / svn befindet
Sander Rijken

hi kaybenleroll kannst du mir dabei helfen? stackoverflow.com/questions/13541629/…
Juned

Antworten:


5

Das Problem hängt wahrscheinlich mit der Aufteilung der Konfiguration zwischen zwei Standortanweisungen zusammen, aber ich bin mir nicht sicher.

Anstatt Berechtigungen an zwei Stellen zu definieren (Apache-Konfiguration und Authz-Datei), definieren Sie sie einfach in der Authz-Datei. Wie so:

httpd.conf

<Location /svn>
  DAV svn
  SVNParentPath /var/lib/svn/repository

  Require valid-user
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /path/to/.htpasswd

  SVNPathAuthz on
  AuthzSVNAccessFile /path/to/svn.authz
</Location>

svn.authz

[groups]
sysadmins = joebloggs jimsmith mickmurphy

# By default, nobody has any permissions
[/]
* = 

# sysadmins get access to the sysadmin repository
[sysadmin:/]
@sysadmins = rw

Natürlich benötigen Sie auch die entsprechenden Benutzer in der Datei htpasswd.


Kannst du mir dabei helfen? stackoverflow.com/questions/13541629/…
Juned

4

Ich habe keine Ahnung, ob Sie dieses Problem gelöst haben oder nicht, aber dies ist das Verfahren, das für mich funktioniert.

Vergessen Sie das Fummeln mit Apache-Anweisungen, bearbeiten Sie stattdessen die Datei config.php von WebSVN und fügen Sie die folgende Anweisung hinzu / kommentieren Sie sie aus:

$ config-> useAuthenticationFile ('/ path / to / your / authz / file');


Nein, nie vollständig gelöst. Ich werde deine Idee versuchen. :)
Kaybenleroll

+1 Ich hatte das gleiche Problem und das hat es komplett behoben! Vielen Dank!
John Virgolino

2

das funktioniert bei mir.

Benutzer1 kann "/" und "/ project1" sehen. Benutzer3 kann nur "/ project1" sehen.

[Gruppen]

groupa = Benutzer1, Benutzer2

groupb = user3, user4

[/]

@groupa = rw

[/Projekt 1]

@groupb = rw


1

Ich habe ziemlich viel damit zu kämpfen, und die einzige Konfiguration, die für mich funktioniert, ist die folgende:

Authz file
------
[groups]
group1=user1
group2=user2

#Read and write for everyone defined in some group, others denied
[/]
@group1=rw
@group2=rw
*=

[project1:/]
@group1=rw
*=

[project2:/]
@group2=r
*=
----end authz file

Infolgedessen hat Gruppe1 Lese- und Schreibzugriff auf Projekt1 und Gruppe2 Lesezugriff auf Projekt2. Alle anderen haben keinen Zugriff auf Projekte.

Ich sollte betonen, dass "project1" und "project2" Projekte innerhalb des Repositorys sind, das in der Apache-Konfigurationsdatei subversion.confals definiert ist.

Subversion.conf
----
LoadModule dav_module         modules/mod_dav.so
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

<Location /svn>
   DAV svn
   SVNParentPath /var/www/svn
   AuthType Basic
   AuthName "Name of the root repositories"
   Require valid-user
</Location>

<Location /svn/repos>
   AuthName "Subversion subrepository"
   AuthUserFile /var/www/svn/repos/conf/passwdfile
#Authz control
   AuthzSVNAccessFile /var/www/svn/repos/conf/authz
</Location>

-----end

Mein aktuelles Problem ist, dass es überhaupt nicht möglich ist, die Projekte im Repository /svn/reposaufzulisten (obwohl auf sie ordnungsgemäß zugegriffen werden kann). SVNListParentPathAuf Anweisung, egal wo Sie es setzen, hilft es nicht.

Derzeit ist my /var/www/svnkein Repository, sondern nur ein Verzeichnis in einem Server-Dateisystem. /var/www/svn/reposist ein Repository, das mit erstellt wurdesvnadmin create


0

Sie sollten das Websvn-Dokument gelesen haben und alles wäre offensichtlich gewesen :)

Beachten Sie außerdem, dass Sie den Befehl AuthzSVNAccessFile nicht zum Definieren der Zugriffsdatei verwenden sollten.

Nachdem Sie Ihre Authentifizierung definiert haben, werden Sie nach Ihrem Benutzernamen und Kennwort gefragt, um auf das WebSVN-Verzeichnis zugreifen zu können. Sie müssen lediglich WebSVN so konfigurieren, dass Ihre Subversion-Zugriffsdatei zur Steuerung des Zugriffs verwendet wird. Fügen Sie diese Zeile Ihrer Datei config.php hinzu:

$ config-> useAuthenticationFile ('/ path / to / accessfile');

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.