Mysql
Postfix + SASL 使用錯誤的查詢進行身份驗證
我最近按照本指南在 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.
這可能是什麼原因?
在MySQL中使用postfix SASL有兩種常用方法:
- 使用 saslauthd 服務結合 pam_mysql
- 將 sasl auxprop 與 sql 外掛一起使用
不幸的是,第二種方法有嚴重的安全缺陷:您必須以明文格式儲存密碼。因此,在您的情況下,您需要使用 saslauthd 和 pam_mysql。
在上面的配置中,您混合了這兩種方法:在
pwcheck_method
您放置 saslauthd 但您將 sasl 配置為auxprop_plugin
與 sql 一起使用。將pwcheck_method
覆蓋它,因此參數 auxprop_plugin (以及您的所有sql_*
參數)變得無用。這就解釋了為什麼你得到錯誤的查詢。相反,SASL 將執行提供的查詢/etc/pam.d/smtp
。為了滿足您的要求,請where
在 pam 配置中添加其他參數... passwdcolumn=crypt crypt=1 debug where=enabled=1 ... passwdcolumn=crypt crypt=1 debug where=enabled=1
對於您缺少領域 (
%r
) 的問題,請嘗試設置smtpd_sasl_local_domain
為您的預設域。