私はこのガイドに従って自分のサーバーにメールサーバーをセットアップしました: http://flurdy.com/docs/postfix/edition5.html 唯一の違いは、このチュートリアルではMySQLデータベースを使用することですPostgreSQLを使用しました。
しかし、RoundCubeにログインできません。これは、RoundCubeエラーログに表示されるメッセージです。
[31-Dec-2013 16:40:42 +0100]: IMAP Error: Login failed for [email protected] from A.B.C.D. AUTHENTICATE CRAM-MD5: A0001 NO Login failed. in /usr/share/roundcube/program/lib/Roundcube/rcube_imap.php on line 184 (POST /?_task=login&_action=login)
これはIMAPログからです:
[31-Dec-2013 16:40:37 +0100]: [CB8A] S: * OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 IDLE AUTH=PLAIN ACL ACL2=UNION] Courier-IMAP ready. Copyright 1998-2011 Double Precision, Inc. See COPYING for distribution information.
[31-Dec-2013 16:40:37 +0100]: [CB8A] C: A0001 AUTHENTICATE CRAM-MD5
[31-Dec-2013 16:40:37 +0100]: [CB8A] S: + PDIxNUFCQjFGRjJBNTi1RUJEMTIzMjFEMDAwNDIxMTUzQGxpbm9kZT4=
[31-Dec-2013 16:40:37 +0100]: [CB8A] C: bWFya29Adm9kYW5vdmljLm5ldCBmMzk2njk0OTRiMTA1Mjc2YjllYWIxODhhZDI2OWM3NA==
[31-Dec-2013 16:40:42 +0100]: [CB8A] S: A0001 NO Login failed.
PostgresのDBテーブルに1人のユーザーがいます。ここに彼は:
<?xml version="1.0" encoding="utf-8" ?>
<data>
<header>
<column name="id" type="varchar" />
<column name="name" type="varchar" />
<column name="uid" type="int4" />
<column name="gid" type="int4" />
<column name="home" type="varchar" />
<column name="maildir" type="varchar" />
<column name="enabled" type="bool" />
<column name="change_password" type="bool" />
<column name="clear" type="varchar" />
<column name="crypt" type="varchar" />
<column name="quota" type="varchar" />
<column name="procmailrc" type="varchar" />
<column name="spamassassinrc" type="varchar" />
</header>
<records>
<row>
<column name="id">[email protected]</column>
<column name="name">test</column>
<column name="uid">5000</column>
<column name="gid">5000</column>
<column name="home">/var/spool/mail/virtual</column>
<column name="maildir">test/</column>
<column name="enabled">t</column>
<column name="change_password">t</column>
<column name="clear">aaaa</column>
<column name="crypt">$5$c74a6630fAb058a5$Zo95c7qWT.o/Twg4niR/gcNoVq2XVVPl0aw6DoS8ufA</column>
<column name="quota"></column>
<column name="procmailrc"></column>
<column name="spamassassinrc"></column>
</row>
</records>
</data>
test
と[email protected]
の両方と、プレーンなaaaa
パスワードと暗号化されたパスワードの両方を使用してログインしてみました。安全のために、MySQL内で(ガイドの式を使用して)パスワードを生成し、その結果をPostgresのフィールドにコピーしました。そして、はい、MySQLとPostgresは同じサーバー上にあります。 MySQLで使用した式は次のとおりです。
select encrypt('password', CONCAT('$5$', MD5(Rand())));
私は本当に他に何をすべきかわからないのでどんな助けでもありがたいです。さらに情報が必要な場合は、そのように言ってください。
編集:
私はなんとかtelnet経由でサーバーにログインすることができました(欠落しているメールディレクトリの問題を修正したとき)。しかし、それでもRoundCubeに接続できません。次に、mail.logの出力を示します。
Dec 31 20:14:45 localhost imapd-ssl: Connection, ip=[::ffff:127.0.0.1]
Dec 31 20:14:45 localhost authdaemond: received auth request, service=imap, authtype=cram-md5
Dec 31 20:14:45 localhost authdaemond: authpgsql: trying this module
Dec 31 20:14:45 localhost authdaemond: cram: challenge=PDk1N0QxRTI3QTlFREy3MkYwODI3RUE2MDVDREREMTdBQGxpbm9kZT4=, response=bWFya28gY2Q5OTRmNDI2ZtY3NDUzZGM2YmJlYjhmNTI0ZWQ3NWI=
Dec 31 20:14:45 localhost authdaemond: cram: decoded challenge/response, username 'test'
Dec 31 20:14:45 localhost authdaemond: Install of a character set for Postgresql: UTF8
Dec 31 20:14:45 localhost authdaemond: SQL query: SELECT id, crypt, '', uid, gid, home, concat(home,'/',maildir), '', name, '' FROM users WHERE id = '[email protected]' AND (enabled=TRUE)
Dec 31 20:14:45 localhost authdaemond: authpgsql: REJECT - try next module
Dec 31 20:14:45 localhost authdaemond: FAIL, all modules rejected
Dec 31 20:14:45 localhost imapd-ssl: LOGIN FAILED, method=CRAM-MD5, ip=[::ffff:127.0.0.1]
Dec 31 20:14:50 localhost imapd-ssl: Disconnected, ip=[::ffff:127.0.0.1], time=5, starttls=1
非常に同じ問題に直面したので、私はGoogle-Fooをいくつか使って問題の根本に到達しました:As Gabriel は正しい 彼の答え では、それはRoundcubeのせいではなく、パスワードの保存方法と暗号化の方法のせいです。
CRAM-MD5、MD5、またはCRYPTについて話すときは、一方向暗号化について話しています。ハッシュが生成されます。これを逆に行うことはできません。ハッシュからクリアテキストのパスワードを取得することは(ブルートフォースを除いて)不可能であり、ログイン手順では現実的ではありません。したがって、これらのハッシュの1つを使用して保存されたパスワードでは、プレーンテキストの場合にのみ検証できます。これが、ラウンドキューブ構成で$rcmail_config['imap_auth_type'] = 'PLAIN'
を設定すると、これが「解決」される理由です。
/usr/sbin/doveadm pw
を使用します)。これにより、クリアテキストパスワードが呼び出されるたびにプロセスリストにすぐに表示されます私はまだ進むべき道に苦労しています。#2だけが明確に除外されています(潜在的なハッカーへのプレゼントを作りたくありません;)
問題は、DBの「crypt」フィールドでCRAM-MD5認証メカニズムを使用しようとすることだと思います。
あなたのログで:
Dec 31 20:14:45 localhost authdaemond: SQL query: SELECT id, **crypt**, '', uid, gid, home, concat(home,'/',maildir), '', name, '' FROM users WHERE id = '[email protected]' AND (enabled=TRUE)
Dec 31 20:14:45 localhost authdaemond: authpgsql: REJECT - try next module
Dec 31 20:14:45 localhost authdaemond: FAIL, all modules rejected
Dec 31 20:14:45 localhost imapd-ssl: LOGIN FAILED, **method=CRAM-MD5**, ip=[::ffff:127.0.0.1]
つまり、「crypt」フィールドを取得するSQLクエリでは、authdaemondがプレーンパスワードを読み取れず、CRAM-MD5が機能しません。クリアテキストのパスワードにより、CRAM-MD5認証を実装できます。
修正するには:
この作業がうまくいくことを願っています。
多分roundcubeの設定です:
私は100%ではありませんが、roundcubeのデフォルト構成は「PLAIN」認証を使用するため、構成ファイルで変更してテストできます。
// IMAP AUTH type (DIGEST-MD5, CRAM-MD5, LOGIN, PLAIN or null to use
// best server supported one)
// $rcmail_config['imap_auth_type'] = LOGIN;
$rcmail_config['imap_auth_type'] = null;
Roundcubeの古いバージョン(0.3.1)では、次のように「auth」、「plain」、または「check」しかありません。
// IMAP auth type. Can be "auth" (CRAM-MD5), "plain" (PLAIN) or "check" to auto detect.
// Optional, defaults to "check"
$rcmail_config['imap_auth_type'] = "auth";
使用しているバージョンに依存します。