我尝试设置saslauthd
XMPP 服务器prosody
,但在某个地方卡住了。我使用了以下文档:
- http://blogs.mafia-server.net/nur-bahnhof/2013/12/prosody-authentification-ldapactivedirectory/
- http://prosody.im/doc/cyrus_sasl
- https://wiki.debian.org/InstallingProsody
我的问题是无法连接。 XMPP 客户端在交换身份验证信息时总是会卡在某个地方。
测试使用testsaslauthd
成功:
testsaslauthd -u theuser -p "$pw"
0: OK "Success."
我认为这意味着/etc/saslauthd.conf
在这种情况下该文件是正确的。
使用sasl-sample-server
/进行测试sasl-sample-client
(在不同的终端中调用并复制粘贴S:
和C:
行):
root@xmpp:~# sasl-sample-server -s "xmpp" -m plain
Forcing use of mechanism plain
Sending list of 1 mechanism(s)
S: cGxhaW4=
Waiting for client mechanism...
C: U......................=
got 'PLAIN'
sasl-sample-server: SASL Other: Password verification failed
sasl-sample-server: Starting SASL negotiation: user not found (user not found)
<terminates>
root@xmpp:~# sasl-sample-client -s xmpp -a theuser
service=xmpp
Waiting for mechanism list from server...
S: cGxhaW4=
recieved 5 byte message
Choosing best mechanism from: plain
returning OK: theuser
Password:
Using mechanism PLAIN
Preparing initial.
Sending initial response...
C: U......................=
Negotiation complete
Username: theuser
SSF: 0
Waiting for encoded message...
我不明白为什么testsaslauthd
成功而其他工具组合找不到用户。
运行后/usr/sbin/saslauthd -d
我在/var/log/auth.log
.也许这就是问题所在。但无论我尝试什么,我都找不到提供无效参数的内容:
Dec 2 15:42:14 xmpp sasl-sample-server: auxpropfunc error invalid parameter supplied
Dec 2 15:42:14 xmpp sasl-sample-server: _sasl_plugin_load failed on sasl_auxprop_plug_init for plugin: ldapdb
Dec 2 15:42:14 xmpp sasl-sample-server: ldapdb_canonuser_plug_init() failed in sasl_canonuser_add_plugin(): invalid parameter supplied
Dec 2 15:42:14 xmpp sasl-sample-server: _sasl_plugin_load failed on sasl_canonuser_init for plugin: ldapdb
Dec 2 15:42:20 xmpp sasl-sample-client: ldapdb_canonuser_plug_init() failed in sasl_canonuser_add_plugin(): invalid parameter supplied
Dec 2 15:42:20 xmpp sasl-sample-client: _sasl_plugin_load failed on sasl_canonuser_init for plugin: ldapdb
Dec 2 15:42:34 xmpp sasl-sample-server: DIGEST-MD5 common mech free
另外,我发现在不带选项的情况下sasl-sample-server
使用sasl-sample-client
多种方法的列表-m
,但在文件中/usr/lib/sasl2/xmpp.conf
我明确选择了该PLAIN
方法:
pwcheck_method: saslauthd
mech_list: PLAIN
可能我得到了错误的路径,所以我也将文件复制到/etc/sasl/xmpp.conf
并且/etc/sasl2/xmpp.conf
只是为了以防万一。不幸的是,我找不到任何明确说明 Debian 8 路径的文档。
此外,testslauthd 似乎并不关心该服务:
root@xmpp:~# testsaslauthd -s xmpp -u theuser -p "$pw"
0: OK "Success."
root@xmpp:~# testsaslauthd -s nonexistingservice -u theuser -p "$pw"
0: OK "Success."
知道我还能做什么来找到原因吗?
更新:
显然,我认为访问不应该在 ldap 模式下发生的sasl-sample-server
文件。/etc/sasldb2
有没有可能这个工具不关心配置并且不支持ldap? strace 的输出:
stat("/etc/sasldb2", {st_mode=S_IFREG|0640, st_size=12288, ...}) = 0
open("/etc/sasldb2", O_RDONLY) = 3
fcntl(3, F_GETFD) = 0
fcntl(3, F_SETFD, FD_CLOEXEC) = 0
read(3, "\0\0\0\0\1\0\0\0\0\0\0\0a\25\6\0\t\0\0\0\0\20\0\0\0\10\0\0\0\0\0\0"..., 512) = 512
close(3) = 0
答案1
我找到了解决方案:
首先:我走错了路,因为sasl-sample-server
似乎不以任何方式支持 ldap。它似乎不与人交谈saslauthd
,而是有自己的实现。因此,它不能关心-a ldap
的选项/usr/sbin/saslauthd
。
所以我开始直接用prosody进行测试。将日志记录设置为调试后,我发现配置文件的所有路径xmpp.conf
都是错误的。但不是路径 - 而是服务名称发生了变化。我发现以下提示http://prosody.im/doc/cyrus_sasl:
设置 Prosody 以针对 LDAP 进行身份验证(博客文章)
- 这篇文章使用 xmpp.conf,但名称现在是 prosody.conf(请参阅上面的 cyrus_application_name)
所以最终的路径是/usr/lib/sasl2/prosody.conf
(仍然是Debian 8)并且其内容仍然是相同的:
pwcheck_method: saslauthd
mech_list: PLAIN
经过这一更改,我终于能够使用 xmpp 登录