如何限制通过WebSVN的存储库访问?


8

我有多个通过Apache 2.2和WebDAV提供服务的Subversion存储库。它们都位于中央位置,我以这篇debian-administration.org文章为基础(尽管我放弃了对简单的htpasswd文件使用数据库身份验证的方法)。

从那时起,我也开始使用WebSVN。我的问题是,并非系统上的所有用户都应该能够访问不同的存储库,并且WebSVN的默认设置是允许任何可以进行身份​​验证的人。

根据WebSVN文档,解决此问题的最佳方法是使用Subversion的路径访问系统,因此我希望使用AuthzSVNAccessFile指令来创建它。

但是,当我这样做时,我会不断收到“ 403 Forbidden”消息。

我的文件如下所示:

我在文件中具有默认策略设置:

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

  Order deny,allow
  Deny from all
</Location>

每个存储库都会获得如下策略文件:

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

default_auth.conf文件包含以下内容:

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

我不完全确定为什么我需要在default_auth.conf中使用第二个SVNParentPath,但是今天我刚刚添加了该内容,因为添加AuthzSVNAccessFile指令后收到错误消息。

具有完全许可的访问文件

[/]
joebloggs = rw

该系统运行良好(基本上没有变化),但是当我开始尝试添加任何限制时,例如

[sysadmin:/]
joebloggs = rw

相反,我再次收到“权限被拒绝”错误。日志文件条目为:

[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

我需要做什么才能使它正常工作?配置的apache错误,还是我对svnaccess.conf文件的理解不正确?

如果我以错误的方式进行操作,那么我对整体方法没有特别的依恋,因此也随时可以提供替代方法。

更新(20090528-1600):

我尝试实现此答案,但仍然无法使其正常工作。

我知道大多数配置都是正确的,如我所添加的

[/]
joebloggs = rw

首先,“ joebloggs”拥有所有正确的访问权限。

当我尝试去特定于存储库的时候,做类似的事情

[/]
joebloggs = rw

[sysadmin:/]
mickmurphy = rw

然后我收到了一个关于Mickmurphy的权限被拒绝的错误(joebloggs仍然有效),并且出现了与我之前已经遇到的错误类似的错误

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

另外,我以前也忘记解释说我所有的存储库都在下面

/var/lib/svn/repository

更新(20090529-1245):

仍然无法使它正常工作,但是所有迹象似乎都表明问题在于Subversion中的路径访问控制无法正常工作。我的假设是我没有配置apache或svn来正确识别我的存储库结构。

这是因为'[/]'条目似乎运行良好。

我还想到这是一个可能更好地属于StackOverflow的问题?

更新(20090603-1740):

作为对这个问题的评论之一,我为Subversion本身的WebDAV设置指定了/ svn / repos位置,但是websvn设置为/ websvn。


您的websvn在哪个相对服务器URL上运行?在我当前的设置中,websvn位于/ websvn,而存储库本身位于/ svn
Sander Rijken 2009年

嗨,kaybenleroll,你能帮我这个忙吗?stackoverflow.com/questions/13541629/...
Juned

Answers:


5

问题可能与两个位置指令之间的配置拆分有关,但我不确定。

与其在两个位置(apache config和authz文件)中定义权限,不如在authz文件中定义权限。像这样:

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

显然,您还需要htpasswd文件中的适当用户。



4

不知道您是否已解决此问题,但这是对我有用的过程。

不用摆弄apache指令,而是编辑WebSVN的config.php文件并包含/取消注释以下指令:

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


不,永远不会完全解决它。我会尝试你的想法。:)
kaybenleroll

+1我也遇到了同样的问题,这已经完全解决了!谢谢!
约翰·维尔格利诺

2

这对我有用。

user1只能看到“ /”和“ / project1” user3只能看到“ / project1”

[团体]

groupa =用户1,用户2

groupb =用户3,用户4

[/]

@groupa = rw

[/ project1]

@groupb = rw


1

我为此付出了很多努力,唯一适合我的配置如下:

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

结果,group1具有对project1的读写访问权限,而group2具有对project2的读访问权限。其他所有人无权访问任何项目。

我应该强调,“ project1”和“ project2”是在Apache配置文件subversion.confas中定义的存储库中的项目。

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

我当前的问题是,根本无法在存储库/svn/repos中列出项目(尽管可以正确访问它们)。SVNListParentPath关于指令,无论放在哪里,都无济于事。

当前,我/var/www/svn不是存储库,而只是服务器文件系统中的目录。/var/www/svn/repos是使用创建的存储库svnadmin create


0

您应该已经阅读了websvn文档,一切都会变得很明显:)

另请注意,您不应使用AuthzSVNAccessFile命令来定义访问文件。

现在,您已经定义了身份验证,将要求您输入用户名和密码,以便访问WebSVN目录。剩下的就是配置WebSVN以使用您的Subversion访问文件来控制访问。将此行添加到您的config.php文件中:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.