dovecot:启用二级密码?

问题描述

我们正在处理一个涉及 dovecot 的异常情况,可能需要一个不同寻常的解决方案。

我们最近要求所有 POP/IMAP 用户更改他们的密码,而且几乎在所有情况下,他们都尽职尽责地这样做了。但是,一个用户有几台设备和机器反复查询电子邮件,并且由于任何人无法控制的情况,他的一台计算机至少在几周内无法访问,因此,dovecot 密码在该时间过去之前,不能更改用户的电子邮件访问权限。

因此,该计算机使用旧的、现在无效的密码不断查询 dovecot 以获取该用户的电子邮件,但这些查询失败了。

此外,由于我们暂时无法控制的各种情况,我们不能让该用户在他使用的其他机器和设备上将其密码改回旧值。

我们想知道的是,是否可以通过某种方式设置 dovecot 来识别和接受此特定用户的两个密码。换句话说,我们能否以某种方式为这个电子邮件地址设置一个二级密码,以便旧密码和新密码都允许该用户访问他的电子邮件?

我们通过在 auth sql 中包含 auth-sql.conf.ext 来使用 10-auth.conf。也许这个问题的解决方案是重构我们用于 SQL 身份验证的数据库并添加一个或多个列,然后以某种方式更改 auth-sql.conf.ext 中使用的 SELECT 语句以在两个密码之一之间进行选择。>

如果这是唯一可用的选项,我们愿意尝试此程序,但我们甚至不确定如何完成。无论如何,我们希望 dovecot 可能有一些我们不熟悉的功能,允许我们设置这个用户的 dovecot 电子邮件帐户以允许使用两个不同的密码进行身份验证无需任何数据库更改。

我们有没有可能做到这一点?

提前致谢。

解决方法

Allan Wind 提供的链接帮助了我(谢谢!),以及我在过去忽略的 dovecot 文档中看到的其他一些内容。

事实证明,我可以在 userdb 中提供第二个 passdbauth-sql.conf.ext 块,如果主 SQL 查询没有返回匹配项,它们将用作辅助回退。我设置了一个 passwd-file,这两个都可以使用它,其中包含用户旧密码的哈希值,现在,两个密码都可以使用了。

例如,次要 userdb 块(它应该出现在原始的基于 sql 的 userdb 块的正下方)如下所示:

# Fallback ...
userdb {
  driver = passwd-file
  args = scheme=md5-crypt username_format=%u /etc/dovecot/extra.userdb
}

次要 passdb 块是相同的,只是它被命名为 passdb 而不是 userdb。它必须紧跟在同一文件中的原始 passdb 语句之后。

所以,一切都会好起来的。

继续前进!

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...