避免读取单个文件的密码检查(Apache + dav_svn)

我有一个私有文件的Subversion版本库,由Apache使用dav_svn通过HTTPS 提供 。 我想给单个域中的用户使用HTTP从这个存储库读取单个文件的访问权限。 我如何写这样的覆盖? 目前的configuration:

<Location /svn> DAV svn SVNParentPath /var/lib/svn AuthzSVNAccessFile /etc/apache2/dav_svn.authz AuthType Basic AuthName "Subversion Repository" AuthUserFile /etc/apache2/dav_svn.passwd Require valid-user </Location> 

这似乎是一个旧的,但它popup的RSS源,所以..

如果我已经正确地理解了这个问题,您只想覆盖一个文件的身份validation。

 <Location /svn> DAV svn SVNParentPath /var/lib/svn AuthzSVNAccessFile /etc/apache2/dav_svn.authz AuthType Basic AuthName "Subversion Repository" AuthUserFile /etc/apache2/dav_svn.passwd Require valid-user </Location> <Files /path/to/file> DAV svn SVNParentPath /var/lib/svn AuthzSVNAccessFile /etc/apache2/dav_svn.authz AuthType Basic AuthName "Subversion Repository" AuthUserFile /etc/apache2/dav_svn.passwd Require valid-user Allow from .some.domain.com # A domain name (requires the slow hostname lookups) Allow from 192.168.10.0/24 # An IP subnet Satisfy any </Files> 

正如katriel所说,使用Satisfy指令可以指定替代权限。 在Files指令中使用这个限制覆盖到特定的文件。 这将不允许提交,因为只有一个文件没有身份validation访问。 您可以随时确保预先提交或启动提交钩子。

在任何情况下,我都不认为在匿名提交中公开仓库是个好主意。 您可能想要尝试更精细的设置,使用post-commit挂钩执行更新,并通过具有对特定子网或域的只读访问权限的别名公开目录:

例如在/ var / lib / svn / repos / hooks / post-commit中:

 #!/bin/sh # Of course, the update directory should be checked out the first time cd /var/www/repomirror svn update 

并在你的httpd.conf

 <Location /repomirror> Order Deny,Allow Deny from all Allow from apache.org </Location> 

因人而异

您可以尝试使用身份validation和允许,在同一目录上拒绝基于访问控制。 使用“满意”你可以“或”他们两个。 使用authz文件,您可以允许在存储库中的某个path上进行只读访问。它看起来像这样:

 <Location /svn> DAV svn SVNParentPath /var/lib/svn AuthzSVNAccessFile /etc/apache2/dav_svn.authz AuthType Basic AuthName "Subversion Repository" AuthUserFile /etc/apache2/dav_svn.passwd Require valid-user Order Allow,Deny Allow from .some.domain.com Satisfy any </Location> 

并在authz文件中使用

 [repo:/public/dir] * = r @writers = rw 

这不是一个完美的解决scheme,bur没有真正的其他方式来排除域的身份validation