1

我们正在使用 berkeley-db 来授权 svn-access。

我们将其配置为:

<Location /svn>
    AuthType basic
    AuthName "svn Authentication"

    AuthBasicProvider dbm
    AuthDBMUserFile /****/userDatabase.db
    AuthDBMType db
    AuthDBMGroupFile /****/userDatabase.db
    AuthzDBMType db

    SSLRequireSSL
</Location>

直到这里一切正常,人们根据各自的组获得访问权限。不,我想要/需要添加一些特定用户以获得对一个存储库的(只读)访问权限,而无需更改他们的组。我尝试了以下

<Location /svn/administration>
    DAV svn
    SVNPath /data/svn/administration

    SVNPathAuthz off

    <LimitExcept GET PROPFIND OPTIONS REPORT>
        Require group svn-admin-readwrite
   </LimitExcept>

    <Limit GET PROPFIND OPTIONS REPORT>
        Require group svn-admin-read
        Require user testUser testUser2
    </Limit>
</Location>

启用了模块“authn_dbm”和“authz_user”。有什么(明显的)我在这里想念的吗?任何帮助表示赞赏!

4

1 回答 1

1

有什么(明显的)我在这里想念的吗?

阅读(和理解)SVN Book 的某些部分,至少“Per-directory access control”(可能是整章“httpd, the Apache HTTP Server”)和“Path-Based Authorization”

我在当前配置中看到至少两个弱点

  • 如果容器中没有DAV svn+ SVNParentPath<Location /svn>您必须拥有 N 个存储库 N+1 个Location容器,并为每个添加|删除的存储库添加|删除位置。颠覆方式是为存储库目录的父级提供单一位置

例如,如果您知道您将在目录 /var/svn 中创建多个 Subversion 存储库,这些存储库将通过诸如http://my.server.com/svn/repos1http://my.server 之类的 URL 访问。 com/svn/repos2等,您可以在以下示例中使用 httpd.conf 配置语法:

<Location /svn>
  DAV svn

  # Automatically map any "/svn/foo" URL to repository /var/svn/foo
  SVNParentPath /var/svn
</Location>

使用这种语法,Apache 会将路径部分以 /svn/ 开头的所有 URL 的处理委托给 Subversion DAV 提供程序,然后它将假定 SVNParentPath 指令指定的目录中的任何项目实际上是 Subversion 存储库。这是一种特别方便的语法,与使用 SVNPath 指令不同,您不必重新启动 Apache 即可添加或删除托管存储库。

  • Apache 中 Subversion 的基于路径的 ACL 使用 AuthzSVNAccessFile 实现(并在 99% 的情况下使用)authz_svn_module,其中定义了用户和组的访问权限(对于树中的任何存储库或 repo-tree 的一部分)......以及组的成员资格,这使得 AuthDBMGroupFile 过时(以及没有 LimitExcept 和 Limit 的 Location - 更紧凑和可读)
于 2013-09-17T01:26:49.320 回答