[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 CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH CAP_FOWNER # 主进程需要读取 smail 用户权限保护的配置和数据目录,同时保留插件隔离能力。 # 跨用户限制资源和终止降权插件分别需要资源管理与信号能力;插件本身不继承有效能力。 CapabilityBoundingSet=CAP_NET_BIND_SERVICE CAP_SYS_CHROOT CAP_SETUID CAP_SETGID CAP_CHOWN CAP_SYS_ADMIN CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH CAP_FOWNER CAP_SYS_RESOURCE CAP_KILL 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