1.3.4. 使用 MariaDB SQL 数据库作为 Dovecot 身份验证后端
Dovecot 可以从 MariaDB 数据库读取帐户和密码,并在用户登录到 IMAP 或 POP3 服务时使用它来验证用户。这个验证方法的好处包括:
- 管理员可以在数据库中集中管理用户。
- 用户在服务器上没有本地访问权限。
先决条件
- Dovecot 已安装。
- 虚拟用户功能已配置。
- 到 MariaDB 服务器的连接支持 TLS 加密。
-
MariaDB 中存在
dovecotDB数据库,users表至少包含username和password列。 -
password列包含使用 Dovecot 支持的方案加密的密码。 -
密码可以使用相同的方案,或者有
{pw-storage-scheme}前缀。 -
dovecotMariaDB 用户对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" 。
流程
安装
dovecot-mysql软件包:# dnf install dovecot-mysql在
/etc/dovecot/conf.d/10-auth.conf文件中配置身份验证后端:注释掉您不需要的
auth-*.conf.ext身份验证后端配置文件的include语句,例如:#!include auth-system.conf.ext通过取消以下行的注释来启用 SQL 身份验证:
!include auth-sql.conf.ext
编辑
/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 服务器查询这些设置。
使用以下设置创建
/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 必须在user和password变量中使用这些值。因此,如果数据库使用不同的列名称,请使用ASSQL 命令重命名结果中的列。 -
对于
iterate_query参数,查询必须返回所有用户的列表。
-
对于
对
/etc/dovecot/dovecot-sql.conf.ext文件设置安全权限:# chown root:root /etc/dovecot/dovecot-sql.conf.ext # chmod 600 /etc/dovecot/dovecot-sql.conf.ext
后续步骤