RoundCubelogin到本地IMAP服务器失败

我一直在遵循本指南在我的服务器上设置一个邮件服务器: http : //flurdy.com/docs/postfix/edition5.html唯一的区别是本教程使用MySQL数据库,而且我使用PostgreSQL。

但是我无法login到RoundCube。 这是我在RoundCube错误日志中得到的消息:

[31-Dec-2013 16:40:42 +0100]: IMAP Error: Login failed for [email protected] from ABCD 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密码和encryption密码login。 为了安全起见,我还在MySQL中生成了密码(使用指南中的expression式),然后将结果复制到Postgres中的字段中。 是的,MySQL和Postgres在同一台服务器上。 这里是我在MySQL中使用的expression式:

 select encrypt('password', CONCAT('$5$', MD5(RAND()))); 

我真的不知道还有什么要做,所以任何帮助,将不胜感激。 如果你需要更多的信息,就这么说吧。

编辑:

我设法通过telnetlogin到服务器(当我修复了丢失的邮件目录问题)。 但是我仍然无法连接到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的问题来解决问题的根源:正如Gabriel 在他的回答中所假定的那样,这不是Roundcube的错,而是密码存储的方式,encryption工作。

几乎没有明显的基础

在谈论CRAM-MD5,MD5或CRYPT时,我们谈论的是单向encryption:产生一个散列。 我们不能这么做,从散列中获得明文密码是(除了暴力)对于任何login过程来说都是不可能的和不现实的。 因此,使用其中一个散列值存储的密码,我们只能在使用纯文本时validation它,这就是为什么$rcmail_config['imap_auth_type'] = 'PLAIN'configuration中设置$rcmail_config['imap_auth_type'] = 'PLAIN' “解决”这个问题。

选项

  1. 坚持使用PLAIN / LOGIN:
    • 只要用户连接到HTTPS,就可以在同一台服务器上使用Roundcube和IMAP
    • 只要连接是安全的(IMAPS / POP3S / SMTPS)
    • 未encryptionstream量的安全漏洞
  2. 存储密码纯文本
    • 所有types的authentication机制都可以使用,这是一个亲
    • 让所有的用户密码在文件/数据库中是纯文本的,绝对是不行的
  3. 使用CRAM-MD5存储密码
    • 至less为您提供了大多数客户支持的CRAM-MD5
    • 仍然留下使用PLAIN / LOGIN的选项
    • 必须由您的pipe理工具支持
      • 其中一些可能需要恢复到第三方工具进行encryption(例如,PostfixAdmin使用/usr/sbin/doveadm pw ),这使明文密码每次调用时都会在进程列表中显示出来
    • 其他第三方工具(插件/插件等)可能是一个问题

我仍然在努力走哪条路 – 只有排名第二(我不想给潜在的黑客做礼物;)

我认为,问题是尝试使用CRAM-MD5authentication机制与数据库中的“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-MD5authentication。

修理:

  1. 您可以将客户端(roundcube)的auth机制更改为PLAIN或LOGIN。 这与crypt领域兼容。
  2. 在authpgsqlrc文件中更改。 设置PGSQL_CLEAR_PWFIELD来查找“清除”字段并评论PGSQL_CRYPT_PWFIELD。 所以authdaemond会做一个SQL查询来find明文密码。

我希望为你工作。

也许是roundcube的configuration:

我不是100%,但是roundcube的默认configuration使用“PLAIN”auth,所以你可以在configuration文件中改变它并testing:

 // 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"; 

取决于您使用的版本。