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

jpi*_*son 12 windows active-directory svn ldap svnserve

我在 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 上的这篇文章即使 saslgssapi.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 的开发即将结束,任何人都可以补充关于 Subversion 1.7 是否会改进使用 Active Directory 进行身份验证的 SVNServe 的情况?

gbj*_*anb 5

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

我知道目前正在通过 svnserve 提供 sasl 支持。


pQd*_*pQd 1

我正在使用 apache 和在 debian linux 上运行的 svn,针对活动目录服务器进行授权。客户端通过 http 协议连接到存储库。如果您可以接受此设置 - 继续阅读。

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

安装所需软件:

apt-get install libapache2-svn subversion apache2
Run Code Online (Sandbox Code Playgroud)

在 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>
Run Code Online (Sandbox Code Playgroud)

确保 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
Run Code Online (Sandbox Code Playgroud)

确保 apache 可以修改 svn 存储库中的文件:

chown www-data:www-data -R /full/path/to/your/current/svn/directory
Run Code Online (Sandbox Code Playgroud)

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

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

[/]
* = rw

[/priv]
* =
@ops = rw
Run Code Online (Sandbox Code Playgroud)

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

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