我的问题
在数据库中将 MD5 密码切换到 CRAM-MD5 密码有哪些风险,尤其是考虑到以下情况,以及如何针对现有安装进行处理(假设我知道纯文本密码)?
使用(切换到)CRAM-MD5,
- 对于加密/验证,PostfixAdmin 必须
doveadm pw
在创建用户和更改密码时恢复到外部工具(),因此明文密码至少会短暂地出现在进程列表1中 - 我可能会引入一个新的依赖项(同一个工具)
- 不确定其他(第三方)工具是否可以解决这个问题
第 2 项可能不是什么大问题,因为我不打算替换 Dovecot(即使替换,在我看来,它也有很好的迁移路径记录)。第 3 项也不是什么大问题然而(因为我不知道有这样的工具)。幕后还有 SASL,如果我没记错的话,它再次在 Dovecot 的帮助下完成了这部分工作(例如smtpd_sasl_type=dovecot
在 Postfix 配置中)。但可能是我错过了什么——可能是更多麻烦,也可能是其他选择。
有什么提示吗?除了完全地不同的设置)?
TL;DR(背景)
我正在设置一个新的邮件服务器,使用 Dovecot、Postfix、PostfixAdmin、Sieve 和一些附加组件 - 所有这些都与 MySQL 连接作为后端(大致如下这个德语教程)。到目前为止,我已经完成了所有准备工作,但后来发现它只提供 PLAIN 和 LOGIN 用于 IMAP 身份验证。对于当地的连接(例如同一台机器上的 Roundcube 网络邮件程序)和其他“加密连接”(HTTPS/IMAPS/POP3S/SMTPS)——但我担心有些用户会使用未加密的连接,而我不想完全禁用这些连接(在某些情况下可能需要这些连接)。
因此,我在 Dovecot 中启用了 CRAM-MD5 和 DIGEST-MD5——当然,这不起作用:PostfixAdmin 使用其内部 MD5 程序将密码存储在数据库中,因此 Dovecot 无法匹配它们(请参阅我的答案在这里了解详情)。这基本上给我留下了 3 个选择,其中一个甚至不是这样的:
- 保持原样(存在上述风险)
- 在数据库中切换到纯文本密码(哎哟,不行,不行)
- 在数据库中切换为 CRAM-MD5 密码
更新
通过对“参与者”的调查,我们可以比较以下几种可能性:
密码存储 MD5 密码存储 CRAM-DM5 网络邮件(Roundcube) 仅客户端/服务器 HTTPS(HTTP 请求将升级,因此 PLAIN = OK) IMAP PLAIN PLAIN / CRAM-MD5(内部)² SMTP PLAIN PLAIN / CRAM-MD5(内部)² 本机客户端(连接到 Postfix/Dovecot) IMAP³ 普通/登录 普通/登录/CRAM-MD5 SMTP³ 普通/登录 普通/登录/CRAM-MD5 POP3³ 普通/登录 普通/登录/CRAM-MD5 IMAPS 普通/登录 普通/登录/CRAM-MD5 SMTPS 普通/登录 普通/登录/CRAM-MD5 POP3S 普通/登录 普通/登录/CRAM-MD5 Postfix管理员 创建/更新 MD5 (内部) CRAM-MD5 (通过 dovecotadm)⁴
1:postfixadmin/functions.inc.php
我刚刚检查了资料来源,在第 928 行发现了以下内容:因此,这个反驳似乎站不住脚。
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 通常在未加密的连接上被禁用
4:有可能使用 Roundcube 的代码重写,因为它们都是用 PHP 编写的 – 但是 PostfixAdmin
答案1
由于没有得到答案,我亲自试验了一下,最终进行了切换——一切顺利。正如最初所述,这样做的好处是,如果CRAM-MD5
加密传输不可用(是的,这种情况确实会发生),至少可以在未加密传输上进行身份验证——此外,对于那些已经在旧服务器中使用 CRAM-MD5 的人来说,从旧服务器迁移的过程也更加顺利。除此之外,我没有看到任何副作用然而– 尽管这些可能需要一段时间才能出现:)
对于那些感兴趣的人,请按照以下步骤操作:
- Dovecot:在你的(或你正在使用的相应文件中)将更改为
default_pass_scheme
,然后添加到MD5-CRYPT
CRAM-MD5
/etc/dovecot/dovecot-mysql.conf
cram-md5
auth_mechanisms
/etc/dovecot/dovecot.conf
- Postfix:在我的例子中,Postfix 使用 Dovecot 通过 SASL 进行身份验证(
smtpd_sasl_type=dovecot
)——所以这里无需执行任何操作 - Postfix管理员:
- 首先登录 PostfixAdmin WebIF 并保持登录状态 – 否则在配置更改后您将无法这样做:)
- 中的更改
config.inc.php
:$CONF['encrypt'] = 'md5crypt';
必须更改为$CONF['encrypt'] = 'dovecot:CRAM-MD5';
。还请检查$CONF['dovecotpw'] = "/usr/sbin/doveadm pw";
– 例如在 Debian Wheezy 上,doveadm
驻留在/usr/bin
,因此需要调整此设置 - 现在转到 PostfixAdmin WebIf(您仍处于登录状态)并更新用户密码:导航到“虚拟列表”,滚动到“邮箱”,点击每个邮箱的“编辑”链接,然后存储“新密码”(这意味着您要么必须知道他们的密码 - 要么设置“某个”密码并让他们稍后更新。据我所知,没有办法“转换”现有密码)。
通过“管理员列表”对管理员重复相同的操作 - 否则他们/您将无法再次登录
- 重启邮件服务。基本上,重启 Dovecot 和 Postfix 就足够了。
完成。现在您可以验证一切是否仍在运行。就我而言,Roundcube 仍能够验证 PLAIN – 远程客户端现在能够使用 CRAM-MD5。对我来说,问题解决了。
答案2
无法评论(每 2 分钟发布一条帖子?!),但这必须说出来……
非常感谢您发布您所做操作的详细信息。这完全说得通,问题肯定是由 PostFixAdmin 软件更新引起的。
我检查了我的设置,发现 PFA 设置没有引用 dovecot 或 cram。我更改了它(保持登录到 WebUI),问题就解决了……解决了!
我所做的其他事情就是按照此处的文章启用密码和登录调试:https://doc.dovecot.org/admin_manual/debugging/debugging_authentication/
所以,是的,确实有一定比例的 RTFM(甚至是小说大小的手册!)参与其中,但你就是粘合剂!
再次,我非常感谢你。你真是我的救星!
+10 点赞