Eu tentei configurar saslauthd
para o servidor XMPP prosody
, mas fiquei preso em algum lugar. Eu usei a seguinte documentação:
Meu problema é que não consigo me conectar. O cliente XMPP sempre fica preso em algum lugar enquanto troca informações de autenticação.
Teste usando testsaslauthd
foi bem-sucedido:
testsaslauthd -u theuser -p "$pw"
0: OK "Success."
Suponho que isso significa que o arquivo /etc/saslauthd.conf
está correto neste caso.
Teste usando sasl-sample-server
/ sasl-sample-client
(chamado em diferentes terminais e copiando e colando as linhas S:
e 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...
Eu não entendo porque testsaslauthd
é bem-sucedido enquanto a outra combinação de ferramentas não consegue encontrar o usuário.
Depois de executar /usr/sbin/saslauthd -d
, encontrei o seguinte bloco em /var/log/auth.log
. Talvez seja esse o problema. Mas o que eu tentei, não consegui descobrir o que está fornecendo o parâmetro inválido:
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
Além disso, descobri que sasl-sample-server
e sasl-sample-client
usam uma lista de vários métodos ao usar a opção -m
, mas no arquivo /usr/lib/sasl2/xmpp.conf
I seleciona explicitamente o método PLAIN
:
pwcheck_method: saslauthd
mech_list: PLAIN
Provavelmente recebi o caminho errado, então copiei o arquivo também para /etc/sasl/xmpp.conf
e /etc/sasl2/xmpp.conf
apenas para o caso. Infelizmente, não consigo encontrar nenhuma documentação que indique os caminhos explicitamente para o Debian 8.
Também testsaslauthd não parece se importar com o serviço:
root@xmpp:~# testsaslauthd -s xmpp -u theuser -p "$pw"
0: OK "Success."
root@xmpp:~# testsaslauthd -s nonexistingservice -u theuser -p "$pw"
0: OK "Success."
Alguma ideia do que mais eu posso fazer para encontrar o motivo?
Atualização:
Obviamente, sasl-sample-server
acessa o arquivo /etc/sasldb2
, o que não deveria acontecer no modo ldap, eu acho. É possível que esta ferramenta não se importe com configuração e que não suporte ldap? Saída de 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, "testsaslauthd -u theuser -p "$pw"
0: OK "Success."
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...
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
pwcheck_method: saslauthd
mech_list: PLAIN
root@xmpp:~# testsaslauthd -s xmpp -u theuser -p "$pw"
0: OK "Success."
root@xmpp:~# testsaslauthd -s nonexistingservice -u theuser -p "$pw"
0: OK "Success."
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, "%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%a%pre%\t%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%"..., 512) = 512
close(3) = 0
%pre%%pre%%pre%%pre%%pre%a%pre%\t%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%"..., 512) = 512
close(3) = 0