Apache 2.4 + SVN authz 身份验证,具有混合身份验证/匿名访问

Apache 2.4 + SVN authz 身份验证,具有混合身份验证/匿名访问

我正在使用 Apache 2.4,并且希望在没有 mod_access_compat 的情况下使用它。

我正在尝试提供 SVN 存储库,并由 mod_authz_svn 处理访问控制。

我希望某些存储库或存储库内的位置具有只读匿名访问权限。我希望其他存储库或位置需要基本身份验证。

Apache 2.4 不再支持该Satisfy all语法,但是 mod_authz_svn 似乎需要它。在 Apache 2.4 上应该如何配置?

Apache 配置:

 <Location /svn>
        DAV svn
        SVNParentPath /usr/projects/svn
        AuthType Basic
        AuthName "SVN repository"
        AuthUserFile /usr/project-config/etc/svn-auth-file
        AuthzSVNAccessFile /usr/project-config/etc/svn-access-control
        Require valid-user
 </Location>

svn-访问控制:

# cat etc/svn-access-control
[/]
antiduh = rw

[openprojects:/]
* = r
antiduh = rw

我有 5 个仓库,openprojects 是唯一一个我想拥有匿名只读访问权限的仓库。我似乎无法让它工作。即使是我能找到的最新文档对于 mod_authz_svn 继续使用Satisfy all

答案1

在 mod_authz_svn 的源代码中查找,它似乎对 有很强的依赖性ap_satisfies(r) == SATISFY_ANY。我并不完全熟悉 Apache API 模型,但这似乎表明 mod_authz_svn 目前不支持 Apache 2.4 的新身份验证模型。

由于没有其他人提出答案或相反的证据,我将把它标记为答案。

为了使其在 Apache 2.4 下工作,请加载mod_access_compat模块:

LoadModule access_compat_module libexec/apache24/mod_access_compat.so

然后添加Satisfy any子句,正如文档当前所示。

 <Location /svn>
    DAV svn
    SVNParentPath /usr/home/antiduh/svn
    AuthType Basic
    AuthName "SVN repository"
    AuthUserFile /usr/home/antiduh/svn/etc/svn-auth-file
    AuthzSVNAccessFile /usr/home/antiduh/svn/etc/svn-access-control
    Satisfy any
    Require valid-user
 </Location>

答案2

在大多数情况下,2.4 的等效方法Satisfy All是将Require指令包含在<RequireAll>块。相当于Satisfy Any是一个<RequireAny>块。

有关变更和等效变更的更多信息,本演示文稿 (PDF)Rich Bowen 的这篇文章可能会有所帮助。

答案3

可以Location为 SVN 协议命令的子集创建单独的无需身份验证的命令,例如:

<Location /subversion-open>
  DAV                    svn
  SVNParentPath          /path/to/svn-repos/subversion-open
  SVNListParentPath      Off
  SVNReposName           "SVN repos"
  AuthzSVNAccessFile     /path/to/svn-authz-file

  # Limit write permission to list of valid users.
  <LimitExcept GET PROPFIND OPTIONS REPORT>
    AuthType               Basic
    AuthBasicProvider      file PAM
    AuthUserFile           /path/to/svn-htpasswd-file
    AuthPAMService         httpd_svn
    AuthName               "Open access SVN repos"

    Require                valid-user
  </LimitExcept>
</Location>

这样未经身份验证的用户就可以读取存储库,而经过身份验证的用户则可以根据规则获得访问权限svn-authz-file。(在此示例中,我们还允许系统用户以及htpasswd文件中的用户通过 PAM 进行身份验证)

相关内容