Cyrus IMAP 3.4 配置参数详解
imapd.conf/cyrus.conf 双配置体系逐项详解,含 TLS 证书、993 IMAPS、STARTTLS、禁明文与 SASL 机制白名单的端到端加固实测(3.4.3)。
Cyrus IMAP 3.4 配置参数详解
目标:讲清 Cyrus IMAP 3.4 的双配置体系(
/etc/imapd.conf服务参数 +/etc/cyrus.conf进程编排),逐项解释核心参数,并完成 TLS 加密与 SASL 认证加固的端到端实测(143 禁明文、993 IMAPS、STARTTLS、机制白名单)。全文基于 Ubuntu 22.04 官方仓库 3.4.3 实测。
一、环境信息
- 服务器:Ubuntu 22.04.5 LTS,主机名 mail.example.com
- 软件:cyrus-imapd 3.4.3-3ubuntu0.3(安装过程见《Ubuntu 22.04 安装 Cyrus IMAP 3.4 指南》)
- 配置文件:
/etc/imapd.conf、/etc/cyrus.conf;证书目录/etc/cyrus/tls/ - 演示账号:
cyrus(管理员)、admin(业务用户),密码q1w2e3r4
二、前置条件
- 已按安装篇完成 Cyrus IMAP 3.4 安装并能登录(imtest 返回
User logged in); - 本文所有改动后均需
systemctl restart cyrus-imapd生效(两个配置文件都不支持热加载)。
三、参数查看与修改方式
Cyrus 有两个配置文件,职责完全不同:
| 文件 | 角色 | 改动后生效方式 |
|---|---|---|
| /etc/imapd.conf | 服务行为参数:存储、认证、TLS、配额、命名空间 | restart cyrus-imapd |
| /etc/cyrus.conf | master 进程编排:启动钩子、监听服务、定时事件 | restart cyrus-imapd |
查看当前生效的全部 imapd.conf 参数(含默认值归一后的结果):
/usr/lib/cyrus/bin/cyr_info conf
admins: cyrus
allowplaintext: yes
altnamespace: no
autocreate_quota: 0
configdirectory: /var/lib/cyrus
defaultpartition: default
hashimapspool: yes
httpmodules: caldav carddav
(输出较长,以上为实测节选)
修改方式:直接编辑文件后重启服务。改前建议备份:
cp /etc/imapd.conf /etc/imapd.conf.bak.$(date +%F)
四、参数总览
按职能把 imapd.conf 常用参数分六组(默认值取自 3.4.3 Debian 默认配置实测):
| 分组 | 代表参数 | 说明 |
|---|---|---|
| 存储路径 | configdirectory、partition-default、hashimapspool | 元数据库与邮件存储布局 |
| 访问控制 | admins、allowplaintext、allowanonymouslogin | 管理员与登录安全基线 |
| 认证 SASL | sasl_pwcheck_method、sasl_mech_list、sasl_sasldb_path | 认证后端与机制白名单 |
| TLS | tls_server_cert、tls_server_key、tls_versions_min | 传输加密 |
| 命名空间 | altnamespace、unixhierarchysep、virtdomains | 邮箱名呈现与多域 |
| 配额与资源 | autocreate_quota、quotawarn | 新建邮箱默认配额等 |
五、核心参数分类详解
5.1 存储路径组
configdirectory: /var/lib/cyrus
defaultpartition: default
partition-default: /var/spool/cyrus/mail
hashimapspool: true
configdirectory:邮箱列表(mailboxes.db)、配额、订阅、已读状态、TLS 会话等元数据库所在目录,备份时与邮件存储同等重要。partition-default:邮件正文与索引实际落盘位置;可用partition-xxx:定义多个分区挂到不同磁盘。hashimapspool: yes(默认):邮箱目录按用户名散列到子目录(如user.admin→/var/spool/cyrus/mail/a/user/admin),避免单目录文件数爆炸。实测:
/usr/lib/cyrus/bin/mbpath user.admin
/var/spool/cyrus/mail/a/user/admin
5.2 访问控制组
admins: cyrus
allowanonymouslogin: no
allowplaintext: yes
admins:空格分隔的管理员列表,可对所有邮箱执行管理操作(建删邮箱、设 ACL/配额)。deb 非交互安装默认没有这一行,必须手工补。allowanonymouslogin: no:默认即禁匿名,保持。allowplaintext: yes:默认允许明文密码登录,是生产最大隐患,加固见第六章。
5.3 认证 SASL 组
sasl_pwcheck_method: auxprop
sasl_sasldb_path: /etc/sasldb2 # Debian 默认位置(可不写)
sasl_auto_transition: no
sasl_pwcheck_method:认证后端。auxprop读本地 sasldb2(本文场景);saslauthd走系统认证守护进程(可桥接 PAM/LDAP);大型企业可换ldap直连目录。sasl_mech_list:SASL 机制白名单(默认全放),加固时收缩(第六章实测)。
💡 技术拓展:SASL 认证后端常见选项——
后端 数据源 适用 auxprop(sasldb2) 本地 Berkeley DB 账号库 中小规模、账号与系统账户隔离 saslauthd→PAM 系统用户/shadow 与系统账号打通的小团队 saslauthd→LDAP OpenLDAP/AD 企业统一身份 Kerberos/GSSAPI KDC 票据 已有 Kerberos 体系的组织 本文演示环境采用 auxprop(sasldb2),账号独立于系统用户、迁移简单。
5.4 TLS 组
tls_server_cert: /etc/cyrus/tls/mail.example.com.crt
tls_server_key: /etc/cyrus/tls/mail.example.com.key
tls_versions_min: 1.2
tls_session_timeout: 1440
tls_server_cert/tls_server_key:服务证书与私钥路径,配置上后 STARTTLS 与 IMAPS 才可用;tls_versions_min: 1.2:拒绝 TLS1.0/1.1 老协议;tls_session_timeout: 1440(分钟):TLS 会话缓存有效期,配合cyrus.conf的tlsprune定时清理。
5.5 命名空间组
altnamespace: no
unixhierarchysep: no
virtdomains: 默认未开
altnamespace: no:客户端看到的个人邮箱为INBOX顶级视图;改yes后共享/他人邮箱平级呈现,老客户端兼容性好的是默认值。unixhierarchysep: no:层级分隔符用.(user.admin.Sent);置yes改用/,且允许用户名中带.。virtdomains:多域名托管时开启,登录名变为user@domain全限定形式;单域场景保持默认即可。
5.6 配额组
autocreate_quota: 0
autocreate_quota: 0:新建邮箱不限容量;设正整数(KB)则新邮箱自动带配额。运行期配额用cyradm的sq命令逐邮箱设置(《Cyrus IMAP 3.4 常用 CLI 命令详解》有实测)。
5.7 cyrus.conf 进程编排
START {
recover cmd="/usr/sbin/cyrus ctl_cyrusdb -r"
delprune cmd="/usr/sbin/cyrus expire -E 3"
tlsprune cmd="/usr/sbin/cyrus tls_prune"
}
SERVICES {
imap cmd="imapd -U 30" listen="imap" prefork=0 maxchild=100
imaps cmd="imapd -s -U 30" listen="imaps" prefork=0 maxchild=100
lmtpunix cmd="lmtpd" listen="/run/cyrus/socket/lmtp" prefork=0 maxchild=20
sieve cmd="timsieved" listen="localhost:sieve" prefork=0 maxchild=100
notify cmd="notifyd" listen="/run/cyrus/socket/notify" proto="udp" prefork=1
}
EVENTS {
checkpoint cmd="/usr/sbin/cyrus ctl_cyrusdb -c" period=30
delprune cmd="/usr/sbin/cyrus expire -E 3" at=0401
tlsprune cmd="/usr/sbin/cyrus tls_prune" at=0401
deleteprune cmd="/usr/sbin/cyrus expire -E 4 -D 28" at=0430
expungeprune cmd="/usr/sbin/cyrus expire -E 4 -X 28" at=0445
}
START:master 启动时先跑一次的任务——recover恢复数据库一致性(断电后自愈的第一道)、两个清理任务。SERVICES:每行定义一个监听服务,cmd是可执行文件(必须在磁盘存在,否则 master 拒绝启动——安装篇的 pop3 排障即此机制),listen可为服务名(查 /etc/services 得端口)或绝对路径套接字,maxchild限制并发 fork 数。EVENTS:cron 式定时任务,period(分钟周期)或at(每日时刻)。checkpoint每 30 分钟刷一次数据库检查点;deleteprune/expungeprune每日清理 28 天前的延迟删除邮件。
六、TLS 与 SASL 加固实测(生产必做)
目标:143 端口禁明文密码、启用 993 IMAPS 与 143 STARTTLS、SASL 机制收缩白名单。以下全程实测。
6.1 生成自签名证书
内网/演示用自签名证书(生产替换为受信 CA 证书):
mkdir -p /etc/cyrus/tls
openssl req -x509 -newkey rsa:2048 \
-keyout /etc/cyrus/tls/mail.example.com.key \
-out /etc/cyrus/tls/mail.example.com.crt \
-days 3650 -nodes \
-subj "/C=CN/ST=Shanghai/L=Shanghai/O=Example/CN=mail.example.com"
chown -R cyrus:mail /etc/cyrus/tls
chmod 600 /etc/cyrus/tls/mail.example.com.key
ls -l /etc/cyrus/tls/
-rw-r--r-- 1 cyrus mail 1318 Oct 25 04:19 mail.example.com.crt
-rw------- 1 cyrus mail 1704 Oct 25 04:19 mail.example.com.key
⚠️ 注意:私钥必须 600 且属主含 cyrus 可读,否则 imapd 以 cyrus 身份启动后读不到私钥,TLS 握手直接失败。
6.2 配置 TLS 参数并启用 imaps 服务
imapd.conf 追加三行:
cat >> /etc/imapd.conf <<EOF
tls_server_cert: /etc/cyrus/tls/mail.example.com.crt
tls_server_key: /etc/cyrus/tls/mail.example.com.key
tls_versions_min: 1.2
EOF
cyrus.conf 放开 imaps 行(注意:Murder 代理段还有一行同名的 #imaps cmd="proxyd -s ...",只能放开 imapd -s 那一行):
sed -i -E 's/^(\s*)#(imaps\tcmd="imapd)/\1\2/' /etc/cyrus.conf
grep -nE 'imaps' /etc/cyrus.conf
32: imaps cmd="imapd -s -U 30" listen="imaps" prefork=0 maxchild=100
66: #imaps cmd="proxyd -s" listen="imaps" prefork=0 maxchild=100
重启并验证 993 监听:
systemctl restart cyrus-imapd
systemctl is-active cyrus-imapd
ss -ltn | grep -E ':(143|993|4190)'
active
LISTEN 0 32 127.0.0.1:4190 0.0.0.0:*
LISTEN 0 32 0.0.0.0:993 0.0.0.0:*
LISTEN 0 32 0.0.0.0:143 0.0.0.0:*
排障实录:若误放开两行 imaps,启动报 master: multiple entries for service 'imaps'、服务 status=78/CONFIG 退出;按上面 grep 结果把 proxyd 那行恢复注释即可。
6.3 验证 993 IMAPS 与证书
echo | openssl s_client -connect localhost:993 -servername mail.example.com 2>/dev/null | openssl x509 -noout -subject -issuer -dates
subject=C = CN, ST = Shanghai, L = Shanghai, O = Example, CN = mail.example.com
issuer=C = CN, ST = Shanghai, L = Shanghai, O = Example, CN = mail.example.com
notBefore=Oct 25 04:19:30 2026 GMT
notAfter=Oct 22 04:19:30 2036 GMT
用测试客户端走 TLS 登录:
/usr/lib/cyrus/bin/imtest -s -m login -u admin -a admin -w q1w2e3r4 localhost
TLS connection established: TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
S: * OK [CAPABILITY IMAP4rev1 LITERAL+ ID ENABLE AUTH=SCRAM-SHA-1-PLUS AUTH=SCRAM-SHA-1 AUTH=SCRAM-SHA-256-PLUS AUTH=SCRAM-SHA-256 AUTH=DIGEST-MD5 AUTH=NTLM AUTH=CRAM-MD5 AUTH=LOGIN AUTH=PLAIN SASL-IR] mail.example.com Cyrus IMAP 3.4.3-dirty-Debian-3.4.3-3ubuntu0.3 server ready
Authenticated.
TLSv1.3 握手成功;TLS 通道建立后 SASL 机制里多出 SCRAM-*-PLUS(通道绑定变体),说明加密层已生效。
6.4 禁明文登录 + SASL 机制白名单
sed -i 's/^allowplaintext: yes/allowplaintext: no/' /etc/imapd.conf
echo 'sasl_mech_list: PLAIN LOGIN SCRAM-SHA-256' >> /etc/imapd.conf
systemctl restart cyrus-imapd
验证 143 端口已拒绝明文密码登录:
/usr/lib/cyrus/bin/imtest -m login -u admin -a admin -w q1w2e3r4 localhost
S: * OK [CAPABILITY IMAP4rev1 LITERAL+ ID ENABLE STARTTLS LOGINDISABLED AUTH=SCRAM-SHA-256 SASL-IR] mail.example.com Cyrus IMAP 3.4.3-dirty-Debian-3.4.3-3ubuntu0.3 server ready
[Server advertised LOGINDISABLED]
Authentication failed. generic failure
三个信号同时生效:banner 出现 LOGINDISABLED(禁 LOGIN/PLAIN 于未加密连接)、AUTH= 只剩 SCRAM-SHA-256(白名单生效)、明文登录被拒。
143 端口的正确姿势是先 STARTTLS 升级再认证:
/usr/lib/cyrus/bin/imtest -t "" -m login -u admin -a admin -w q1w2e3r4 localhost
S: * OK [CAPABILITY IMAP4rev1 LITERAL+ ID ENABLE STARTTLS LOGINDISABLED AUTH=SCRAM-SHA-256 SASL-IR] mail.example.com Cyrus IMAP 3.4.3-dirty-Debian-3.4.3-3ubuntu0.3 server ready
C: S01 STARTTLS
S: S01 OK Begin TLS negotiation now
TLS connection established: TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
993 端口上白名单内机制完整可见(TLS 内允许 PLAIN/LOGIN):
S: * OK [CAPABILITY IMAP4rev1 LITERAL+ ID ENABLE AUTH=PLAIN AUTH=LOGIN AUTH=SCRAM-SHA-256-PLUS AUTH=SCRAM-SHA-256 SASL-IR] mail.example.com Cyrus IMAP 3.4.3-dirty-Debian-3.4.3-3ubuntu0.3 server ready
💡 技术拓展:SASL 机制安全性梯度——
机制 密码形态 评价 PLAIN / LOGIN 明文 base64 仅在 TLS 内可接受 CRAM-MD5 / DIGEST-MD5 挑战-响应 算法老旧,建议淘汰 SCRAM-SHA-256 加盐迭代哈希 现代推荐,本文白名单保留 SCRAM-*-PLUS SCRAM + TLS 通道绑定 防降级,TLS 下自动出现 GSSAPI Kerberos 票据 企业 Kerberos 环境 本文白名单
PLAIN LOGIN SCRAM-SHA-256的取舍:TLS 内兼容老客户端(PLAIN/LOGIN),同时提供现代机制(SCRAM-SHA-256)。
七、生产配置模板
适用场景:16GB 内存、SSD、单域、500 邮箱以内的小型生产(TLS 强制 + 白名单 + 配额兜底)。
# /etc/imapd.conf 生产模板
servername: mail.example.com
admins: cyrus
configdirectory: /var/lib/cyrus
proc_path: /run/cyrus/proc
mboxname_lockpath: /run/cyrus/lock
defaultpartition: default
partition-default: /var/spool/cyrus/mail
hashimapspool: true
altnamespace: no
unixhierarchysep: no
allowanonymouslogin: no
allowplaintext: no
sasl_pwcheck_method: auxprop
sasl_mech_list: PLAIN LOGIN SCRAM-SHA-256
sasl_auto_transition: no
tls_server_cert: /etc/cyrus/tls/mail.example.com.crt
tls_server_key: /etc/cyrus/tls/mail.example.com.key
tls_versions_min: 1.2
tls_session_timeout: 1440
autocreate_quota: 102400
sievedir: /var/spool/sieve
sieveusehomedir: false
lmtpsocket: /run/cyrus/socket/lmtp
idlesocket: /run/cyrus/socket/idle
notifysocket: /run/cyrus/socket/notify
syslog_prefix: cyrus
umask: 077
cyrus.conf 使用 5.7 的裁剪版(imap + imaps + lmtpunix + sieve + notify)。autocreate_quota: 102400 即新邮箱默认 100MB 配额,按磁盘容量调整。
八、常见问题(FAQ)
Q1:改完配置不生效?
两个配置文件都不热加载,必须 systemctl restart cyrus-imapd;用 cyr_info conf 核对生效值。
Q2:993 起不来、日志说找不到证书?
检查 ls -l /etc/cyrus/tls/:私钥属主/权限必须允许 cyrus 用户读取(建议 cyrus:mail + 600)。
Q3:143 上客户端提示「服务器不支持登录」?
这是 allowplaintext: no 生效的标志(LOGINDISABLED),客户端需勾选「STARTTLS」或改用 993 的 SSL/TLS 直连。
Q4:sasl_mech_list 把客户端挡在门外?
白名单外的机制(如 CRAM-MD5)被移除后,只支持旧机制的客户端会认证失败;先 imtest 看 banner 的 AUTH= 列表,再让客户端换机制或走 TLS 内 PLAIN。
九、参考链接
- imapd.conf(5) 官方手册:https://www.cyrusimap.org/3.4/imap/reference/manpages/configs/imapd.conf.html
- cyrus.conf(5) 官方手册:https://www.cyrusimap.org/3.4/imap/reference/manpages/configs/cyrus.conf.html
- Cyrus SASL 选项:https://www.cyrusimap.org/sasl/
- 专栏导览:《Cyrus IMAP 3 介绍与选型指南》、《Ubuntu 22.04 安装 Cyrus IMAP 3.4 指南》