Dovecot 说:“请求 CRAM-MD5 方案,但我们只有 CRYPT”但 CRAM-MD5 可用

Dovecot 说:“请求 CRAM-MD5 方案,但我们只有 CRYPT”但 CRAM-MD5 可用

将 Fedora Core 16 升级到 Fedora Core 21 后,新的 Dovecot 安装无法正确进行身份验证,但原因尚不清楚。

我们有 50 多个电子邮件帐户由该服务器提供服务,所以我希望之前的方案能够继续为人们服务。

多年来,我们一直非常成功地使用 CRAM-MD5。我移交了配置,根据需要更新了新版本 (2.2.15-3),然后尝试连接。日志显示:

Requested CRAM-MD5 scheme, but we have only CRYPT

然而,当我按照 Dovecot 网站上的测试指南进行操作时(可在此处找到http://wiki2.dovecot.org/TestInstallation),测试命令表明CRAM-MD5确实可用:

# telnet localhost 143
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE
 IDLE STARTTLS AUTH=CRAM-MD5 AUTH=DIGEST-MD5 AUTH=PLAIN AUTH=LOGIN]
 Dovecot ready.

可以看出,CRAM-MD5 是列出的第一个受支持的授权类型。

此外,dovecot 参数测试程序也没有显示任何问题:

# dovecot -n
# 2.2.15: /etc/dovecot/dovecot.conf
# OS: Linux 3.17.4-301.fc21.x86_64 x86_64 Fedora release 21 (Twenty One)
auth_debug = yes
auth_debug_passwords = yes
auth_mechanisms = cram-md5 digest-md5 plain login
auth_verbose = yes
listen = *
login_trusted_networks = 192.168.1.4 192.168.1.5 192.168.1.6
192.168.1.12 192.168.1.14 192.168.1.10 127.0.0.1
mail_location = mbox:~/mail:INBOX=/var/spool/mail/%u
mbox_write_locks = fcntl
namespace inbox {
  inbox = yes
  location =
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix =
}
passdb {
  driver = passwd
}
quota_full_tempfail = yes
service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    user = postfix
  }
}
ssl = required
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem
userdb {
  driver = passwd
}
verbose_proctitle = yes

我已经检查过 cram-md5 文件上的权限与旧系统上的权限相同,等等。

非常感谢所有帮助。

答案1

...我最终发现文件所有权和权限详细信息已更改。而且,我在配置文件中也犯了一个小错误。

与许多软件包一样,新方案安装时会附带示例,其中包含许多注释和注释掉的行,提示您获取所需的配置。但是,我的旧配置文件中没有这样的行:

passdb {
  args = /etc/cram-md5.pwd
  driver = passwd-file
}

当然,这个文件不一定非要叫这个名字cram-md5.pwd,也不一定非要放在 /etc 中。不过,你必须要指向这个文件!

但仅凭这一点还不够。

此外,旧安装中该文件完全归 拥有root。新安装希望该文件至少由 拥有组所有权dovecot,并且具有该文件的读写权限。

我只需选择任意一个passdb“容器”并将这两行放入其中,它就会突然开始工作!

我仍然有一些东西不能正常工作,但这些是我以前从未使用过的配置选项(比如 tls 安全性),所以目前没有人依赖这些功能!

相关内容