web-dev-qa-db-ja.com

Postfixはsmtpdpam + mysql認証をチェックするときにレルム(@domain)を省略します

ユーザーがユーザー名とパスワードを持つSMTP経由でメールを送信できるようにPostfixを設定しようとしています。そして、MySQLデータベース内に資格情報を保存しようとしています。 saslauthdpamのパスをたどりましたが、途中で立ち往生しています。

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の設定を上下に検索しましたが、これに何が影響するのかわかりません!?

2
Mehran

私は問題を見つけたので、それが誰かを助ける場合に備えてここにあります:

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
}

出来た!これで、クエリにパスワードを確認するための完全な電子メールアドレスが含まれます。

3
Mehran

クエリに、クエリの間違った/不完全なパラメータが含まれています。

このクエリは、ログインのローカル部分にドメインを追加します。

SELECT password FROM mailbox WHERE username = '%u@%r'

SASL構成の接尾辞のクエリを修正します。例: /etc/postfix/sasl/smtpd.conf

1
sebix