svnserve+sasl+ldap:saslauthd 未联系?

svnserve+sasl+ldap:saslauthd 未联系?

我正在尝试使用 sasl+ldap 对 subversion 用户进行身份验证。有关此问题的其他问题似乎与早期版本的 subversion 或 sasldb 身份验证有关。

lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 8.1 (jessie)
Release:    8.1
Codename:   jessie

svnserve --version
svnserve, version 1.8.10 (r1615264)
Cyrus SASL authentication is available.

saslauthd -v
saslauthd 2.1.26
authentication mechanisms: sasldb getpwent kerberos5 pam rimap shadow ldap

sasl+LDAP 部分似乎配置正确:

testsaslauthd -u user -p password -r realm
0: OK "Success."

使用错误的凭据进行测试会出现错误:

testsaslauthd -u wronguser -p wrongpassword -r wrongrealm
0: NO "authentication failed"

auth.log 中显示错误:

Sep 10 22:23:53 xxx saslauthd[30948]: Entry not found ((&(objectClass=posixAccount)(uid=wronguser))).
Sep 10 22:23:53 xxx saslauthd[30948]: Authentication failed for wronguser/wrongrealm: User not found (-6)
Sep 10 22:23:53 xxx saslauthd[30948]: do_auth         : auth failure: [user=wronguser] [service=imap] [realm=wrongrealm] [mech=ldap] [reason=Unknown]

因此我假设 SASL 可以正常联系 LDAP 服务器并获取数据。

我使用以下命令配置了颠覆:

/etc/sasl2/svn.conf:
pwcheck_method: saslauthd
mech_list: DIGEST-MD5

使用 strace -e open 检查 svnserve 表明它打开了此文件,而不是 /usr/lib/sasl2 或类似文件。

当我尝试从 svn 客户端连接时,我得到了

Sep 10 22:31:38 xxx svnserve: DIGEST-MD5 common mech free

每次尝试时都在 auth.log 中,但没有来自 saslauthd 的信息或错误。

如果我将用户帐户添加到 sasldb2:

saslpasswd2 user -u realm
Password: password

我可以从 svn 客户端正确连接。因此,看起来 sasl 使用了 sasldb2,尽管 svn 和 saslauthd 的配置都配置了 LDAP。

答案1

解决方案: 我附加了一个调试器并逐步完成身份验证。结果发现我遇到了两个问题:/var/log/saslauthd 上的权限:

drwx--x---  2 root        sasl         140 Sep 27 09:44 saslauthd

意味着“subversion”服务器用户需要成为 sasl 组的一部分。

第二个更复杂:DIGEST-MD5 依靠纯文本密码在服务器端计算哈希值。我的 LDAP 目录存储 SSHA 加密密码,因此服务器永远无法将客户端的 MD5 与本地计算的 MD5 进行比较。我猜目录可以存储 MD5(用户名:领域:密码),但我不确定 sasl 是否支持此功能,以及如果您有多个领域,您将如何管理它。

我不太想存储纯文本密码,所以目前的解决方案是仅使用未加密的身份验证:

# cat /etc/sasl2/svn.conf
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN

虽然不是完美的解决方案,但目前看来还算管用。我想我会强制使用 ssh+svn 进行外部访问,也许我会花些时间研究 svnserve 的 TLS 支持。

(如果有更多的诊断选项和更好的文档,这将会节省很多时间。)

相关内容