如何将一组现有的Subversion存储库切换为使用ActiveDirectory?(svnserve /视窗)


12

我在Windows Server 2003盒子上有一组私有Subversion存储库,开发人员可以通过svn://协议通过SVNServe访问。目前,我们一直在使用每个存储库的authzpasswd文件来控制访问,但是随着存储库和开发人员的数量不断增加,我正在考虑使用ActiveDirectory中的凭据。我们在一家全Microsoft商店中运行,并且在所有Web服务器上使用IIS而不是Apache,因此,如果可能的话,我希望继续使用SVNServe。

除了可能之外,我还担心如何迁移我们的存储库,以便现有用户的历史记录映射到正确的ActiveDirectory帐户。还请记住,我不是网络管理员,并且对ActiveDirectory并不陌生,因此如有必要,我可能必须经过其他人员才能在ActiveDirectory中进行更改。

我有什么选择?

更新1:从SVN文档中可以看出,通过使用SASL,我应该能够使SVNServe使用ActiveDirectory进行身份验证。澄清一下,我正在寻找的答案是如何配置SVNServe(如果可能)以使用ActiveDirectory进行身份验证,然后如何修改现有存储库以将现有svn用户重新映射到其ActiveDirectory域登录帐户。

更新2:似乎SVNServe中的SASL支持基于插件模型起作用,并且该文档仅作为示例显示。从Cyrus SASL库看,它似乎支持多种身份验证“机制”,但是我不确定用于ActiveDirectory支持的是哪一种,也无法找到有关此类问题的任何文档。

更新3:好了,好了,它看起来像,以便与ActiveDirectory中我沟通在找使用saslauthd而不是sasldb的auxprop_plugin财产。不幸的是,根据某些帖子(可能是过时和不准确的),saslauthd似乎无法在Windows上构建,并且这种努力被视为正在进行中

更新4:我在此主题上找到的最新文章听起来似乎可以通过MIT Kerberos库获得适当的二进制文件(),但这听起来像是这篇文章的作者在Nabble.com上仍存在问题,无法正常工作。

更新5:从TortoiseSVN讨论以及svn.haxx.se上的帖子看来即使sas​​lgssapi.dll或任何必需的二进制文件在Windows服务器上可用并已配置,客户端也将需要相同的自定义才能使用这些存储库。如果是这样,则只有在对这些客户端进行了更改(例如TortoiseSVN和客户端二进制文件的CollabNet构建以支持此类身份验证方案)的情况下,我们才能从Windows客户端获得ActiveDirectory支持。尽管这是这些帖子的建议,但这与我最初从其他阅读中得出的假设是矛盾的,因为与SASL兼容应该不需要在客户端上进行任何更改,而只需设置服务器以处理身份验证机制即可。在仔细阅读Subversion中有关Cyrus SASL的文档后第5节指出:“只要支持的至少一种机制也受客户端支持,具有Cyrus SASL支持的1.5+客户端将能够针对启用了SASL的1.5+服务器进行身份验证。” 因此,显然必须在客户端和服务器内提供GSSAPI支持(我知道Active Directory必需)。

我不得不说,我对Subversion如何处理身份验证的内部知识的了解比我想了解的要多。不幸的是,我只是在寻找有关在Windows服务器上使用SVNServe并从Windows客户端访问它时是否可以使用Active Directory身份验证支持的答案。根据官方文档,这似乎是有可能的,但是您可以看到,即使有可能,配置也不是一件容易的事。

更新:6:由于Subversion 1.7的开发工作即将结束,因此有人可以在使SVNServe使用Active Directory进行身份验证的情况下添加有关Subversion 1.7是否会有所改善的信息吗?


然后看这里.. stackoverflow.com/questions/333146,但是在我看来,这确实是一个hack。您可以通过apache并排IIS [通过在不同的端口或不同的ip上运行第二个IIS]
pQd

2
为此问题+1。这是我一直希望找到答案并失败的东西。大多数人似乎认为apache是​​可以接受的(通常以visualsvn形式)。但是,如果您已经有很多svn://引用,那将是一个痛苦。对我来说,运行svnserve进行存储库访问比使用Apache感觉更好。
Jim T

1
+1也是很久以前就想做的事情,我真的很讨厌在不需要的时候仅在原则上在Windows框上运行apache。 ^
Oskar Duveborn

@Oskar-我认为如果有人为IIS7创建WAS模块并在IIS内托管基于apache的http协议和svnserve协议,那将是很棒的。如果我有更多时间可以使用,那么就可以在.NET中作为开放源代码项目来创建类似的东西。
jpierson 2011年

Answers:


5

