Apache忽略'要求用户'

时间:2013-09-16 10:42:09

标签: apache svn permissions webserver

我们正在使用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'。有什么(明显的)我在这里失踪了?任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

  

我在这里遗失了什么(显而易见的)?

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

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

  • DAV svn容器中没有SVNParentPath + <Location /svn>,您必须拥有N个存储库N + 1 Location容器,并为每个添加的|删除存储库添加|删除位置。 Subversion-way是为repository-dirs的父级
  • 设置单一位置
  

例如,如果您知道将在目录/ var / svn中创建多个Subversion存储库,可以通过http://my.server.com/svn/repos1http://my.server.com/svn/repos2等URL访问这些存储库,则可以使用以下示例中的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来添加或删除托管存储库。

  • 使用authz_svn_module和AuthzSVNAccessFile在Apache中实现Subversion的基于路径的ACL(并在99%的情况下使用),其中定义了用户和组的访问权限(对于树中的任何存储库或repo-tree的一部分) ...还有群组成员资格,这使得AuthDBMGroupFile过时了(而且没有LimitExcept和极限的位置 - 更紧凑和可读)