Ошибка входа 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. Придерживайтесь PLAIN/LOGIN:
    • нормально работает с Roundcube и IMAP на одном сервере, пока пользователи подключаются по HTTPS
    • нормально с доступом из почтовых клиентов, пока соединение защищено (IMAPS/POP3S/SMTPS)
    • дыра в безопасности с незашифрованным трафиком
  2. Сохраняйте пароли в открытом виде
    • можно использовать все виды механизмов аутентификации, что является преимуществом
    • хранить все пароли пользователей в открытом виде в файле/базе данных — это абсолютно недопустимо
  3. Храните пароли с помощью CRAM-MD5
    • дает вам как минимум CRAM-MD5, который поддерживает большинство клиентов
    • все еще остается возможность использования PLAIN/LOGIN
    • должны поддерживаться вашими административными инструментами
      • некоторым из них, возможно, придется вернуться к сторонним инструментам шифрования (например, PostfixAdmin использует /usr/sbin/doveadm pw), что приводит к тому, что открытый текстовый пароль на короткое время появляется в списке процессов каждый раз, когда он вызывается
    • другие сторонние инструменты (плагины/дополнения и т. д.) могут быть проблемой

Я все еще не знаю, какой путь выбрать, и только вариант №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]

Это означает, что в запросе SQL вы получаете поле "crypt", authdaemond не может прочитать открытый пароль, тогда CRAM-MD5 не работает. Пароли в виде открытого текста позволяют реализовать аутентификацию CRAM-MD5.

Исправить:

  1. Вы можете изменить механизм аутентификации клиента (roundcube) на PLAIN или LOGIN. Это совместимо с полем crypt.
  2. Измените файл authpgsqlrc. Установите PGSQL_CLEAR_PWFIELD для поиска поля "clear" и прокомментируйте PGSQL_CRYPT_PWFIELD. Таким образом, authdaemond выполнит SQL-запрос для поиска пароля в виде открытого текста.

Надеюсь, это вам подойдет.

решение3

Возможно, это конфигурация круглого куба:

Я не уверен на 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;

В старых версиях (0.3.1) Roundcube были только «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";

Зависит от используемой вами версии.

Связанный контент