RoundCube 登入本機 IMAP 伺服器失敗

RoundCube 登入本機 IMAP 伺服器失敗

我一直按照本指南在我的伺服器上設定郵件伺服器: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 資料庫表中有一個使用者。他在這裡:

<?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

答案1

面對同樣的問題,我做了一些我們的 Google-Foo 來找到問題的根源:加布里埃爾假定正確性在他的回答中,這不是 Roundcube 的錯,而是密碼儲存方式和加密工作方式的錯。

一些明顯的基礎知識

當談到 CRAM-MD5、MD5 或 CRYPT 時,我們談論的是單向加密:產生雜湊值。我們不能反過來這樣做,從哈希中導出明文密碼(除了暴力破解)對於任何登入過程都是不可能的,也不現實。因此,使用這些雜湊值之一儲存密碼時,我們只能在使用純文字時驗證它——這就是為什麼$rcmail_config['imap_auth_type'] = 'PLAIN'在 roundcube 配置中進行設定可以「解決」這個問題。

選項

  1. 堅持使用普通/登入:
    • 只要使用者使用 HTTPS 連接,就可以在同一台伺服器上使用 Roundcube 和 IMAP
    • 只要連線安全(IMAPS/POP3S/SMTPS),就可以從郵件用戶端存取
    • 未加密流量的安全漏洞
  2. 以純文字形式儲存密碼
    • 可以使用所有類型的身份驗證機制,這是一個專業的
    • 將所有使用者的密碼以純文字形式保存在檔案/資料庫中是絕對不行的
  3. 使用 CRAM-MD5 儲存密碼
    • 至少為您提供大多數客戶端支援的 CRAM-MD5
    • 仍然保留使用 PLAIN/LOGIN 的選項
    • 必須得到您的管理工具的支持
      • 其中一些可能需要恢復到第三方工具進行加密(例如 PostfixAdmin 使用/usr/sbin/doveadm pw),這使得明文密碼在每次呼叫時很快就會出現在進程清單中
    • 其他第 3 方工具(插件/附加元件等)可能是一個問題

我仍在糾結該走哪條路——只有#2絕對被排除(我不想給潛在的黑客送禮物;)

答案2

我認為,問題是嘗試使用 CRAM-MD5 身份驗證機制和資料庫中的“crypt”欄位。

在你的日誌中:

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 身份驗證。

修理:

  1. 您可以將用戶端(roundcube)的驗證機制變更為 PLAIN 或 LOGIN。這與 crypt 字段相容。
  2. 更改 authpgsqlrc 檔案。設定 PGSQL_CLEAR_PWFIELD 以尋找「清除」欄位並註釋 PGSQL_CRYPT_PWFIELD。因此 authdaemond 將執行 sql 查詢來尋找明文密碼。

我希望這對你有用。

答案3

也許是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";

取決於您使用的版本。

相關內容