Postfix + SASL使用错误的查询进行身份validation

我最近在aws ec2实例上按照这个指南设置了postfix + dovecot: http : //flurdy.com/docs/postfix/#config-secure-auth

目前我坚持SASL。

SQL查询似乎没有被configuration。 这里是configuration:

/etc/postfix/sasl/smtpd.conf 

节目

 pwcheck_method: saslauthd mech_list: plain login log_level: 7 allow_plaintext: true auxprop_plugin: sql sql_engine: mysql sql_hostnames: 127.0.0.1 sql_user: mail sql_passwd: passwd sql_database: maildb sql_select: select crypt from users where id='%u@%r' and enabled = 1 

 /etc/sasl2/smtpd.conf 

节目

 pwcheck_method: saslauthd mech_list: plain login log_level: 7 allow_plaintext: true auxprop_plugin: sql sql_engine: mysql sql_hostnames: 127.0.0.1 sql_user: mail sql_passwd: password sql_database: maildb sql_select: select crypt from users where id='%u@%r' and enabled = 1 

 /etc/pam.d/smtp #%PAM-1.0 auth required pam_mysql.so user=mail passwd=password host=127.0.0.1 db=maildb table=users usercolumn=id passwdcolumn=crypt crypt=1 debug account sufficient pam_mysql.so user=mail passwd=password host=127.0.0.1 db=maildb table=users usercolumn=id passwdcolumn=crypt crypt=1 debug 

现在,configuration文件定义了select crypt from users where id='%u@%r' and enabled = 1作为密码的select查询。

当auth失败,我检查/var/log/secure我发现一个错误的select查询被使用:

 Jun 1 15:50:13 ip-172-31-23-97 saslauthd[19892]: pam_mysql - SELECT crypt FROM users WHERE id = 'admin' Jun 1 15:50:13 ip-172-31-23-97 saslauthd[19892]: pam_mysql - SELECT returned no result. Jun 1 15:50:13 ip-172-31-23-97 saslauthd[19892]: pam_mysql - pam_mysql_check_passwd() returning 1. Jun 1 15:50:13 ip-172-31-23-97 saslauthd[19892]: pam_mysql - pam_mysql_sql_log() called. Jun 1 15:50:13 ip-172-31-23-97 saslauthd[19892]: pam_mysql - pam_mysql_sql_log() returning 0. Jun 1 15:50:13 ip-172-31-23-97 saslauthd[19892]: pam_mysql - pam_sm_authenticate() returning 10. Jun 1 15:50:13 ip-172-31-23-97 saslauthd[19892]: pam_mysql - pam_mysql_release_ctx() called. Jun 1 15:50:13 ip-172-31-23-97 saslauthd[19892]: pam_mysql - pam_mysql_destroy_ctx() called. Jun 1 15:50:13 ip-172-31-23-97 saslauthd[19892]: pam_mysql - pam_mysql_close_db() called. 

这可能是什么原因?

有两种常见的方法来使用MySQL的Postfix SASL :

  • 将saslauthd服务与pam_mysql结合使用
  • 用sql插件使用sasl auxprop

不幸的是,第二种方法存在严重的安全缺陷 :您必须以明文格式存储密码。 所以,你的情况你需要使用saslauthd和pam_mysql。

在上面的configuration中,你混合了这两个方法:在pwcheck_method你把saslauthd,但你configurationsasl使用auxprop_plugin与SQL。 pwcheck_method会覆盖这个,所以参数auxprop_plugin(和所有的sql_*参数)变得没用。 这就是为什么你得到错误的查询。 相反,SASL将执行提供/etc/pam.d/smtp查询。 为了满足您的要求,请在pamconfiguration中添加其他参数

 ... passwdcolumn=crypt crypt=1 debug where=enabled=1 ... passwdcolumn=crypt crypt=1 debug where=enabled=1 

而对于你缺less的领域( %r )的问题,尝试将smtpd_sasl_local_domain设置为默认域。