O postfix omite o domínio (@domain) ao verificar a autenticação do smtpd pam + mysql

1

Eu estou tentando configurar o Postfix para que os usuários possam enviar e-mail através do SMTP com um nome de usuário e senha. E estou tentando armazenar credenciais em um banco de dados MySQL. Tomei o caminho de saslauthd e pam e estou preso no meio do caminho.

Ativando o recurso pam debug, vejo que quando tento enviar um e-mail usando o Thunderbird, a consulta executada para recuperar a senha é:

pam_mysql - SELECT password FROM mailbox WHERE username = 'mehran'

É no caso em que o nome de usuário contém o valor de [email protected] . Mas quando eu tento:

# testsaslauthd -u [email protected] -p 123 -s smtp
0: OK "Success."

E o log diz:

pam_mysql - SELECT password FROM mailbox WHERE username = '[email protected]'

Mostrando que o Postfix está omitindo o @domínio do nome de usuário antes de passá-lo para saslauthd (ou pelo menos eu acredito que sim). Eu pesquisei a configuração do Postfix para cima e para baixo, mas não vejo o que afeta isso!?

    
por Mehran 25.07.2015 / 20:48

2 respostas

2

Eu encontrei o problema, então aqui está, caso isso ajude alguém:

Há um arquivo de configuração para saslauthd , o meu está localizado em /etc/sysconfig/saslauthd :

# Directory in which to place saslauthd's listening socket, pid file, and so
# on.  This directory must already exist.
SOCKETDIR=/var/run/saslauthd

# Mechanism to use when checking passwords.  Run "saslauthd -v" to get a list
# of which mechanism your installation was compiled with the ablity to use.
MECH=pam

# Options sent to the saslauthd. If the MECH is other than "pam" uncomment the next line.
# DAEMONOPTS=--user saslauth
# OPTIONS="-c -r -m /var/spool/postfix/var/run/saslauthd"
OPTIONS="-c -m /var/run/saslauthd"

# Additional flags to pass to saslauthd on the command line.  See saslauthd(8)
# for the list of accepted flags.
FLAGS=

A variável OPTIONS deve conter as opções passadas para saslauthd . Está faltando -r , que faz exatamente o que eu estava procurando. De acordo com sua documentação :

-r Combine the realm with the login (with an ’@’ sign in between). e.g. login: "foo" realm: "bar" will get passed as login: "foo@bar". Note that the realm will still be passed, which may lead to unexpected behavior.

Mas meu problema não foi resolvido apenas por essa mudança! Descobriu-se que devido a algum bug no script /etc/init.d/saslauthd , mesmo que o arquivo de configuração mencionado acima esteja carregado, mas não é aplicado! O $OPTIONS nunca foi usado !!!

Esta é a seção inicial original do script /etc/init.d/saslauthd :

start() {
    [ -x $path ] || exit 5
        echo -n $"Starting $prog: "
        daemon $DAEMONOPTS $path -m $SOCKETDIR -a $MECH $FLAGS
        RETVAL=$?
        echo
    [ $RETVAL -eq 0 ] && touch $lockfile
        return $RETVAL
}

E foi assim que eu o alterei:

start() {
    [ -x $path ] || exit 5
        echo -n $"Starting $prog: "
        daemon $DAEMONOPTS $path $OPTIONS -a $MECH $FLAGS
        RETVAL=$?
        echo
    [ $RETVAL -eq 0 ] && touch $lockfile
        return $RETVAL
}

Tudo pronto! Agora a consulta contém o endereço de e-mail completo para verificar a senha.

    
por 26.07.2015 / 09:27
1

Sua consulta contém o parâmetro errado / incompleto para a consulta.

Esta consulta anexará o domínio à parte local do login:

SELECT password FROM mailbox WHERE username = '%u@%r'

Corrija a consulta na configuração do SASL para o postfix, por exemplo, /etc/postfix/sasl/smtpd.conf

    
por 25.07.2015 / 21:41