6

场景:AD 域中的 Windows 服务器托管 Subversion 存储库,仅使用 SVNSERVE(无 Apache),而不是VisualSVN。

目标:通过 GSSAPI 通过 SASL 向 Subversion 存储库的用户身份验证到通过 Kerberos 的 Windows 域。

多个站点中的频繁发帖表明用户在此配置中经常遇到“无法获取 SASL 机制列表”的死胡同。我还没有看到任何实际运行的实例。有人有这个跑吗?

我之所以问这个问题是因为 2011 年在 Gentoo 论坛上发帖时,恰好有人在这个场景中查看了相关的源 tarball,并得出结论,虽然有时这样的配置可能有效,但它所需的文件不再在源头。

在 GEntoo 论坛讨论中,发帖者声称 svnserve+gssapi+sasl 曾一度有效,但现在不再有效。

现在,我并没有断言这种说法是准确的,但我确实知道我被困在同一点上,而且我还没有看到任何声称“战胜”这种设置的帖子。有的话请告知详情!

提前谢谢了。

4

3 回答 3

4

我刚刚设法(经过近 30 小时的挠头、编译和无源代码调试以获得体面的错误代码)让 svnserve+SASL+GSSAPI 工作!我的设置如下:

  • AD 服务器是 Debian 7.2 上的 Samba 4.1.0(从源代码构建)。
  • Subversion 服务器是 Solaris Express 上的 subversion 1.8.5 (SunOS 5.11 snv_151a i86pc i386 i86pc)。使用本机 (Sun) SASL 从源代码为 x64 构建。
  • 客户端是 Windows 7 x64,带有 TortoiseSVN 1.8.2(x64 二进制版本)和 Heimdal 1.5.1(来自安全端点的 x64 二进制)。
  • 与涉及 Kerberos 的任何事情一样,您需要使正向和反向 DNS 顺利运行、时钟同步等。

具有域凭据的 Windows 框上的步骤:

  • 为 Subversion 服务器创建一个“svnserve”用户帐户(不是计算机帐户)。
  • 运行“ktpass -princ svn/server.domain.local@DOMAIN.LOCAL -mapuser DOMAIN.LOCAL\svnserve -crypto RC4-HMAC-NT -pass password -ptype KRB5_NT_PRINCIPAL -out svnserve.keytab”。您不想为此帐户启用 DES,否则 Windows 7 将拒绝对其进行身份验证。我早些时候打开它(按照食谱),不得不再次关闭它才能让它工作。

Subversion 服务器的步骤:

  • 设置 /etc/krb5/krb5.conf

    [libdefaults]
        default_realm = DOMAIN.LOCAL
    
    [realms]
        DOMAIN.LOCAL = {
            kdc = pdc.domain.local
            admin_server = pdc.domain.local
        }
    
    [domain_realm]
        .domain.local = DOMAIN.LOCAL
        domain.local = DOMAIN.LOCAL
    
    # Other defaults left as-is.
    
  • 设置 repo/conf/svnserve.conf:

    [general]
    anon-access = none
    authz-db = authz
    realm = DOMAIN.LOCAL
    
    [sasl]
    use-sasl = true
    min-encryption = 0
    max-encryption = 256
    
  • 设置 repo/conf/authz:

    [aliases]
    
    [groups]
    
    [/]
    * =
    # Still investigating whether access to the server can be controlled through an AD group.
    # Below is for user@DOMAIN.LOCAL, the realm appears to get lost.
    user = rw
    
  • 设置 /etc/sasl/svn.conf:

    mech_list: GSSAPI
    
  • 将 svnserve.keytab 放入 /etc/krb5/krb5.keytab (sasl 配置中的 keytab 似乎没有做任何事情)。

  • 启动 svnserve。

