请先阅读前一篇
这篇文章是“在Linux上构建邮件服务器”系列的第六篇。
在前一篇中,我们完成了基于PostgreSQL的虚拟用户账户表设计。
如果您还没有查看,建议先阅读。
👉 前一篇: Dovecot虚拟用户概念与PostgreSQL表设计
Dovecot的 auth-sql.conf.ext
配置是什么?
要通过数据库而非系统账户来认证虚拟用户,需配置auth-sql.conf.ext
文件。
通过此设置,Dovecot可以从PostgreSQL中获取用户信息进行认证。
Dovecot的SQL认证配置 (auth-sql.conf.ext
)
连接PostgreSQL所需配置的主要项目如下。
1. 配置文件路径
配置文件位于以下路径。
/etc/dovecot/conf.d/auth-sql.conf.ext
如果文件不存在,可以使用以下命令创建。
sudo touch /etc/dovecot/conf.d/auth-sql.conf.ext
2. 主要设置项
driver = sql
connect = host=localhost dbname=mail user=mailadmin password=yourpassword
default_pass_scheme = SHA256-CRYPT
password_query = SELECT email AS user, password FROM mail_users WHERE email='%u';
user_query = SELECT home_directory AS home FROM mail_users WHERE email='%u';
设置说明
driver = sql
→ 使用SQL基础的认证connect = host=localhost dbname=mail user=mailadmin password=yourpassword
→ PostgreSQL连接信息default_pass_scheme = SHA256-CRYPT
→ 指定默认的密码哈希算法。如果使用bcrypt,则设置为'BLF-CRYPT'password_query
→ 将用户输入的密码与数据库中获取的哈希值进行比较user_query
→ 返回用户的邮件存储路径
3. 重启Dovecot服务
应用配置后重启Dovecot。
sudo systemctl restart dovecot
Dovecot与PostgreSQL联动测试
要检查配置是否正常应用,可以使用以下命令。
1. 认证测试
doveadm auth test user@example.com password123
如果配置正常,passdb
认证应该成功。
2. 检查错误日志
如果配置未正确应用,可以检查日志以分析原因。
journalctl -xe | grep dovecot
密码哈希方式 (MD5, SHA-256, BCRYPT 比较与应用)
当Dovecot与PostgreSQL联动时,密码必须以哈希状态保存。
哈希方式会影响安全性和性能。
1. 哈希方式比较
哈希方式 | 安全级别 | 速度 | 使用示例 |
---|---|---|---|
MD5 | 脆弱 (有冲突可能) | 快速 | 不推荐 |
SHA-256 | 中等 (相对安全) | 适中 | 需要一般安全时 |
BCRYPT | 强安全 | 慢 | 高安全要求时 |
由于已知MD5的脆弱性,不建议使用。
SHA-256通常被广泛使用,速度和安全性之间取得平衡。
BCRYPT提供最强的安全性,但速度较慢,在性能重要的环境中需要考虑合适的选项。
使用Dovecot命令 (doveadm pw
) 进行哈希
您也可以直接在Dovecot中哈希密码。
1. SHA-256哈希
doveadm pw -s SHA256-CRYPT
输入密码后,将生成如下哈希值。
{SHA256-CRYPT}$5$rounds=5000$abc123def456$ABCDEF1234567890ABCDEF1234567890
2. BCRYPT哈希
doveadm pw -s BLF-CRYPT
输出示例:
{BLF-CRYPT}$2a$05$abcdefghij1234567890ABCDEFGHIJKL$CDEFGHIJKLMNOPQRSTUVWXYZ123456
将该哈希值存储到PostgreSQL的mail_users
表中即可。
直接在PostgreSQL中进行哈希 (pgcrypto
扩展使用)
使用PostgreSQL的pgcrypto
扩展,可以无需doveadm
哈希密码。
1. 启用pgcrypto
扩展
CREATE EXTENSION IF NOT EXISTS pgcrypto;
2. 通过SHA-256哈希保存密码
INSERT INTO mail_users (domain_id, email, password, home_directory)
VALUES (1, 'user@example.com', crypt('mypassword', gen_salt('bf')), '/var/mail/vmail/user@example.com');
3. 通过BCRYPT哈希保存密码
INSERT INTO mail_users (domain_id, email, password, home_directory)
VALUES (1, 'user@example.com', crypt('mypassword', gen_salt('bf', 12)), '/var/mail/vmail/user@example.com');
总结与下一个步骤
本文所涉及的内容
- Dovecot的auth-sql.conf.ext
设置方法
- Dovecot与PostgreSQL联动测试方法
- SHA-256与BCRYPT哈希方式应用方法
- 直接在PostgreSQL中哈希的方法
下一篇预告: Postfix与Dovecot的SMTP认证联动
现在已经配置了Dovecot,下一步是设置Postfix以利用Dovecot的认证。
👉 下一篇: Postfix与Dovecot的SMTP认证联动 (敬请期待!)
댓글이 없습니다.