web-dev-qa-db-ja.com

SASLは「間違った」パスワードを受け入れます

Postfixを使用してメールサーバーをセットアップし、CyrusSASLを使用してユーザーを認証するように構成しました。実際よりも短いパスワードでログインできることがわかるまでは、完全に機能していました。

たとえば、パスワードはhuh1234h22である必要があります。次のコマンドでログインできます。

uhuh1234
uhuh1234h
uhuh1234h2
uhuh1234h22

しかし短いものではありません...

私はこのコマンドでそれをテストしました:

testsaslauthd -u USERNAME -p PASSWORD -s smtp -f /var/spool/postfix/var/run/saslauthd/mux

私の質問は、なぜこれが起こるのか、そしてどうすればそれを防ぐことができるのかということです。

編集

/etc/pam.d/smtpにある私の設定ファイルは次のとおりです。

auth    required   pam_mysql.so user=USR passwd=PASS Host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=USR passwd=PASS Host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1
2
Matthias Dunkel

問題は、cryptの使用にあります。 ドキュメントからpam_mysqlへ

crypt (0)

Specifies the method to encrypt the user's password:
 0 (or "plain") = No encryption. Passwords stored in plaintext. HIGHLY DISCOURAGED. 
 1 (or "Y") = Use crypt(3) function 
 2 (or "mysql") = Use MySQL PASSWORD() function. It is possible that the encryption function used by pam-mysql is different from that of the MySQL server, as pam-mysql uses the function defined in MySQL's C-client API instead of using PASSWORD() SQL function in the query. 
 3 (or "md5") = Use MySQL MD5() function

cryptparameterは1に設定されています。これは、crypt関数が使用されることを意味します。そしてこれは cryptが行っていること

キーの最初の8文字のそれぞれの下位7ビットを取得することにより、、56ビットのキーが取得されます。

より長いパスワードを許可するには、他のストレージスキームの1つ(できれば2または3)を使用する必要があります。

/etc/pam.d内の他のサービス定義もチェックして、すべてがカバーされていることを確認する必要があることに注意してください(同じホスト上でSASLで認証するCyrus IMAPサーバーがある場合は、少なくとも/ etc/pam .d/imapには同様のレコードが含まれます)

パスワードの暗号化スキームを変更すると、保存されているすべてのパスワードが事実上失われ、リセットする必要があります。

1
the-wabbit