是否*任何人*通过SASL / GSSAPI对Windows SVNServe进行AD / Kerberos身份验证?

时间:2012-05-02 02:50:40

标签: windows svn sasl gssapi svnserve

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

目标:通过SASS通过GSSAPI将用户身份验证到Subversion存储库,通过Kerberos验证到Windows域。

多个站点中经常发布的帖子表明,在此配置中,用户通常无法使用“无法获取SASL机制列表”。我没见过任何实际运行的实例。有没有人这样跑?

我问这个问题是2011年在Gentoo论坛上发布的一个结果,在这个论坛中,有人正是在这个场景中审查了相关的源代码压缩包,并得出结论,虽然这种配置有时可能有效,但文件它所必需的不再是源头。

GEntoo forum discussion where poster claims svnserve+gssapi+sasl worked at one time, but no longer does.

现在,我并不认为这种说法是准确的,但我确实知道自己陷入了同样的困境,而且我还没有看到任何声称对此类设置声称“胜利”的帖子。如果有,请告知详细信息!

非常感谢提前。

3 个答案:

答案 0 :(得分:3)

在获得这个未解决的问题的“风滚草”徽章以及我自己的大量额外研究之后,我得出结论,在Windows下,Subversion的主题组合实际上在当前代码库下是不可能的。我相信SASL身份验证层中存在的问题就是这里的问题,有些源被删除或者显着改变为“中断”我认为在某一点上工作的内容。

我的解决方案是使用mod_auth_sspi添加Apache,虽然它确实减慢了存储库的速度,但身份验证工作完美。这似乎是身份验证要求的“修复”。

答案 1 :(得分: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)通过testsaslauthd进行测试

testsaslauthd -u myusername -p mypassword

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

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

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

答案 2 :(得分:3)

我刚刚管理(经过近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构建。
  • 客户端是带有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 -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需要按照调用ANSIToUnicode的方式除以2),这也会略有错误。 mslsa_cc.dll上的二进制补丁是:

  • 偏移量0xB46:从FF 15 04 69 00变为D1 EE 0F 1F 40。
  • 偏移量0xB5E:从77变为EB。