场景:AD域中的Windows服务器仅使用SVNSERVE托管Subversion存储库(无Apache),不 VisualSVN。
目标:通过SASS通过GSSAPI将用户身份验证到Subversion存储库,通过Kerberos验证到Windows域。
多个站点中经常发布的帖子表明,在此配置中,用户通常无法使用“无法获取SASL机制列表”。我没见过任何实际运行的实例。有没有人这样跑?
我问这个问题是2011年在Gentoo论坛上发布的一个结果,在这个论坛中,有人正是在这个场景中审查了相关的源代码压缩包,并得出结论,虽然这种配置有时可能有效,但文件它所必需的不再是源头。
现在,我并不认为这种说法是准确的,但我确实知道自己陷入了同样的困境,而且我还没有看到任何声称对此类设置声称“胜利”的帖子。如果有,请告知详细信息!
非常感谢提前。
答案 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正常工作!我的设置如下:
具有域信誉的Windows框中的步骤:
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进程必须能够读取/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上的二进制补丁是: