1.3.4. 使用 MariaDB SQL 数据库作为 Dovecot 身份验证后端


Dovecot 可以从 MariaDB 数据库读取帐户和密码,并在用户登录到 IMAP 或 POP3 服务时使用它来验证用户。这个验证方法的好处包括:

  • 管理员可以在数据库中集中管理用户。
  • 用户在服务器上没有本地访问权限。

先决条件

  • Dovecot 已安装。
  • 虚拟用户功能已配置。
  • 到 MariaDB 服务器的连接支持 TLS 加密。
  • MariaDB 中存在 dovecotDB 数据库,users 表至少包含 usernamepassword 列。
  • password 列包含使用 Dovecot 支持的方案加密的密码。
  • 密码可以使用相同的方案,或者有 {pw-storage-scheme} 前缀。
  • dovecot MariaDB 用户对 dovecotDB 数据库中的 users 表有读权限。
  • 发布 MariaDB 服务器的 TLS 证书的证书颁发机构(CA)的证书存储在 Dovecot 服务器上的 /etc/pki/tls/certs/ca.crt 文件中。
  • 如果启用了 FIPS 模式,这个 Dovecot 服务器支持 Extended Master Secret (EMS)扩展或使用 TLS 1.3。没有 EMS 的 TLS 1.2 连接会失败。如需更多信息,请参阅红帽知识库解决方案 强制实施 TLS 扩展"Extended Master Secret"

流程

  1. 安装 dovecot-mysql 软件包:

    # dnf install dovecot-mysql
  2. /etc/dovecot/conf.d/10-auth.conf 文件中配置身份验证后端:

    1. 注释掉您不需要的 auth-*.conf.ext 身份验证后端配置文件的 include 语句,例如:

      #!include auth-system.conf.ext
    2. 通过取消以下行的注释来启用 SQL 身份验证:

      !include auth-sql.conf.ext
  3. 编辑 /etc/dovecot/conf.d/auth-sql.conf.ext 文件,并将 override_fields 参数添加到 userdb 部分,如下所示:

    userdb {
      driver = sql
      args = /etc/dovecot/dovecot-sql.conf.ext
      override_fields = uid=vmail gid=vmail home=/var/mail/%n/
    }

    由于值固定,Dovecot 不会从 SQL 服务器查询这些设置。

  4. 使用以下设置创建 /etc/dovecot/dovecot-sql.conf.ext 文件:

    driver = mysql**
    connect = host=mariadb_srv.example.com dbname=dovecotDB user=dovecot password=_<dovecotPW>_ ssl_ca=/etc/pki/tls/certs/ca.crt
    default_pass_scheme = SHA512-CRYPT
    user_query = SELECT username FROM users WHERE username='%u';
    password_query = SELECT username AS user, password FROM users WHERE username='%u';
    iterate_query = SELECT username FROM users;

    要对数据库服务器使用 TLS 加密,请将 ssl_ca 选项设置为发布 MariaDB 服务器证书的 CA 的证书路径。对于正常工作的证书验证,MariaDB 服务器的主机名必须与其 TLS 证书中使用的主机名匹配。

    如果数据库中的密码值包含 {<pw-storage-scheme>} 前缀,您可以省略 default_pass_scheme 设置。

    文件中的查询必须设置如下:

    • 对于 user_query 参数,查询必须返回 Dovecot 用户的用户名。查询还必须只返回一个结果。
    • 对于 password_query 参数,查询必须返回用户名和密码,并且 Dovecot 必须在 userpassword 变量中使用这些值。因此,如果数据库使用不同的列名称,请使用 AS SQL 命令重命名结果中的列。
    • 对于 iterate_query 参数,查询必须返回所有用户的列表。
  5. /etc/dovecot/dovecot-sql.conf.ext 文件设置安全权限:

    # chown root:root /etc/dovecot/dovecot-sql.conf.ext
    # chmod 600 /etc/dovecot/dovecot-sql.conf.ext

后续步骤

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部