我们曾经在Windows服务器上使用Collabnet SVN / Apache组合,使用LDAP身份validation,虽然性能不是很好,但它用来完美地工作。
切换到新的Ubuntu 10安装,并设置Apache / SVN / LDAPconfiguration后,我们可以通过LDAP使用Active Directory身份validation来访问我们的存储库。
我们现在有一个非常奇怪的问题。 每当有新用户访问版本库,我们的SVN客户端(我们有一些取决于工具,但为了争辩,让我们坚持龟SVN)报告“错误500 – 未知的响应”。 为了解决这个问题,我们必须使用Web浏览器login到回购站点,然后“向后”导航,直到它正常工作
例如:
https://svn.example.local/SVN/MyRepo/MyModule/ – 错误500( 坏 ) https://svn.example.local/SVN/MyRepo/MyModule/ – 错误500( 错误 ) https://svn.example.local/SVN/MyRepo/ – 错误500( 错误 ) https://svn.example.local/SVN/ – 禁止403( 正确 ) https://svn.example.local/SVN/MyRepo/ – 确定200( 正确 ) https://svn.example.local/SVN/MyRepo/MyModule/ – 错误500( 坏 ) https://svn.example.local/SVN/MyRepo/MyModule/ – 确定200( 正确 ) https://svn.example.local/SVN/MyRepo/MyModule/ – OK 200( 正确 ) 似乎需要authentication树,从svnparentpath开始到所需的模块。
有没有人见过这样的事情? 任何关于从Collabnet的SVN服务器撤回之前从哪里开始的想法?
更新
使用Apache2,这里是我的httpd.conf中的/svn位置:
<Location /svn> DAV svn SVNParentPath /var/lib/svn AuthName "Subversion Repositories" AuthType Basic AuthBasicProvider ldap AuthzLDAPAuthoritative off AuthLDAPURL "ldap://dc1.domain.local:389/DC=domain,DC=local?sAMAccountName?sub?(objectClass=*)" NONE AuthLDAPBindDN "domain\apacheaccount" AuthLDAPBindPassword superawesomepassword require valid-user </Location>
/var/logs/apache2/error.log中唯一的错误是我使用错误密码的合法身份validation错误。 在access.log ,错误500行如下所示:
192.168.161.101 - fname.sname [11/May/2010:08:39:08 +1000] "OPTIONS /svn/MyRepo HTTP/1.1" 500 634 "-" "SVN/1.6.6 (r40053) neon/0.28.6"
我正在使用Debian的“Lenny”设置,运行Apache2 / SVN,并通过Apache直接向AD进行身份validation,同时在同一台机器上托pipe一个Trac站点。 我会刺穿它,但我需要一些更多的信息...
SVN的访问是通过Apache的内置模块,所以我的第一个问题是 – 你运行这个SVN独立进程,或通过Apache(它似乎是Apache,但我只是想确定)? 第二个问题是,你使用的是Apache2还是Apache(1.x)? 第三个问题是,你是否使用通过PAM的LDAPauthentication,或通过Apache的内置支持?
仅供参考,以下是Tracconfiguration(已清理)的版本,以及通过AD进行身份validation的LDAP设置(是的,它对任何人都是开放的,因为Trac拥有自己的权限系统,在我的设置中默认为只读身份validation用户):
#Rudimentary Apache2 authentication for Active Directory (without group controls) <Location /trac> SetHandler mod_python PythonInterpreter main_interpreter PythonHandler trac.web.modpython_frontend PythonOption TracEnvParentDir /srv/trac PythonDebug on Order deny,allow Deny from all Allow from 10.0.0.0/8 AuthType Basic AuthName "Trac Projects" AuthBasicProvider "ldap" AuthLDAPURL "ldap://enterprise-dc.mycompany.com:3268/DC=localsite,DC=mycompany,DC=com?sAMAccountName?sub?(objectClass=user)" AuthLDAPBindDN [email protected] AuthLDAPBindPassword "supersecretpasswordthatnoonewillguess" authzldapauthoritative On require valid-user # require ldap-group "CN=Users,DC=local-site,DC=mycompany,DC=com" </Location>
更重要的是,为了您的目的,使用这种forms的身份validation作为模板,我们可以获取/etc/apache2/mods-enabled/dav_svn.conf的设置,这将控制您的SVN访问:
<Location /svn> DAV svn SVNParentPath /srv/svn SVNAutoversioning on Order deny,allow Deny from all Allow from 10.0.0.0/8 AuthType Basic AuthName "Subversion Repository" AuthBasicProvider "ldap" AuthLDAPURL "ldap://enterprise-dc.mycompany.com:3268/DC=local-site,DC=mycompany,DC=com?sAMAccountName?sub?(objectClass=user)" AuthLDAPBindDN [email protected] AuthLDAPBindPassword "supersecretpasswordthatnoonewillguess" authzldapauthoritative On require valid-user </Location>
我们的桌面对程序安装有相当严格的控制,所以我并不担心有人(a)安装SVN客户端(b)确定连接到的确切的服务器名称(c)进入回购和肮脏的东西这就是为什么安全性如此之低。 但是,稍微调整一下,你就可以通过强制执行一个AD组来重新使用这个安排(注意在第一个例子中被注释掉了),并且对访问进行更严格的控制。
希望这对你有所帮助。
更新(根据新的信息)
我认为问题在于您没有对全局编录进行身份validation。 将端口号更改为我在示例中所使用的端口号,并确保将其指向处于“企业”级别的域控制器,即不是子域的成员。 因此,而不是site.enterprise.com,在新的端口号指向enterprise.com。 请注意,您可能不需要在设置中为用户名指定域名,所以如果它拒绝authentication,请务必不要尝试(请参阅我发布的示例); 并使用“电子邮件风格”的帐户名称以及“域风格”的布局。
我怀疑:全球目录“扁平化”用户的search空间; 但通过询问子DC上的标准LDAP查询,我认为最初的失败发生是因为最初没有“答案”,直到子域中的DC可能耗尽并获得一个。 在第二次尝试中,答案被caching,并且你成功了。
我不能发表评论,但只是一个问题,为什么不运行只有核心操作系统安装Windows 2008框中的VisualSVN服务器。 我敢打赌,安装平台就像Ubuntu一样小,你可以刚刚复制你的整个VisualSVN目录树到新的框。
显然这并不能帮助你解决目前的问题,只是好奇你是否想过这个select,以及你的理由是什么?