修正Linux发行运维说明并记录实库全量回归结果

This commit is contained in:
xuans 2026-10-03 22:05:55 +08:00
parent e0d16a6ab1
commit a5dfd42b4e
10 changed files with 114 additions and 33 deletions

View File

@ -73,24 +73,38 @@ sudo systemctl start Scert
## 安装后流程
安装完成后先启动主服务,再通过服务器 IP 访问独立 HTTPS 初始化页面,无需 Linux 图形界面:
本轮 Linux 部署仅允许 Nginx 对外提供 `80/443`。从初始化开始就必须把 Scert 绑定到回环地址,不得临时开放 `8080` 或其他业务端口。安装器不负责配置共享 Nginx;初始化访问需要该站点的受信任 HTTPS 入口和严格验证的上游连接,无需 Linux 图形界面。
首次启动前,在 `systemctl edit Scert` 中设置以下环境变量;示例内部端口须确认空闲,并与正式向导选项、Nginx 上游一致:
```ini
[Service]
Environment="SCERT_SERVER_HOST=127.0.0.1"
Environment="SCERT_SERVER_PORT=9004"
Environment="SCERT_BOOTSTRAP_FIREWALL_MODE=external"
```
完成本机配置后执行:
```bash
sudo systemctl daemon-reload
sudo systemctl enable Scert
sudo systemctl start Scert
sudo systemctl status Scert --no-pager -l
sudo cat /run/scert/bootstrap-url
```
默认临时监听端口是 `8080`,须由管理员预先在主机防火墙和云安全组中对受信任的管理来源放行。云 NAT 环境应在启动前通过 systemd 的 `SCERT_BOOTSTRAP_PUBLIC_IP` 设置可访问的公网 IP;它只影响临时地址和证书,不会创建网络规则。
未覆盖配置时的临时端口默认是 `8080`,这不是本轮允许对外开放的端口。`SCERT_BOOTSTRAP_PUBLIC_IP` 只影响临时地址与证书,不配置代理、监听规则或云安全组。受保护文件中的内部地址不能直接作为公网入口。
先打开裸 IP 地址查看浏览器证书详情,通过可信 SSH 或控制台读取最新 `journalctl -u Scert -b -n 30` 中的临时证书 SHA-256 指纹。与浏览器完全一致后,再打开受保护文件内的完整 HTTPS 链接。链接片段是短期一次性令牌,不要存入普通文档、日志或截图。指纹不一致必须停止,不得输入 RAM 凭据。临时证书为自签名,不能作为公共 CA 信任或生产 TLS 通过的证据;服务重启会生成新的临时证书,必须重新核对。
初始化上游使用当前进程生成的临时自签名证书。必须通过已核验的 SSH 或控制台读取当前启动日志中的 SHA-256 指纹,核对上游证书后才建立限定用途的信任,并保持 Nginx 的证书及名称验证;不能使用关闭验证的方式接通代理。浏览器到 Nginx 的证书仍须通过正常域名和信任链验证。服务重启后临时证书会更换,必须重新核对。完整初始化链接含短期一次性令牌,不得存入文档、日志或截图。
仅回环的首次初始化反代、临时证书信任及切换正式证书属于生产验收门禁;当前自动测试不能证明该链路已经通过。未建立可信连接前不得输入管理员密码或 RAM 凭据,也不得以开放内部端口替代验收。
向导提供 SQLite、MySQL、PostgreSQL 三种存储选项,外部数据库强制 TLS 证书及主机名校验。数据库和阿里云 DNS 验证通过后可提交管理员、通知及正式域名/IP 配置;完成后临时服务关闭,自动加载正式配置并跳转正式 HTTPS 地址。IP 管理证书目前仍为自签名。
固定及动态生成的 Linux systemd unit 显式设置 `SCERT_BOOTSTRAP_FIREWALL_MODE=external`,初始化不查询或修改主机防火墙及云安全组,而在日志、页面提示和完成响应中说明管理员责任。这不是端口已放行或网络已验证的证明:首次及正式管理端口都必须预先按最小来源范围配置;反向代理场景不能将内部端口开放到公网。
固定及动态生成的 Linux systemd unit 显式设置 `SCERT_BOOTSTRAP_FIREWALL_MODE=external`,初始化不查询或修改主机防火墙及云安全组,而在日志、页面提示和完成响应中说明管理员责任。这不是网络已验证的证明;本轮仅使用 Nginx 的 `80/443`,Scert 和数据库始终保持回环监听。
命令行直接运行仍默认 `auto`,其防火墙检查或写入失败会中止初始化,不会悄悄降级。管理员已管理网络规则时可指定 `scert serve --bootstrap-firewall-mode external`;该参数及环境变量仅影响首次 Web 初始化,不能由远程请求切换策略。不能为通过初始化而把服务改成 root。非特权 Linux 实机验收尚未完成;反向代理的回环监听配置应在 IP 初始化结束后再应用,具体顺序见 `doc/生产部署与运维说明.md` 第 4.1 节。
命令行直接运行仍默认 `auto`,其防火墙检查或写入失败会中止初始化,不会悄悄降级。管理员已管理网络规则时可指定 `scert serve --bootstrap-firewall-mode external`;该参数及环境变量仅影响首次 Web 初始化,不能由远程请求切换策略。不能为通过初始化而把服务改成 root,也不能先公网监听再改回环。
`Scert-admin` 默认保持停止状态。确有密码重置需求时,仅使用:
@ -99,7 +113,7 @@ systemctl start Scert-admin
systemctl stop Scert-admin
```
`Scert-admin` 不监听任何 TCP/UDP 端口。启动后,它只维护 Scert 主服务 `/reset` 路径的短时激活租约,并将一次性校验码写入 `/run/scert-admin/reset-code` 受保护临时文件,不写入标准输出或 systemd 日志;停止后入口立即失效,异常退出后入口会在租约过期时失效。管理员可使用 `sudo cat /run/scert-admin/reset-code` 读取校验码,校验码在成功消费、服务停止或租约失效后自动销毁。云安全组只需由管理员根据初始化提示放行主服务端口。
在 root 前台交互终端执行 `start` 后,`Scert-admin` 通过受保护的 Unix Socket 提供密码重置、部署事务核查、人工处置和结果查询;不激活 `/reset` 网页、不创建验证码文件、不监听 TCP/UDP。重置须验证绑定邮箱收到的八位验证码,再在终端两次输入新密码。不要后台启动、传入参数、使用管道或执行 `restart`;平时保持停止。详见包内 [Scert-admin 服务管理说明](systemd/Scert-admin服务管理说明.md)。
### 存活检查与生产就绪检查
@ -304,7 +318,7 @@ server {
示例域名与配置不能作为生产环境证书、DNS、ACME 或最终 HTTPS 验收依据。
开发环境使用自签名证书时,应优先将测试 CA 加入独立信任文件。只有在隔离的临时开发环境中,才允许短时使用 `proxy_ssl_verify off`;该设置禁止复制到生产配置。
自签名证书测试也必须使用经过可信渠道核验的独立信任文件并校验证书名称,不允许通过关闭 TLS 验证绕过失败;开发配置同样不得成为放宽生产边界的理由。
## 备份与恢复

View File

@ -1,5 +1,5 @@
[Unit]
Description=Scert-admin 临时密码重置入口激活器
Description=Scert-admin 本机管理员交互终端
Documentation=file:///scert/docs/Scert-admin-service-management.md
After=Scert.service
Requisite=Scert.service
@ -45,10 +45,10 @@ ReadWritePaths=/run/scert-admin
DeviceAllow=char-pts rw
RestrictAddressFamilies=AF_UNIX
# Scert-admin 不监听任何 TCP/UDP 端口,只维护主服务 /reset 路径的短时激活租约。
# Scert-admin 只通过受保护的 Unix Socket 管理主服务,不提供 HTTP/TCP 恢复入口。
# 刻意不提供 [Install] 段,禁止通过 systemctl enable 纳入开机启动。
# 不配置 ExecReload,reload 不属于受支持的控制操作。
# 当前实现通过本机 Socket 交互,不再维护旧注释中描述的 Web 重置入口。
# 仅支持 root 在前台交互终端显式执行 systemctl start Scert-admin。
# 管理程序使用 root 读取显式启动者的终端;只保留终端访问及本机 Socket 所需能力。
# 新密码和验证码只在调用终端输入,不写入文件、命令参数或服务日志。

View File

@ -2,15 +2,15 @@
## 服务边界
`Scert-admin` 是超级管理员密码重置入口激活器,本身不监听任何 TCP/UDP 端口。Scert 核心服务固定提供 `/reset` 路由,但只有 `Scert-admin` 正在运行且短时租约有效时才显示重置页面,其余时间统一返回 `404`。
`Scert-admin` 是 Linux 本机管理员交互终端,通过受保护的 Unix Socket 连接已初始化的 Scert 主服务。它不监听 TCP/UDP 端口,不激活 `/reset` 网页,也不提供其他 HTTP 密码恢复或人工处置入口。
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` 指定受保护的临时文件路径;不要将该路径放入公开目录、日志目录或备份目录。
通过已核对主机身份的 SSH 连接进入 root 前台交互终端,然后执行下方的 `start` 命令。程序会绑定该启动进程和终端;不要加 `&`、`--no-block`,不要通过管道、重定向、定时任务或后台服务调用,也不要直接运行二进制。
校验码文件只用于人工读取,不属于配置数据。读取后不得复制到工单、聊天记录或日志中;密码重置成功后文件会立即销毁。
当前程序不接受命令参数,不从环境变量、文件或管道读取密码;旧的 `--code-output` 和 `/run/scert-admin/reset-code` 流程已经停用。
## 支持的生命周期控制
@ -21,26 +21,45 @@ systemctl start Scert-admin
systemctl stop Scert-admin
```
- `start`:生成一次性校验码,激活由 Web 管理域名或公网 IP 自动生成的 `/reset` 地址,并开始刷新短时租约。
- `stop`:立即使 `/reset` 入口失效;异常退出时,入口会在当前租约到期后自动失效。
- `start`:在调用者终端显示本机管理菜单,完成、取消或会话过期后退出。新启动必须重新验证本机身份。
- `stop`:在另一个已认证的管理员终端中停止本次交互。若已提交人工处置,停止终端不能证明远端没有执行,必须保留处置编号并查询。
- `restart`、`reload`、`try-restart` 等操作不属于 Scert-admin 的支持范围;单元不提供 `ExecReload`,且不配置自动重启。
- `enable` 不应使用:该单元没有 `[Install]` 段,因此不会注册开机启动目标。
- `daemon-reload` 仅允许由安装、升级程序在替换 unit 文件后执行,不属于日常服务控制命令。
## 超级管理员密码重置
1. 选择“重置超级管理员密码”,再确认向绑定邮箱发送验证码。
2. 从绑定邮箱取得八位验证码,在终端输入;输入不回显。
3. 输入新密码两次;当前策略为 8 到 12 个字符,包含字母和数字,输入不回显。
4. 主服务成功保存后提示重置成功,旧登录会话失效;使用新密码重新登录 Web。
发信使用系统配置的邮件服务;邮件失败、邮箱未绑定或会话过期时不得绕过验证,也不得直接修改数据库中的密码字段。验证码和密码不能写入聊天记录、工单、脚本、命令参数或日志。实际系统发信与完整重置仍需部署环境验收,源码测试不代替邮件送达证据。
## 部署事务核查与人工处置
主服务提供相应能力时,菜单还包含“只读核查部署事务”“人工处置部署事务”“查询人工处置结果”。
- 只读核查不修改原事务、远端文件或锁。
- 人工处置先输入事务编号,再选择“仅记录核查”“完成提交”或“恢复基线”。终端展示服务器、阶段、动作、有效期和风险,必须完整输入确认文字后才提交。
- “仅记录核查”不改变原事务终态;“完成提交”和“恢复基线”可能修改远端文件、清理事务备份或重载服务,不能相互替代,失败不会自动切换动作。
- 提交前保留显示的处置编号。断连、超时或响应不明确时重新启动终端,选择“查询人工处置结果”,输入处置编号而不是事务编号。
- `running` 或 `uncertain` 不是成功。查询不会重放动作、释放占用或删除远端锁;不得手动删锁、重写历史证据或直接修改事务终态来绕过阻塞。
## 安全限制说明
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` 两个日常控制入口。
3. 管理终端使用 root 读取显式启动者的终端;主服务仍使用非特权 `Scert` 用户运行。`PrivateNetwork=yes` 和 `RestrictAddressFamilies=AF_UNIX` 限制管理终端的网络能力,不应复制主服务的网络权限。
4. `Scert-admin` 不配置独立端口;不得为恢复功能开放公网或局域网端口。
5. 运维仅提供 `start`、`stop` 两个日常控制入口,不通过 Web 触发本机管理员操作。
6. 任何需要重新加载 unit 的行为仅限安装或升级阶段,不能通过 Web 管理界面触发。
7. 激活租约有效期为 90 秒,每 30 秒刷新;systemd 使用 `RuntimeMaxSec=30min` 将单次激活最长时间限制为 30 分钟。
8. 启动时生成的一次性校验码不会写入标准输出或 systemd 日志。校验码只写入受保护的临时文件;systemd 单元使用 `RuntimeDirectory=scert-admin` 和 `RuntimeDirectoryMode=0700`,文件权限为 `0600`,仅允许 `Scert` 用户和 root 读取。
7. 单元使用 `Type=oneshot`、`TimeoutStartSec=130s`;本机会话和一次性确认另有有效期限制,过期后必须重新核查,不能复用旧确认。
8. 主服务独立验证本机对端身份及协议;密码和邮箱验证码只在调用终端输入,不生成供人工读取的验证码文件。
这组限制可以避免服务因安装配置被纳入开机启动、避免服务自动反复拉起,并彻底取消独立密码重置监听端口。需要注意:`/reset` 与 Scert 主服务共享 HTTPS 端口,激活期间仍可能被外部访问,因此完整密码重置实现还必须校验一次性校验码、限制请求频率、单次消费校验码并记录审计日志。不能把拥有 root 权限的恶意操作者从 systemd 管理能力中排除。
这些约束不意味着能限制恶意 root 对主机的全部控制能力;它们保证产品提供的管理流程不依赖公网恢复入口、不自动启动或重放人工操作。不要通过取消 systemd 加固或扩大 Socket 权限解决失败。
## 安装阶段约定
@ -58,6 +77,6 @@ systemctl start Scert-admin
systemctl restart Scert-admin
```
安装完成后只提示管理员在确有需要时手动执行 `systemctl start Scert-admin`;不需要密码重置时保持服务停止,完成重置后立即执行 `systemctl stop Scert-admin`。
安装完成后仅提示管理员在确有需要时手动执行 `systemctl start Scert-admin`;平时保持停止,交互完成后程序自行退出。
当前实现已经接入一次性校验码、单次消费、密码复杂度校验、CSRF、同源校验、失败限流、配置原子保存和审计日志。密码重置成功后 `/reset` 立即关闭,Scert-admin 后续刷新旧租约也会自动终止。启动后请按终端提示,使用 root 或 `Scert` 用户读取受保护的临时校验码文件:`sudo cat /run/scert-admin/reset-code`。校验码在密码重置成功、服务停止或租约失效后自动销毁。
安装或升级验收应分别检查正式包来源、主服务运行身份、Unix Socket 权限、真实交互终端、拒绝后台及非授权调用、系统邮件送达和重置后的登录状态。部署人工处置还必须以实际 SSH 文件操作和 HTTPS 核验为证据,不能只根据服务退出码或测试夹具宣布生产通过。

View File

@ -1,5 +1,13 @@
# Linux 生产流程测试记录
## 2026年10月3日22:03 外部数据库整组终态
- [✓] 21:57 通过原 SSH 监控会话实查 `scert-external-disposition-20261003-2143.service`:MainPID=0、ActiveState=inactive、Result=success。
- [✓] 原日志 `/var/tmp/scert-local-recovery-20261003-1828/external-disposition.log` 中 `EXTERNAL_POSTGRES_EXIT`、`EXTERNAL_MYSQL_EXIT`、`EXTERNAL_SQLITE_REGRESSION_EXIT`、`EXTERNAL_VET_EXIT`、`EXTERNAL_FULL_EXIT` 均为 0。
- [✓] SQLite 执行器竞态约 5.519 秒,后端普通全量中的 HTTP 包约 44.928 秒;本组未清理生产数据库、未重启业务服务。
- [~] 正在修正实际发行运维说明,随后从干净提交构建 Linux 候选包;首次回环反代、系统邮件、真实 SSH/TLS 和完整生产验收尚未完成。
## 2026年10月3日21:48 外部数据库专项
- [✓] 21:41 实查 `scert-local-actions-fixed-20261003-2125.service` 已 inactive、MainPID=0、Result=success,`LOCAL_ACTIONS_FIXED_HTTP_FULL_RACE_EXIT=0`;HTTP 全包竞态约 393.752 秒,五项检查完整通过。

View File

@ -1,5 +1,12 @@
# Scert 开发任务清单
## 2026年10月3日22:03 当前开发进度
- [✓] 最新外部实库、SQLite 执行器竞态、静态检查及后端全量均完成,五项退出码零;不再重复启动该任务。
- [~] 修正实际发行文件中的旧管理员 Web 重置与不安全网络说明。
- [ ] 干净提交构建 Linux 候选包;正式终端、双机推送、系统邮件和三数据库首次 Web 仍需生产证据。
## 2026年10月3日21:48 当前开发进度
- [✓] 本机协议/终端接入的五项 Linux 回归全部正常结束;`0f2e6bf` 已提交推送。

View File

@ -1,5 +1,12 @@
# Scert 整改任务执行清单
## 2026年10月3日22:03 最新执行结论
- [✓] `scert-external-disposition-20261003-2143.service` 已结束:MainPID=0、inactive、Result=success,五项退出码零。
- [~] 本轮只修正 Linux 发行运维说明并准备正式包;公网只用 Nginx 80/443,管理恢复只走受保护本机通道。
- [ ] Linux 候选包及双机实际部署验收尚未完成;测试回归不替代生产验收。
## 2026年10月3日21:48 最新执行结论
- [✓] 本机接入整组 Linux 回归正常结束,五项退出码零;检查点 `0f2e6bf` 已推送。

View File

@ -1,5 +1,15 @@
# Scert 整改、合并与优化清单
## 2026年10月3日22:03 发行前收尾任务
沿用已确认的 Linux 上线范围;不处理 Windows,不反复检查磁盘,仅在实际不足时清理。本节优先于历史进度。
- [✓] 21:57 实查外部数据库整组任务已正常结束:PostgreSQL、MySQL、SQLite 竞态、静态检查和后端全量五项退出码均为零。
- [~] 修正发行包中的旧 Web 重置、验证码文件和放宽 TLS 的说明,使其与受保护本机终端及仅 Nginx 80/443 的边界一致。
- [ ] 从干净提交构建 Linux 候选包,核对源码提交、清单与归档哈希。
- [ ] 第一台正式安装及管理员交互,第二台真实推送、失败回滚与恢复;首次 Web、系统邮件和完整生产门禁仍未通过。
## 2026年10月3日21:48 实库与本机入口进度
- [✓] R3 本机接入修复版任务已正常结束,五项退出码零,HTTP 全包竞态约 393.752 秒;代码检查点 `0f2e6bf` 已推送。

View File

@ -128,16 +128,18 @@ linux-amd64/
```bash
chmod +x install-linux.sh scert scert-admin
sudo ./install-linux.sh --source-dir . --certificate-dir /ssl
sudo ./install-linux.sh --source-dir . --certificate-dir /ssl/scert
```
安装器不会自动启动服务,也不会创建公网防火墙或云安全组规则。首次安装还没有正式配置时,应先启动服务,再通过独立 Bootstrap HTTPS 页面初始化;不需要 Linux 图形界面。
安装器不会自动启动服务,也不会创建公网防火墙或云安全组规则。证书目录使用 Scert 专属子目录,不接管共享 `/ssl`。首次安装通过 Bootstrap HTTPS 页面初始化;本轮公网只使用 Nginx 的 `80/443`,内部服务从首次启动起保持回环监听。
默认初始化监听 `0.0.0.0:8080`。管理员应预先在主机防火墙和云安全组中只对受信任的管理来源放行该端口。如果已有端口占用,先设置 `SCERT_SERVER_PORT` 使用空闲端口。云主机公网 IP 不在本机网卡上时,先使用 `sudo systemctl edit Scert` 写入以下配置(示例 IP 必须替换为实际管理机 IP):
不得沿用默认公网监听或放行 `8080`。首次启动前使用 `sudo systemctl edit Scert` 写入以下配置;内部端口须确认空闲,并与向导最终配置及 Nginx 上游一致:
```ini
[Service]
Environment="SCERT_BOOTSTRAP_PUBLIC_IP=203.0.113.20"
Environment="SCERT_SERVER_HOST=127.0.0.1"
Environment="SCERT_SERVER_PORT=9004"
Environment="SCERT_BOOTSTRAP_FIREWALL_MODE=external"
```
`SCERT_BOOTSTRAP_PUBLIC_IP` 只决定临时初始化地址和证书的 IP,不会改变监听地址、云安全组或最终管理地址。命令行运行时对应参数是 `scert serve --bootstrap-public-ip <服务器公网IP>`。修改 systemd 配置后执行:
@ -150,15 +152,15 @@ sudo systemctl status Scert --no-pager -l
sudo cat /run/scert/bootstrap-url
```
通过可信运维通道读取并在浏览器打开完整 HTTPS 地址,不能只复制 IP 部分。链接片段包含短期一次性令牌;不要复制到日志、截图、工单或普通文档。地址文件仅允许服务用户和管理员读取,完成初始化或服务退出后会清理;令牌或会话过期时重启尚未初始化的服务再读取新地址,不要删除正式配置强制重新初始化。
受保护地址文件中的内部地址不是公网入口。应通过已经严格验证上游证书及名称的 Nginx 入口访问,浏览器端仍须验证正常域名及可信链;首次反代及切换正式证书尚需实机验证。链接片段包含短期一次性令牌,不要复制到日志、截图、工单或普通文档。地址文件仅允许服务用户和管理员读取,完成初始化或服务退出后会清理;不要删除正式配置强制重新初始化。
临时 HTTPS 使用自签名证书,不代表公共 CA 信任。浏览器首次打开裸 IP 地址时,应先查看证书详情,通过已核对 SSH 主机身份的运维连接或云控制台读取当前启动日志:
初始化上游使用临时自签名证书,不代表公共 CA 信任。建立限定用途的上游信任前,先通过已核对 SSH 主机身份的运维连接或云控制台读取当前启动日志:
```bash
sudo journalctl -u Scert -b -n 30 --no-pager
```
找到最新的 `Bootstrap 临时证书 SHA-256 指纹`,与浏览器证书详情的 SHA-256 指纹逐字比较(忽略显示分隔符和大小写)。必须一致才打开含一次性令牌的完整链接并填写敏感配置;不一致立即停止,不要输入 RAM 凭据或管理员密码。每次未初始化服务重启都会生成新证书,旧日志的指纹不能用于当前核对。指纹是公开证书摘要,日志不包含完整初始化链接、令牌或私钥。不得把“忽略证书警告”本身当作生产 TLS 验收;本轮仍缺少真实浏览器核对证据。
找到最新的 `Bootstrap 临时证书 SHA-256 指纹`,与回环上游实际证书的 SHA-256 指纹逐字比较;不一致立即停止,不得输入 RAM 凭据或管理员密码。核对后仍须保持 Nginx 上游的证书及名称验证,不能通过关闭 TLS 校验接通代理。每次未初始化服务重启都会生成新证书,旧日志的指纹不能用于当前核对。指纹是公开证书摘要,日志不包含完整初始化链接、令牌或私钥。上游核对不代替浏览器到 Nginx 的域名和公共信任验证。
向导依次配置管理员、存储、阿里云 RAM 与域名验证、通知和正式管理入口:
@ -168,13 +170,13 @@ sudo journalctl -u Scert -b -n 30 --no-pager
- 正式入口可选择域名或 IP;域名证书需要真实 DNS/ACME 验证,IP 入口当前为自签名证书。默认 ACME staging 证书也不受公共信任,不能当作 production 证书。
- 保存成功后,临时初始化服务撤销会话并关闭,再自动加载正式配置启动服务,页面转到返回的正式 HTTPS 地址,无需手工重启切换。
若首次端口与正式端口不同,应由管理员预先准备正式端口规则,确认切换后关闭不再需要的初始化端口。服务不会代替管理员修改云安全组。固定及动态生成的 Linux systemd unit 显式设置 `SCERT_BOOTSTRAP_FIREWALL_MODE=external`:不运行 UFW/firewalld 查询和写入命令,完成响应及运维日志明确提示端口尚未检查。管理员应在首次访问前按受信任来源放行所需端口;反向代理模式仅允许代理访问内部端口,不能为方便初始化而向公网开放内部端口。
首次与正式端口都只能监听回环;若端口不同,应同步准备 Nginx 上游切换,不新增公网放行规则。固定及动态生成的 Linux systemd unit 显式设置 `SCERT_BOOTSTRAP_FIREWALL_MODE=external`:不运行 UFW/firewalld 查询和写入命令,完成响应及运维日志明确提示端口尚未检查。服务不会代替管理员修改云安全组,不能为方便初始化而向公网开放内部端口。
直接执行 `scert serve` 默认仍为 `auto`,自动防火墙操作限时三十秒,权限错误必须中止初始化,不会因失败自动切换外部模式。使用外部策略时可显式传入 `--bootstrap-firewall-mode external`,参数优先于同名用途的 `SCERT_BOOTSTRAP_FIREWALL_MODE` 环境变量。策略只能由本机启动配置选择,不能由浏览器提交。2026-09-17 已通过非特权 systemd 的隔离 Bootstrap 启动与重启协议检查,正式初始化完成及公网可达性仍待验收,不得将整个 Scert 服务改成 root 或取消加固。
主服务地址族白名单必须包含 `AF_NETLINK`,用于 Go 读取本机网卡并生成临时证书;缺失时会出现 `netlinkrib: address family not supported by protocol`。保留空 capability 集,不需要授予 `CAP_NET_ADMIN`。此要求只适用于主服务,不得照搬到仅允许本地 IPC 的超级管理员恢复服务。
反向代理方案应在初始化完成后再应用第 5 节的回环监听配置;若预先设置 `SCERT_SERVER_HOST=127.0.0.1`,远程浏览器将无法直接访问 IP 初始化端口。`SCERT_SERVER_PORT` 等环境变量会持续覆盖向导保存的配置,应与最终选项一致。
回环监听必须在初始化前应用,远程浏览器只使用 Nginx 入口,不直连内部 IP 端口。`SCERT_SERVER_PORT` 等环境变量会持续覆盖向导保存的配置,应与最终选项一致。代理可信链尚未接通时必须先修复,不得退回公网直连。
上述是新版源码的预期安装流程,不代表本轮已构建发布包或完成 Linux systemd 实机验收。

