我有一个 Subversion 私有文件存储库,由 Apache 通过 HTTPS 提供服务,使用dav_svn。我想让单个域中的用户使用 HTTP 读取此存储库中的单个文件。我该如何编写这样的覆盖?当前配置:
<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>
答案1
这看起来是一条旧消息,但是它出现在 RSS 提要中,所以......
如果我正确理解了这个问题,您只想覆盖一个文件的身份验证。
<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>
作为卡特里尔据说,使用 Satisfy 指令允许您指定备用权限。在 Files 指令中使用此指令可将覆盖限制为特定文件。这不会允许提交,因为只有一个文件可以在没有身份验证的情况下访问。您始终可以使用预提交或启动提交挂钩来确保这一点。
答案2
我认为在任何情况下将存储库暴露给匿名提交都不是一个好主意。您可能需要尝试更复杂的设置,使用提交后钩子执行更新并暴露那通过具有特定子网或域的只读访问权限的别名访问目录:
例如在/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>
年龄变化率
答案3
您可以尝试在同一个目录中同时使用身份验证和基于允许、拒绝的访问控制。使用“Satisfy”,您可以将两者“或”在一起。使用 authz 文件,您可以允许对存储库中的某个路径进行只读访问。它看起来像:
<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
这不是一个完美的解决方案,但是没有其他真正的方法可以将域排除在身份验证之外