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.
quelle
Antworten:
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
svn.authz
Natürlich benötigen Sie auch die entsprechenden Benutzer in der Datei htpasswd.
quelle
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');
quelle
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
quelle
Ich habe ziemlich viel damit zu kämpfen, und die einzige Konfiguration, die für mich funktioniert, ist die folgende:
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.conf
als definiert ist.Mein aktuelles Problem ist, dass es überhaupt nicht möglich ist, die Projekte im Repository
/svn/repos
aufzulisten (obwohl auf sie ordnungsgemäß zugegriffen werden kann).SVNListParentPath
Auf Anweisung, egal wo Sie es setzen, hilft es nicht.Derzeit ist my
/var/www/svn
kein Repository, sondern nur ein Verzeichnis in einem Server-Dateisystem./var/www/svn/repos
ist ein Repository, das mit erstellt wurdesvnadmin create
quelle
Sie sollten das Websvn-Dokument gelesen haben und alles wäre offensichtlich gewesen :)
quelle