最近、このガイドに従ってawsec2インスタンスに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で使用する2つの一般的な方法があります postfix SASL :
残念ながら、2番目の方法には 重大なセキュリティ上の欠点 :パスワードをplaintext形式で保存する必要があります。したがって、あなたの場合、saslauthdとpam_mysqlを使用する必要があります。
上記の構成では、次の2つのメソッドを混合しました。pwcheck_method
にsaslauthdを配置しますが、sqlでauxprop_plugin
を使用するようにsaslを構成します。 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
をデフォルトのドメインに設定してみてください。