是否有人通过SASL/GSSAPI向AD/Kerberos提供Windows SVNServe身份验证



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

目标: 通过 GSSAPI 通过 SASL 对 Subversion 存储库的用户进行身份验证,并通过 Kerberos 对 Windows 域进行身份验证。

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

我问这个问题是因为2011年在Gentoo论坛上的一篇文章,其中有人正是在这种情况下审查了相关的源代码压缩包,并得出结论,虽然这样的配置可能曾经有效,但它所需的文件不再在源代码中。

GEntoo 论坛讨论,其中海报声称 svnserve+gssapi+sasl 曾经工作过,但现在不再有效。

现在,我不断言这种说法是准确的,但我知道我被困在完全相同的点上,而且我还没有看到任何声称"胜利"这样的设置的帖子。如果您有,请告知详细信息!

提前非常感谢。

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

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

带有域信誉的 Windows 框上的步骤:

  • 为 Subversion 服务器创建一个 "svnserve" 用户帐户(不是计算机帐户(。
  • 运行 "ktpass -princ svn/server.domain.local@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 配置中的键表似乎没有任何作用(。

  • 启动 svnserve。

客户端的步骤:

  • 安装 TortoiseSVN 和 Heimdal。
  • 在 Subversion 服务器上将 C:\ProgramData\Kerberos\krb5.conf 编辑为类似/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。
在为

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

我的解决方案是将 Apache 添加到与mod_auth_sspi的组合中,虽然它确实会降低存储库的速度,但身份验证效果很好。这似乎是身份验证要求的"修复"。

我已经

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

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

以 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( 通过测试进行测试

testsaslauthd -u myusername -p mypassword

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

2(问题是,Cyrus的saslauthd没有本地移植到Windows,而且可能永远不会。答案是使用Cygwin,它有svnserve,testsaslauthd和saslauthd。

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

最新更新