Scert/deploy/systemd/Scert-admin服务管理说明.md

4.4 KiB
Raw Blame History

Scert-admin 服务管理说明

服务边界

Scert-admin 是超级管理员密码重置入口激活器,本身不监听任何 TCP/UDP 端口。Scert 核心服务固定提供 /reset 路由,但只有 Scert-admin 正在运行且短时租约有效时才显示重置页面,其余时间统一返回 404。

Linux 安装程序必须同时安装 Scert 和 Scert-admin 的 systemd 单元,但不得执行 systemctl enable Scert-admin,不得为 Scert-admin 创建开机启动软链接,也不得配置 Restart=always 或其他自动拉起策略。

一次性校验码文件

Linux systemd 安装默认将校验码写入 /run/scert-admin/reset-code,该目录由 systemd 创建并设置为 0700,文件由 Scert-admin 创建并设置为 0600。直接运行程序时可以通过 --code-output 指定受保护的临时文件路径;不要将该路径放入公开目录、日志目录或备份目录。

校验码文件只用于人工读取,不属于配置数据。读取后不得复制到工单、聊天记录或日志中;密码重置成功后文件会立即销毁。

支持的生命周期控制

日常运行时,Scert-admin 只支持以下两个控制命令:

systemctl start Scert-admin
systemctl stop Scert-admin
  • start:生成一次性校验码,激活由 Web 管理域名或公网 IP 自动生成的 /reset 地址,并开始刷新短时租约。
  • stop:立即使 /reset 入口失效;异常退出时,入口会在当前租约到期后自动失效。
  • restart、reload、try-restart 等操作不属于 Scert-admin 的支持范围;单元不提供 ExecReload,且不配置自动重启。
  • enable 不应使用:该单元没有 [Install] 段,因此不会注册开机启动目标。
  • daemon-reload 仅允许由安装、升级程序在替换 unit 文件后执行,不属于日常服务控制命令。

安全限制说明

systemd 无法阻止 root 或具备等效系统权限的操作者调用 status、kill、restart、mask 等管理命令。因此,本项目的可落地安全边界是:

  1. 单元不提供 [Install] 段,默认不会开机自启动。
  2. 单元使用 Restart=no,异常退出不会被 systemd 自动拉起。
  3. 进程使用 Scert 用户运行,systemd 通过 RestrictAddressFamilies=AF_UNIX 禁止其建立 IPv4 或 IPv6 网络监听。
  4. Scert-admin 不配置独立端口,初始化程序只放行 Scert 主服务端口。
  5. 安装器、桌面端和运维文档只提供 start、stop 两个日常控制入口。
  6. 任何需要重新加载 unit 的行为仅限安装或升级阶段,不能通过 Web 管理界面触发。
  7. 激活租约有效期为 90 秒,每 30 秒刷新;systemd 使用 RuntimeMaxSec=30min 将单次激活最长时间限制为 30 分钟。
  8. 启动时生成的一次性校验码不会写入标准输出或 systemd 日志。校验码只写入受保护的临时文件;systemd 单元使用 RuntimeDirectory=scert-admin 和 RuntimeDirectoryMode=0700,文件权限为 0600,仅允许 Scert 用户和 root 读取。

这组限制可以避免服务因安装配置被纳入开机启动、避免服务自动反复拉起,并彻底取消独立密码重置监听端口。需要注意:/reset 与 Scert 主服务共享 HTTPS 端口,激活期间仍可能被外部访问,因此完整密码重置实现还必须校验一次性校验码、限制请求频率、单次消费校验码并记录审计日志。不能把拥有 root 权限的恶意操作者从 systemd 管理能力中排除。

安装阶段约定

安装器完成 unit 文件复制后,可以执行一次:

systemctl daemon-reload

安装器不得执行以下命令:

systemctl enable Scert-admin
systemctl start Scert-admin
systemctl restart Scert-admin

安装完成后只提示管理员在确有需要时手动执行 systemctl start Scert-admin;不需要密码重置时保持服务停止,完成重置后立即执行 systemctl stop Scert-admin。

当前实现已经接入一次性校验码、单次消费、密码复杂度校验、CSRF、同源校验、失败限流、配置原子保存和审计日志。密码重置成功后 /reset 立即关闭,Scert-admin 后续刷新旧租约也会自动终止。启动后请按终端提示,使用 root 或 Scert 用户读取受保护的临时校验码文件:sudo cat /run/scert-admin/reset-code。校验码在密码重置成功、服务停止或租约失效后自动销毁。