Postfix + Dovecot与MySQL后端:MD5哈希密码和CRAM-MD5validation

我的问题

在数据库中从MD5密码切换到CRAM-MD5密码有什么风险,尤其是考虑到以下情况,以及如何解决现有安装(只要知道明文密码)?

随着(切换到)CRAM-MD5,

  1. 对于encryption/validation, doveadm pw在用户创build和密码更改时恢复为外部工具( doveadm pw,因此明文密码至less会短暂出现在进程列表 1中
  2. 我可能会引入一个新的依赖(相同的工具)
  3. 不确定其他(第三方)工具是否可以处理这个问题

项目2可能不是什么大不了的,因为我不打算取代Dovecot(即使它有很好的文件迁移path恕我直言)。 项目3还没有什么大不了的(因为我不知道这样的工具)。 在幕后,还有SASL,IIRC,在Dovecot的帮助下完成了这部分工作(例如,Postfixconfiguration中的smtpd_sasl_type=dovecot )。 但可能是我错过了一些东西 – 不pipe是更麻烦还是其他的select。

任何提示? 你会推荐什么(除了完全不同的设置)?

TL; DR(背景)

我正在使用Dovecot,Postfix,PostfixAdmin,Sieve,一些额外的组件(所有与MySQL连接的后端)安装新的邮件服务器。 到目前为止,我已经完成了所有的工作,但是后来发现它只提供PLAIN和LOGIN来进行IMAP身份validation。 对于本地连接(例如同一台机器上的Roundcubenetworking邮件程序)和其他“encryption连接”(HTTPS / IMAPS / POP3S / SMTPS)不是什么大问题 – 但是恐怕有些用户会使用未encryption的连接,我不想完全禁用(有些情况下可能需要这些)。

所以我在Dovecot中启用了CRAM-MD5和DIGEST-MD5 – 这当然不能工作:PostfixAdmin使用其内部MD5程序将密码存储在数据库中,因此Dovecot无法匹配它们(请参阅我的答案以了解详细信息)。 这基本上让我有3个选项,其中一个甚至不是这样的:

  • 保持原样(具有上述风险)
  • 切换到数据库中的纯文本密码(ouch,no,不会)
  • 切换到数据库中的CRAM-MD5密码

更新

从调查“参与者”,这里是可能性的比较:

 PwdStore MD5 PwdStore CRAM-DM5
 Webmail(Roundcube)

仅客户端/服务器HTTPS(HTTP请求将被升级,所以PLAIN = OK)
 IMAP PLAIN PLAIN / CRAM-MD5(内部)²
 SMTP PLAIN PLAIN / CRAM-MD5(内部)²

本地客户端(连接到Postfix / Dovecot)

 IMAP³PLAIN / LOGIN PLAIN / LOGIN / CRAM-MD5
 SMTP³PLAIN / LOGIN PLAIN / LOGIN / CRAM-MD5
 POP3³PLAIN / LOGIN PLAIN / LOGIN / CRAM-MD5
 IMAPS PLAIN / LOGIN PLAIN / LOGIN / CRAM-MD5
 SMTPS PLAIN / LOGIN PLAIN / LOGIN / CRAM-MD5
 POP3S PLAIN / LOGIN PLAIN / LOGIN / CRAM-MD5

 PostfixAdmin
创build/更新MD5(内部)CRAM-MD5(通过dovecotadm)⑷

1:我刚刚检查了源代码,在postfixadmin/functions.inc.php的第928行find了以下内容:
Use proc_open call to avoid safe_mode problems and to prevent showing plain password in process table
所以这个反驳的论点似乎在下降。

2: roundcube/program/lib/Roundcube/rcube_imap_generic.php行90ff,在function authenticate()

3: PLAIN / LOGIN通常在未encryption的连接上被禁用

4:可能会使用来自Roundcube的代码重写 ,因为两者都是用PHP编写的 – 但PostfixAdmin

由于我没有得到答案,我已经尝试了自己,最后做了开关 – 顺利进行。 正如开始所说的那样,至less有CRAM-MD5可用于未encryption传输的身份validation,因此,如果encryption传输不可用(是的,发生了这种情况),加上已经使用CRAM-MD5的旧服务器的迁移更加顺畅那里。 除此之外,我还没有看到任何副作用 – 虽然这可能需要一段时间才能出现:)


所以对于那些感兴趣的,这里是要执行的步骤:

  • Dovecot:在/etc/dovecot/dovecot-mysql.conf (或者你正在使用的相应文件) /etc/dovecot/dovecot-mysql.conf default_pass_schemeMD5-CRYPT更改为CRAM-MD5 ,然后将cram-md5添加到/etc/dovecot/dovecot.conf auth_mechanisms /etc/dovecot/dovecot.conf
  • Postfix:在我的情况下,Postfix通过SASL使用Dovecot进行身份validation( smtpd_sasl_type=dovecot ) – 在这里没有什么可做的
  • PostfixAdmin:
    • 首先login到PostfixAdmin WebIF并保持login状态,否则在configuration更改后您将无法进行此操作:)
    • config.inc.php变化: $CONF['encrypt'] = 'md5crypt'; 必须改成$CONF['encrypt'] = 'dovecot:CRAM-MD5'; 。 还要检查$CONF['dovecotpw'] = "/usr/sbin/doveadm pw"; – 例如在Debian Wheezy上, doveadm驻留在/usr/bin ,因此需要对此设置进行调整
    • 现在进入PostfixAdmin WebIf(你还在那里login)并更新用户密码:导航到“虚拟列表”,滚动到“邮箱”,点击每个邮箱的“编辑”链接,在那里存储“新密码“(这意味着你要么知道他们的密码 – 或设置”一些“密码,并让他们以后更新。没有办法”转换“现有的密码,据我所知)。
      通过“pipe理员列表”对pipe理员重复同样的操作 – 否则他们/您将无法再次login
  • 重新启动邮件服务。 基本上,重启Dovecot或Postfix可能就足够了。

完成。 现在你可以validation一切是否还在工作。 在我的情况下是这样的:Roundcube仍然可以authenticationPLAIN – 现在一个远程客户端可以使用CRAM-MD5。 案件解决了,对我来说。