ユーザーがユーザー名とパスワードを持つSMTP経由でメールを送信できるようにPostfixを設定しようとしています。そして、MySQLデータベース内に資格情報を保存しようとしています。 saslauthd
とpam
のパスをたどりましたが、途中で立ち往生しています。
Pamデバッグ機能を有効にすると、Thunderbirdを使用して電子メールを送信しようとすると、パスワードを取得するために実行されるクエリは次のようになります。
pam_mysql - SELECT password FROM mailbox WHERE username = 'mehran'
ユーザー名が[email protected]
の値を保持している場合です。しかし、私が試してみると:
# testsaslauthd -u [email protected] -p 123 -s smtp
0: OK "Success."
そして、ログには次のように表示されます。
pam_mysql - SELECT password FROM mailbox WHERE username = '[email protected]'
saslauthd
に渡す前にユーザー名から@domainを省略しているのはPostfixであることを示しています(または少なくとも私はそう信じています)。 Postfixの設定を上下に検索しましたが、これに何が影響するのかわかりません!?
私は問題を見つけたので、それが誰かを助ける場合に備えてここにあります:
saslauthd
の構成ファイルがあります。私のものは/etc/sysconfig/saslauthd
にあります。
# Directory in which to place saslauthd's listening socket, pid file, and so
# on. This directory must already exist.
SOCKETDIR=/var/run/saslauthd
# Mechanism to use when checking passwords. Run "saslauthd -v" to get a list
# of which mechanism your installation was compiled with the ablity to use.
MECH=pam
# Options sent to the saslauthd. If the MECH is other than "pam" uncomment the next line.
# DAEMONOPTS=--user saslauth
# OPTIONS="-c -r -m /var/spool/postfix/var/run/saslauthd"
OPTIONS="-c -m /var/run/saslauthd"
# Additional flags to pass to saslauthd on the command line. See saslauthd(8)
# for the list of accepted flags.
FLAGS=
OPTIONS
変数には、saslauthd
に渡されるオプションが含まれているはずです。まさに私が探していたものを実行する-r
がありません。その ドキュメント によると:
-rレルムとログインを組み合わせます(間に「@」記号を付けます)。例えばlogin: "foo"レルム: "bar"はlogin: "foo @bar"として渡されます。レルムは引き続き渡されるため、予期しない動作が発生する可能性があることに注意してください。
しかし、私の問題はこの変更だけでは解決されませんでした!上記の設定ファイルがロードされていても、/etc/init.d/saslauthd
スクリプトのバグが原因で、適用されていないことが判明しました。 $OPTIONS
は使用されませんでした!!!
/etc/init.d/saslauthd
スクリプトの元の開始セクションは次のとおりです。
start() {
[ -x $path ] || exit 5
echo -n $"Starting $prog: "
daemon $DAEMONOPTS $path -m $SOCKETDIR -a $MECH $FLAGS
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch $lockfile
return $RETVAL
}
そして、これは私がそれを修正した方法です:
start() {
[ -x $path ] || exit 5
echo -n $"Starting $prog: "
daemon $DAEMONOPTS $path $OPTIONS -a $MECH $FLAGS
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch $lockfile
return $RETVAL
}
出来た!これで、クエリにパスワードを確認するための完全な電子メールアドレスが含まれます。
クエリに、クエリの間違った/不完全なパラメータが含まれています。
このクエリは、ログインのローカル部分にドメインを追加します。
SELECT password FROM mailbox WHERE username = '%u@%r'
SASL構成の接尾辞のクエリを修正します。例: /etc/postfix/sasl/smtpd.conf