*任何人*是否有Windows SVNServe通过SASL/GSSAPI对AD/Kerberos进行身份验证?
场景:AD域中的Windows服务器承载Subversion存储库,该存储库仅使用SVN服务器(不使用Apache),而不使用VisualSVN 目标:通过GSSAPI通过SASL向Subversion存储库验证用户,并通过Kerberos向Windows域验证用户 在多个站点中频繁发帖表明,用户在这种配置中经常处于“无法获取SASL机制列表”的死胡同。我还没有看到任何实际运行这种机制的实例。有人在跑这个吗 我问这个问题是因为2011年在Gentoo论坛上发布了一篇帖子,其中有人在这个场景中查看了相关的源tarball,并得出结论,虽然这种配置曾经可能有效,但源代码中不再有它所需的文件 现在,我并没有断言这种说法是准确的,但我知道我正处在同一个点上,我还没有看到任何帖子声称对这种设置“胜利”。如果有,请告知详情 非常感谢。在为这个未回答的问题赢得了“风滚草”徽章之后,我自己进行了大量的额外研究,我得出结论,在Windows下,Subversion的主题组合实际上在当前的代码库下是不可能的。我相信SASL身份验证层中的某些东西是这里的问题,一些源被删除或显著更改为“中断”,我相信,在某一点上是有效的*任何人*是否有Windows SVNServe通过SASL/GSSAPI对AD/Kerberos进行身份验证?,windows,svn,sasl,gssapi,svnserve,Windows,Svn,Sasl,Gssapi,Svnserve,场景:AD域中的Windows服务器承载Subversion存储库,该存储库仅使用SVN服务器(不使用Apache),而不使用VisualSVN 目标:通过GSSAPI通过SASL向Subversion存储库验证用户,并通过Kerberos向Windows域验证用户 在多个站点中频繁发帖表明,用户在这种配置中经常处于“无法获取SASL机制列表”的死胡同。我还没有看到任何实际运行这种机制的实例。有人在跑这个吗 我问这个问题是因为2011年在Gentoo论坛上发布了一篇帖子,其中有人在这个场景中查看
我的解决方案是将Apache与mod_auth_sspi混合使用,虽然它确实降低了存储库的速度,但身份验证工作得非常好。这似乎是对身份验证要求的“修复”。我已经使用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并启动SVN服务。并使用任何svn客户端来测试身份验证
2) 问题是,Cyrus的saslauthd到Windows没有本机端口,而且可能永远也不会有。答案是使用Cygwin,它有svnserve、testsaslauthd和saslauthd
只需重复上述步骤。。但是svn.conf的位置可能会有所不同。我刚刚设法(经过近30个小时的挠头、编译和无源代码调试以获得正确的错误代码)让svnserve+SASL+GSSAPI工作!我的设置如下:
- AD服务器是Debian 7.2(从源代码构建)上的Samba 4.1.0
- Subversion服务器是Solaris Express(SunOS 5.11 snv_151a i86pc i386 i86pc)上的Subversion 1.8.5。使用本机(Sun)SASL从源代码为x64构建
- 客户端是Windows 7 x64,具有OrtoiseSVN 1.8.2(x64二进制版本)和Heimdal 1.5.1(来自安全端点的x64二进制版本)
- 与涉及Kerberos的任何内容一样,您需要使正向和反向DNS顺利工作,时钟同步,等等
- 为Subversion服务器创建“svnserve”用户帐户(不是计算机帐户)
- 运行“ktpass-princsvn/server.domain”。local@DOMAIN.LOCAL-mapuser DOMAIN.LOCAL\svnserve-crypto RC4-HMAC-NT-pass password-ptype KRB5\u NT\u PRINCIPAL-out svnserve.keytab”。您不想为此帐户启用DES,否则Windows 7将拒绝对其进行身份验证。我早些时候(按照食谱)打开了它,为了让它工作,我不得不再次关闭它
- 设置/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
- setup/etc/sasl/svn.conf:
mech_list: GSSAPI
- 将svnserve.keytab放到/etc/krb5/krb5.keytab中(sasl配置中的keytab似乎没有任何作用)
- 启动SVN服务
- 安装Ortoisesvn和Heimdal
- 在Subversion服务器上编辑C:\ProgramData\Kerberos\krb5.conf,使其类似于/etc/krb5/krb5.conf。还有一些其他的默认设置,我没有考虑
- 执行签出,无需密码李>
此设置的一个问题是svnserve进程必须能够读取/etc/krb5/krb5.keytab,因此需要对该进程的权限进行一点回溯。SVN服务将进入它自己的区域,所以这对我来说不是问题。我在测试时也遇到过mslsa_cc.dll崩溃的情况,但在我解决了所有问题后,我还没有看到任何崩溃 经过一些争论,您可能也能在Windows上的SVN服务上实现这一点。我在Windows客户端上尝试了MIT Kerberos,但每次启动时它都会崩溃,所以我放弃了它。你可能会有更好的运气 更新:解决了崩溃问题-这是mslsa_cc.dll中的一个bug(类似于,也有点错误,因为nOutStringLen需要除以2才能调用ANSIToUnicode)。mslsa_cc.dll上的二进制修补程序是:
- 偏移量0xB46:从FF 15 04 69 00更改为D1 EE 0F 1F 40
- 偏移量0xB5E:从77更改为EB