我在 Apache2 中为使用 mod_dav_svn 提供服务的 SVN 存储库设置身份验证时遇到了一些问题。
这是我的目录的 Apache 配置:
<Location /svn>
DAV svn
SVNParentPath /var/svn/repos
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dev.passwd
Require valid-user
</Location>
我可以将svn
其用于下的项目/var/svn/repos
,因此我知道 DAV 正在运行,但是当我执行 svn 更新或提交(或任何操作)时,Apache 不会要求任何身份验证...无论是否存在 Auth 指令,它都会执行完全相同的操作。
存储库目录(以及所有子目录/文件)的权限仅授予 www-data(Apache2 用户/组)权限。
我还确保所有相关模块都已启用(特别是 mod_auth 已启用,所有 mod_dav* 模块也都已启用)。
知道为什么svn
命令无法通过验证吗?
提前致谢。
答案1
您的 Subversion 客户端缓存凭证?
答案2
您是否尝试过创建一个非 dav_svn(基本上是一个常规的 Web 目录)并检查权限是否有效?
例如,您可以尝试这样的操作:
<Location /test_auth>
AuthType Basic
AuthName "TEST TEST TEST"
AuthUserFile /etc/apache2/dev.passwd
Require valid-user
</Location>
答案3
读这如果你还没有。
如果这不起作用...
您是否确定没有任何 .htaccess .htpasswd 文件覆盖 httpd.conf 中的身份验证例程?
Apache 拥有一个包罗万象的权限继承模型,但要习惯它却相当困难。如果您的权限在那里设置正确,它们可能会被层次结构中较低的设置阻止,或被层次结构中较高的设置覆盖。
我希望我能给你一个更具体的答案,但是我对 Apache 的尝试通常需要我绞尽脑汁几天才能找到正确的答案。
答案4
听起来您很可能有某种重叠的配置,从而阻止 SVN 按预期工作。
当您使用 Web 浏览器浏览存储库中的不同子目录时会发生什么?它总是要求输入用户名/密码吗?尝试使用 wget 或 curl 从命令行浏览存储库。这些命令行实用程序不保留会话信息,因此您可以快速向不同的 URL 发出请求,快速使用不同的用户名和密码等。
使能够mod_info.mod_info 将创建一个页面(在http://www.example.org/server-info默认情况下,它将详细组合您的整个配置。这允许您查看重叠的配置文件(例如/etc/apache2/conf/
和下的配置文件/etc/apache2/conf.d
)是否会导致问题。
Apache 的继承模型有时可能很难理解。我发现这mod_info
可以帮助我更清楚地了解事情。满足指令可能是罪魁祸首。
确保限制 mod_info 以仅允许从您的 IP 地址/网络进行访问。