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

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

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

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

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

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

我的文件如下所示:

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

<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/回购但websvn设置为/websvn。

答案1

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

无需在两个地方(apache 配置和 authz 文件)定义权限,只需在 authz 文件中定义它们即可。如下所示:

httpd配置文件

<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 文件中的相应用户。

答案2

不知道您是否已经解决了这个问题,但这是对我有用的程序。

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

$config->useAuthenticationFile('/路径/到/你的/authz/文件');

答案3

这对我有用。

用户 1 可以看到“/”和“/project1” 用户 3 只能看到“/project1”

[群组]

组a = 用户1,用户2

组 b = 用户 3, 用户 4

[/]

@groupa = rw

[/项目1]

@groupb = rw

答案4

您应该阅读 websvn 文档,然后一切都会变得显而易见 :)

还要注意,您不应该使用 AuthzSVNAccessFile 命令来定义访问文件。

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

$配置-> useAuthenticationFile('/路径/到/访问文件');

相关内容