【问题标题】:How Do I Restrict Repository Access via WebSVN?如何通过 WebSVN 限制存储库访问?
【发布时间】:2010-10-30 15:51:55
【问题描述】:

注意:我最初在serverfault.com 上提出了这个问题,但到目前为止只得到了一个回复,我越想越觉得在 stackoverflow 上可能更好。

我有多个通过 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):

我尝试实现this answer,但仍然无法使其正常工作。

我知道大部分配置都是正确的,我已经添加了

[/]
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?

【问题讨论】:

    标签: svn apache access-control websvn


    【解决方案1】:

    您可以使用 apache 的 htpasswd 实用程序(位于 bin 目录中)生成 md5 密码文件。

    然后,在你的 httpd.conf 中:

    <Location /svn>
         DAV svn
         SVNParentPath "repo path"
         AuthType Basic
         AuthName "Repository"
         AuthUserFile "password file path"
         Require valid-user
         SVNListParentPath on #if you want a repository listing for the whole svn directory
    </Location>
    

    这将需要用户身份验证,并且仅接受位于密码文件(来自 htpasswd)中的用户名/密码组合进行访问。

    此外,您还可以通过以下方式(在位置标记内)指定每个人的只读访问权限,但使用密码文件进行提交等:

    <LimitExcept GET PROPFIND OPTIONS REPORT>
         Require valid-user
    </LimitExcept>
    

    如果我了解您的需求,这应该可以解决用户级访问问题。

    编辑:

    我忘了提一下,如果你确实使用了密码文件,请确保它不能通过网络访问(即,在存储它的 apache 中没有分配别名或目录)。

    【讨论】:

    • 我已经有一个 .htpasswd 文件并且一切正常。当我使用上面列出的 svnaccess.conf 文件尝试使用 subversion 的基于路径的访问控制时,就会出现问题。我的直觉告诉我,上面的配置几乎是正确的,我要么遗漏了 Apache 指令,要么在我写出 svnaccess.conf 文件以获得我需要的东西时遗漏了一些东西。跨度>
    • 嗨 @Chris S 你能帮我解决这个问题吗stackoverflow.com/questions/13541629/…
    【解决方案2】:

    您必须授予每个人对根目录的读取权限。然后根据需要从特定存储库中删除读取权限。与用户组合作可能有助于保持较小的配置。

    你可以这样试一试:

    [/]
    * = r
    
    [sysadmin:/]
    mickmurphy =
    joebloggs = rw
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多