Mysql

Postfix + SASL 使用錯誤的查詢進行身份驗證

  • June 2, 2016

我最近按照本指南在 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為您的預設域。

引用自:https://serverfault.com/questions/780329