Smail/deploy/systemd/smail.service
smail b0ea780bb1 修复Linux插件隔离部署身份配置
为生产环境补充插件专用系统用户、运行 UID/GID 和主进程所需的受限能力,确保插件可以隔离降权运行。
2026-09-29 18:01:55 +08:00

45 lines
1.4 KiB
Desktop File

[Unit]
Description=Smail 邮件服务
After=network-online.target
Wants=network-online.target
StartLimitIntervalSec=300s
StartLimitBurst=3
[Service]
Type=simple
# 主进程需要保留受限的 root 能力,才能为插件创建 chroot 和网络隔离;插件
# 通过 SMAIL_PLUGIN_UID/SMAIL_PLUGIN_GID 降权运行,不能以 root 身份执行。
# 运行环境仅由 root 可读写的独立文件提供,避免在 unit 中混入部署环境配置。
EnvironmentFile=/etc/smail/smail.env
WorkingDirectory=/opt/smail
ExecStart=/opt/smail/smail
Restart=on-failure
RestartSec=10s
# 队列等待 25 秒、数据库等待 35 秒,另留服务与日志收尾时间。
TimeoutStopSec=90s
KillMode=control-group
OOMPolicy=stop
# 默认预算只是部署起点;上线前须核对同机服务余量并完成容量验收。
MemoryAccounting=true
MemoryHigh=384M
MemoryMax=512M
MemorySwapMax=0
CPUAccounting=true
CPUQuota=100%
TasksAccounting=true
TasksMax=256
RuntimeDirectory=smail
RuntimeDirectoryMode=0750
# 目录由 smail 进程拥有,允许主服务创建受保护的本机控制套接字。
NoNewPrivileges=true
AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE CAP_SYS_CHROOT CAP_SETUID CAP_SETGID CAP_CHOWN CAP_SYS_ADMIN
PrivateTmp=true
ProtectHome=true
ProtectSystem=full
ReadWritePaths=/opt/smail/config /opt/smail/data /opt/smail/ssl /opt/smail/log -/opt/smail/plugins /run/smail
[Install]
WantedBy=multi-user.target