testsaslauthd é bem-sucedido, mas sasl-sample-server / client fail

1

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
    
por Daniel Alder 02.12.2015 / 16:07

1 resposta

0

Eu encontrei a solução:

Primeiro de tudo: Eu estava no rastreamento errado porque sasl-sample-server parece não suportar o ldap de forma alguma. Parece que ele não fala com saslauthd , mas tem sua própria implementação. Por isso, não pode se preocupar com a opção -a ldap de /usr/sbin/saslauthd .

Então comecei a testar diretamente com prosódia. Depois de definir o log para depurar, descobri que todos os caminhos para o arquivo de configuração xmpp.conf estavam errados. Mas não o caminho - é o nome do serviço que mudou. Eu encontrei a seguinte dica no link :

Setting up Prosody to authenticate against LDAP (blog post)

  • This post uses xmpp.conf, but the name is now prosody.conf (see cyrus_application_name above)

Então o caminho final foi /usr/lib/sasl2/prosody.conf (ainda Debian 8) e seu conteúdo ainda é o mesmo:

pwcheck_method: saslauthd
mech_list: PLAIN

Com essa mudança eu finalmente consegui logar usando o xmpp

    
por 04.12.2015 / 10:08