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
問題は、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
crypt
parameterは1
に設定されています。これは、crypt
関数が使用されることを意味します。そしてこれは crypt
が行っていること :
キーの最初の8文字のそれぞれの下位7ビットを取得することにより、、56ビットのキーが取得されます。
より長いパスワードを許可するには、他のストレージスキームの1つ(できれば2または3)を使用する必要があります。
/etc/pam.d内の他のサービス定義もチェックして、すべてがカバーされていることを確認する必要があることに注意してください(同じホスト上でSASLで認証するCyrus IMAPサーバーがある場合は、少なくとも/ etc/pam .d/imapには同様のレコードが含まれます)
パスワードの暗号化スキームを変更すると、保存されているすべてのパスワードが事実上失われ、リセットする必要があります。