我有一个私有文件的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