我最近按照以下指南在 aws ec2 实例上设置了 postfix + dovecot:http://flurdy.com/docs/postfix/#config-secure-auth
目前我被 SASL 困住了。
SQL 查询似乎与已配置的查询不同。以下是配置:
/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
现在配置文件定义select crypt from users where id='%u@%r' and enabled = 1
为密码的选择查询。
当身份验证失败时,我检查了一下/var/log/secure
,发现使用了错误的选择查询:
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.
这可能是什么原因造成的?
答案1
有两种常用方法可以使用后缀 SASL使用 MySQL:
- 使用 saslauthd 服务与 pam_mysql 结合
- 将 sasl auxprop 与 sql 插件结合使用
不幸的是,第二种方法严重的安全缺陷:您必须将密码存储在纯文本格式。因此,对于您的情况,您需要使用 saslauthd 和 pam_mysql。
在上述配置中,您混合了这两种方法:pwcheck_method
您放入 saslauthd,但将 sasl 配置为auxprop_plugin
与 sql 一起使用。pwcheck_method
将覆盖此配置,因此参数 auxprop_plugin(以及您的所有sql_*
参数)变得无用。这解释了为什么您会得到错误的查询。相反,SASL 将执行提供的查询。为了满足您的要求,请在 pam 配置中/etc/pam.d/smtp
放入额外的参数where
... passwdcolumn=crypt crypt=1 debug where=enabled=1
... passwdcolumn=crypt crypt=1 debug where=enabled=1
对于缺少领域(%r
)的问题,请尝试设置smtpd_sasl_local_domain
为您的默认域。