如前所述,VisualSVN Server是您想要的工具。它是Windows的多合一软件包,恰好在其中使用了Apache-除非您不停地查看它安装的dll,否则您永远不会知道,对于每个人来说,它的Windows服务都具有mmc管理单元管理它。如果您已经占用了端口80,则可以更改其运行的端口。

我了解目前正在通过svnserve提供sasl支持。


如果有一种方法可以使Apache服务通过IIS进行工作,或者让它们都使用端口80,那么那就太好了。不幸的是,对于那些想要坚持使用svnserve或使用IIS的人来说,除了等待着看看关于svnserve的sasl支持工作是否能够实现,似乎没有太多选择。如果不是很麻烦,您可以链接到一些我们可以获取有关此功能的最新信息的地方吗?SVN项目虽然最近比较好,但似乎并未通过错误跟踪器向社区很好地传达他们的努力和进展。
jpierson 2011年

我很好奇您是否可能对正在为svnserve进行的sasl支持取得任何成果。我们可以期望看到Subversion 1.7的任何改进吗?
jpierson

1

我正在将Apache与在Debian Linux上运行的svn一起使用,以对活动目录服务器进行授权。客户端通过http协议连接到存储库。如果您可以接受此设置,请继续阅读。

这也应该在Windows下的Apache下工作,但我从未尝试过。以下是特定于debian的内容,但在Windows /其他发行版中应类似地工作;迁移时不会丢失svn历史记录...

安装所需的软件:

apt-get install libapache2-svn subversion apache2

在apache的虚拟主机的配置中[指向它们的符号链接可以在/ etc / apache2 / sites-enabled中找到]。在VirtualHost内添加:

<Location /svn>
        DAV svn
        #change this to actual path
        SVNPath /full/path/to/your/current/svn/directory

        AuthType Basic
        AuthName "SVN Server"
        AuthBasicProvider ldap
        AuthzLDAPAuthoritative Off

        # provide here credentials for existing domain user. 
        # in my case domain is called domainName and user - user
        AuthLDAPBindDN "domainName\user"
        AuthLDAPBindPassword usersPassword
        # put here ip of the domain controler and full path to OU containing accounts
        AuthLDAPURL ldap://10.11.22.33:389/ou=Users,dc=domainName,dc=companyName,dc=whatever?sAMAccountName?sub?(objectClass=*)
        Require valid-user
        SVNAutoversioning on

        AuthzSVNAccessFile /etc/apache2/svn_authz
</Location>

确保apache加载ldap模块:

cd /etc/apache2/mods-enabled
ln -s ../mods-available/authnz_ldap.load
ln -s ../mods-available/ldap.load
/etc/init.d/apache2 reload

确保apache可以修改svn信息库中的文件:

chown www-data:www-data -R /full/path/to/your/current/svn/directory

您的svn_authz应该包含告诉谁可以访问什么的规则。就我而言:

[groups]
ops=jack.brown,john.smith

[/]
* = rw

[/priv]
* =
@ops = rw

您可以在此处找到有关该文件语法的更多信息。

如果您走到了这么远-您的用户可以使用任何svn客户端[tortoise / cmdline / visual svn] 从http://server.address/svn/签出,他们将看到所有历史记录并继续对其进行读取/写入。


1
如果没有其他选择,使用Apache也许可以接受,但到目前为止,我们已经在内部论坛和bug跟踪软件中引用了多个svn:// URL,并且愿意继续使用这些URL。另外,我们已经在防火墙中为SVNServe打开了相关的端口。如果有一种方法可以在Windows Server 2003机器上与IIS一起运行Appache,那么这可能是一种可行的尝试方法,尽管现在我对如何使SVNServe使用ActiveDirectory进行身份验证更加感兴趣。
jpierson

1

您可以使用saslNTML而不是GSSAPI。saslNTML dll默认情况下与TSVN一起安装,我认为它也包含在来自collab.net的svn客户端中。

您必须在sasl配置文件中设置两个选项

ntml_server

和可选

ntml_v2

当然,您必须在配置文件中设置机械列表以包括NTML。

当我实现整个过程时,我只对TSVN尝试过一次。但是我让别人为我设置了一个测试服务器,所以我不知道确切的配置选项是什么。


太好了,我会尽快尝试一下,看看能得到什么。
jpierson

我已经尝试了很多方法,但是在尝试使用TortoiseSVN签出时总是出现以下错误。错误:来自服务器的身份验证错误:SASL(-13):找不到用户:找不到错误:回调:2
jpierson

“找不到用户”或者表示计算机不属于您要向其进行身份验证的域,或者该用户在该域中不认识。也许您可以尝试捕获网络流量并尝试找出正在发生的事情?
Stefan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.