web-dev-qa-db-ja.com

認証に間違ったクエリを使用するPostfix + SASL

最近、このガイドに従って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.

これの原因は何でしょうか?

2
maddo7

MySQLで使用する2つの一般的な方法があります postfix SASL

  • Pam_mysqlと組み合わせたsaslauthdサービスの使用
  • SQLプラグインでsaslauproprを使用する

残念ながら、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をデフォルトのドメインに設定してみてください。

2
masegaloeh