mail.log 持续报 "fatal: open database" 或 "permission denied" 怎么排查?

mail.log 持续报 "fatal: open database" 或 "permission denied" 怎么排查?
问题判断:Postfix 的 fatal 级 open database 或 permission denied 错误意味着某个后台进程(smtpd、cleanup、trivial-rewrite 等)无法访问必需的 lookup 数据库文件。这通常直接导致邮件接收或投递中止——fatal 错误不会自动恢复。
Step 1 — 定位文件:从 mail.log 中 grep 完整错误行,形如 fatal: open database /etc/postfix/aliases.db: Permission denied。记下确切路径,这是排查的锚点。
Step 2 — 检查 Unix 文件权限:ls -la /etc/postfix/aliases.db 查看文件所有者和权限。Postfix .db 文件需对 postfix 用户可读,建议 chmod 644;其父目录需 chmod 755——Postfix 需要有目录的 x 权限才能遍历进去。常见错误:root 直接 touch 创建了空文件,没有执行 postmap 生成真正的 .db。
Step 3 — SELinux/AppArmor 检查:在 RHEL/CentOS 系统上,ls -lZ /etc/postfix/ 查看 SELinux 安全上下文。如果上下文不正确(如 postfix_etc_t 变成了 user_home_t),执行 restorecon -R /etc/postfix 恢复;临时测试可用 setenforce 0,但修复后务必恢复 enforcing。
Step 4 — 数据库完整性验证:postmap -q test hash:/etc/postfix/aliases 做抽查查询。如果报 "error: unable to open database",可能是 postmap 未执行或文件损坏,重新 postmap /etc/postfix/aliases 生成。

📎 Postfix DATABASE_README;Postfix BASIC_CONFIGURATION_README;RFC 6409 邮件提交