我在Apache2中为使用mod_dav_svn提供服务的SVN存储库设置身份validation时遇到了一些麻烦。
这是我的Apacheconfiguration目录:
<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不要求任何身份validation…它无论Auth指令是否存在,完全相同。
版本库目录(以及所有子目录/文件)上的权限仅授予www-data(Apache2用户/组)的权限。
我还确保所有相关的模块都已启用(特别是mod_auth已启用,所有mod_dav *模块都已启用)。
任何想法为什么svn命令不authentication?
提前致谢。
你的Subversion客户端是否caching了凭据 ?
你有没有尝试做一个非dav_svn(基本上是一个普通的networking目录),并检查权限是否工作?
例如,你可以尝试这样的事情:
<Location /test_auth> AuthType Basic AuthName "TEST TEST TEST" AuthUserFile /etc/apache2/dev.passwd Require valid-user </Location>
如果你还没有阅读,请阅读。
如果这不起作用…
你肯定没有任何.htaccess .htpasswd文件不覆盖httpd.conf中的authentication例程吗?
Apache有一个全面的inheritance模型,对于习惯来说非常棘手的权限。 如果您的权限在此处设置正确,则可能会被层次结构中较低的设置阻止,或者被层次结构中的较高层次所覆盖。
我希望我可以给你一个更具体的答案,但是我对阿帕奇的攻击通常是让我把头撞在墙上几天,以便把它做好。
一些想法,按照顺序:
这听起来像你最有可能有某种重叠的configuration,这是防止SVN按预期工作。
使用webbrowser浏览版本库中的不同子目录时会发生什么? 它是否总是要求用户名/密码? 尝试使用wget或curl从命令行浏览存储库。 这些命令行实用程序不会保留会话信息,因此您可以快速地将请求发送到不同的URL,快速使用不同的用户名和密码等。
启用mod_info 。 mod_info将会创build一个页面(默认情况下是http://www.example.org/server-info ),它将详细地整合你的整个configuration。 这允许您查看重叠的configuration文件(例如/etc/apache2/conf/和/etc/apache2/conf.dconfiguration文件)是否导致问题。
Apache的inheritance模型有时候很难被挖掘。 我发现mod_info可以帮助我更清楚地看到事情。 令人满意的指示可能是责任。
一定要限制mod_info只允许从您的IP地址/networking访问。
另一个build议,创build一个不同的访问path的第二个存储库,并确保这些东西竞争在第一个存储库的名称空间之外。 这将有助于消除您现有的SVN回购下的exception情况。
像这样的东西:
<Location /svntest> DAV svn SVNParentPath /tmp/test/repos AuthType Basic AuthName "TEST" AuthUserFile /tmp/test/test.passwd Require valid-user </Location>
问题是否仍然存在? 如果是这样,那么你的问题是由于在Apacheconfiguration奇怪。 如果问题没有发生,那么问题是由于subversion版本库在/ var / svn / repos下的configuration问题造成的。