View File

@ -1,5 +1,12 @@
# 部署事务人工处置设计
## 2026年10月3日22:03 回归完成与发行边界
- [✓] 新增实库测试后的 SQLite 竞态、静态检查和后端全量均通过;同组 PostgreSQL/MySQL 专项通过,任务已正常结束。
- [~] 发行说明同步当前本机交互设计:不提供 HTTP/TCP 恢复入口、不使用验证码文件,断连只能按处置编号查询,禁止重放或手动删锁。
- [ ] 正式 Linux 包、真实终端及双机文件和 HTTPS 验证仍属于待完成门禁。
## 2026年10月3日21:48 外部持久化证据
- [✓] 本机接入五项回归已全部通过,包括 HTTP 全包竞态。

View File

@ -1,5 +1,12 @@
# 部署事务人工核查任务清单
## 2026年10月3日22:03 本机处置回归终态
- [✓] R4 最新 PostgreSQL/MySQL 实库、SQLite 执行器竞态、静态检查及后端全量全部正常结束,五项退出码零。
- [~] R5 修正正式包管理员单元和操作说明中的旧网页重置流程,改为真实本机终端、邮箱验证、三动作及断连查询。
- [ ] R5 实际 systemd 交互和真实 SSH/TLS 动作尚未验证,不能把实库中的远端夹具记作生产通过。
## 2026年10月3日21:48 外部数据库复核
- [✓] R3-F/G/H 本机接入源码回归全部结束,HTTP 全包竞态通过;正式包入口尚待验证。