客户端步骤:

  • 安装 TortoiseSVN 和 Heimdal。
  • 将 C:\ProgramData\Kerberos\krb5.conf 编辑为类似于 Subversion 服务器上的 /etc/krb5/krb5.conf。那里还有一些其他的默认设置,我独自离开了。
  • 结帐,无需密码!

此设置的一个问题是 svnserve 进程必须能够读取 /etc/krb5/krb5.keytab,因此需要稍微回退一些权限。svnserve 正在进入它自己的区域,所以这对我来说不是问题。我在测试东西时也遇到了 mslsa_cc.dll 崩溃,但是一旦我把所有东西都整理好,我就没有看到任何崩溃。

经过一番争论,您可能也可以在 Windows 上使用 svnserve。我在 Windows 客户端上尝试了 MIT Kerberos,但每次启动时都会崩溃,所以我放弃了。你可能会有更好的运气。

更新:找出崩溃问题 - 这是 mslsa_cc.dll 中的一个错误(类似于https://github.com/krb5/krb5/commit/7acb524f5aa00274771dbbfac19d2dd779aad409,这也有点错误,因为 nOutStringLen 需要除以 2 ANSIToUnicode 的调用方式)。mslsa_cc.dll 上的二进制补丁是:

  • 偏移量 0xB46:从 FF 15 04 69 00 更改为 D1 EE 0F 1F 40。
  • 偏移量 0xB5E:从 77 更改为 EB。
于 2014-02-09T09:31:44.303 回答
3

在为这个悬而未决的问题赢得了“风滚草”徽章,并且我自己进行了大量的额外研究之后,我得出的结论是,Windows 下的 Subversion 主题组合实际上在当前代码库下是不可能的。我相信 SASL 身份验证层中的某些问题是这里的问题,删除了一些源或进行了重大更改以“破坏”我相信在某一时刻起作用的东西。

我的解决方案是将 Apache 添加到 mod_auth_sspi 的组合中,虽然它确实会减慢存储库的速度,但身份验证工作得很好。这似乎是身份验证要求的“修复”。

于 2012-05-10T20:20:00.463 回答
3

我已经使用 SASL+LDAP 对 AD 进行了身份验证,但没有使用 SASL+GSSAPI,并且有一个小警告:我必须在 Windows 中使用和运行来自 Cygwin 的 svnserve。

1)在 Linux 中通过 SASL+LDAP/AD 让 svnserve 验证用户非常容易(我知道问题是关于 Windows 中的 svnserve,但请耐心等待)。获得针对 LDAP/AD 的身份验证的重要部分是 saslauthd,并使用 testsaslauthd 测试身份验证。

以 Ubuntu 为例:

1a) /etc/sasl2/svn.conf

pwcheck_method: saslauthd
mech_list: PLAIN

这告诉 subversion / svnserve 使用 saslauthd 代表它进行身份验证。

1b) /etc/saslauthd.conf

ldap_servers: ldap://yourADserver.dept.org
ldap_search_base: DC=dept,DC=org
ldap_bind_dn: cn=bindaccount,dc=dept,dc=org
ldap_bind_pw: passwordOfbindaccount

ldap_deref: never
ldap_restart: yes
ldap_scope: sub
ldap_use_sasl: no
ldap_start_tls: no
ldap_version: 3
ldap_auth_method: bind
ldap_filter: sAMAccountName=%u
ldap_password_attr: userPassword
ldap_timeout: 10
ldap_cache_ttl: 5
ldap_cache_mem: 32768

1c)通过testaslauthd进行测试

testsaslauthd -u myusername -p mypassword

1d) 如果成功,则运行 saslauthd,并启动 svnserve。并使用任何 svn 客户端来测试身份验证。

2) 问题是,Cyrus 的 saslauthd 没有本地端口到 Windows,而且可能永远不会。答案是使用 Cygwin,它有 svnserve、testaslauthd 和 saslauthd。

只需重复上述步骤..但svn.conf的位置可能不同。

于 2013-11-14T06:16:32.437 回答