我一直在遵循本指南在我的服务器上设置一个邮件服务器: 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' “解决”这个问题。
/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。
修理:
我希望为你工作。
也许是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";
取决于您使用的版本。