脚本库(NFOS Script Library)¶
本页由
deploy/nfos/scripts-index.json自动生成,请勿手工编辑;重新生成:python .scratch/build-script-index.py && python .scratch/build-docs-index.py。
0. 这个"脚本库"是什么¶
平台功能文档 docs/specs/spec-hub.txt 第 6 章把「脚本库」定义为资源仓库(hub.nfarms.cn)下的脚本托管能力:多语言脚本托管、在线编辑、沙箱预览、版本控制、安全评估。
本仓库落地时采用的是最小可用形态 A:文件清单 + 页面,而不是在 nfarmsd 里新加表与路由。理由:
- 线上 nfarmsd 没有
scripts/assets/registry一类表或路由(实测GET /api/hub/scripts= 404,GET /api/scripts= 404); - 选 B(加表 + 只读路由)需要重建并替换正在运行的二进制,属于额外风险;
- hub 站点的静态根就是
/opt/Cy/nfarms/hub,把脚本与scripts-index.json放进去天然与前端同源,下载无需新增接口。
因此:
| 层 | 位置 |
|---|---|
| 清单(生成物) | 仓库 deploy/nfos/scripts-index.json;线上 /opt/Cy/nfarms/hub/scripts/scripts-index.json |
| 脚本正文 | 仓库 deploy/nfos/**、deploy/nfos/tools/**、deploy/nfarms-scripts/**;线上 /opt/Cy/nfarms/hub/scripts/<basename> |
| 页面 | hub 站「脚本库」→ 仓库脚本(真实) 标签页(读同源清单,支持检索/分组/CSV/下载) |
| 备份 | 覆盖前把上一版 hub/scripts 归档到 /opt/Cy/nfarms/.backup/hub-scripts-prev-<ts>/ |
hub 站点整体有统一登录门禁(
auth_request /__auth),未登录访问/scripts/**返回 401 属预期。因此校验静态件一致性要看 sha256,不要看状态码 —— 该站location /含try_files $uri $uri/ /index.html的 SPA 回落。
1. 清单快照¶
| 项 | 值 |
|---|---|
| 生成时间 | 2026-09-28 08:06:58 +0800 |
| 脚本总数 | 138 |
| 元数据来源 | 人工核对源码 59 / 自动提取 79 |
| 生成器 | .scratch/build-script-index.py |
meta_source=auto的条目其「用途 / 入口参数 / 依赖」由脚本头部注释与import自动提取,未逐字人工核对,不作为参数依据。 需要参数时以脚本源码与本页的独立页面为准。
2. 脚本总览¶
列含义:触发方式 timer 表示由 systemd 定时器调度(括号内为定时器名),「手动」表示需人工执行;可 dry-run 表示提供 --dry-run/-n/只读模式;文档 指向独立用法页。
2.1 监控与通知(9)¶
| 脚本 | 用途 | 语言 | 入口参数 | 触发方式 | 需 root | 可 dry-run | 文档 |
|---|---|---|---|---|---|---|---|
告警桥接器deploy/nfos/monitoring/alert-adapter.py |
把 Alertmanager v4 webhook 载荷映射为 nfarmsd 统一告警 | python3 | alert-adapter.py(无 CLI 参数;监听地址与后端经 ADAPTER_LISTEN_HOST/PORT、NFARMSD_API 等环境变量) |
手动 | 否 | 否 | 有 |
告警地址计数增强deploy/nfos/monitoring/alert-enrich.py |
为告警 plan 补充来源/目的地址、公网标记与同类计数 | python3 | alert-enrich.py [--alerts-file |
手动 | 否 | 否 | 有 |
安全告警自动处置deploy/nfos/monitoring/auto-respond.py |
逐条评估安全告警并当场处置(封 IP / 杀进程 / 隔离载荷) | python3 | |
手动 | 是 | 是 | 有 |
双档告警汇总通报deploy/nfos/monitoring/digest.py |
按 1h/12h 双档窗口汇总告警并渲染通报,另支持四类专项日报 | python3 | digest.py [--window {1h,12h}] [--report {daily-alerts,attack,tickets,libs}] [--rolling] [--dry-run] [--selftest] |
timer:nfos-digest-hourly.timer、nfos-digest-12h.timer、nfos-report-attack.timer、nfos-report-daily-alerts.timer、nfos-report-libs.timer、nfos-report-tickets.timer |
是 | 是 | 有 |
统一通知渠道deploy/nfos/monitoring/notify.py |
把统一告警分发到飞书机器人与 SMTP 邮件(零第三方依赖) | python3 | notify.py [--test] # 无参时只打印渠道配置;主要用途是被同目录脚本 import |
timer:nfos-ticket-notify.timer |
否 | 否 | 有 |
出站文本脱敏deploy/nfos/monitoring/sanitize.py |
统一脱敏所有出站告警文本,且保留可研判判据 | python3 | sanitize.py [--selftest] [--text <文本>] [--stdin] [--file <文件>] [--json] |
手动 | 否 | 否 | 有 |
安全告警分发deploy/nfos/monitoring/sec-notify.py |
把安全告警按规则路由推送到飞书安全群与安全邮箱 | python3 | sec-notify.py --level {critical,high,warning,info} --name <名> [--resource <资源>] [--alarm-id |
手动 | 否 | 是 | 有 |
工单状态通知deploy/nfos/monitoring/ticket-notify.py |
轮询工单接口,对新开单与状态转变发送邮件/飞书通知 | python3 | ticket-notify.py [--api |
timer:nfos-ticket-notify.timer |
是 | 是 | 有 |
TimescaleDB 指标导出deploy/nfos/monitoring/timescale-metrics.sh |
导出 TimescaleDB 分区/压缩/连续聚合/保留策略指标供 textfile 采集 | bash | timescale-metrics.sh(无参数) |
手动 | 是 | 否 | — |
2.2 运维与安全(97)¶
| 脚本 | 用途 | 语言 | 入口参数 | 触发方式 | 需 root | 可 dry-run | 文档 |
|---|---|---|---|---|---|---|---|
超管口令轮换deploy/nfos/admin-password-rotate.sh |
按日期规则派生超管口令并经接口自动轮换 | bash | admin-password-rotate.sh [--status] [--dry-run] [--force] [--for |
timer:nfos-admin-password.timer |
是 | 是 | — |
云安全告警处置deploy/nfos/aegis-whitelist.sh |
处置云安全中心告警:列表/详情/加白(误报)/忽略/已处理 | bash | aegis-whitelist.sh {check|list|get |
手动 | 是 | 否 | — |
告警链路自检deploy/nfos/alert-selftest.sh |
每日自检告警全链路(7 项)并维护死信开关心跳 | bash | bash alert-selftest.sh [--quiet] [--json] [--no-inject] [--timeout=N] [-h|--help] |
timer:nfos-alert-selftest.timer |
是 | 否 | — |
陈旧告警回收deploy/nfos/alert-sweep.py |
回收守卫已不再跟踪的孤儿安全告警,解除告警数阈值卡死 | python3 | alert-sweep.py [--apply] [--dry-run] [--grace N] [--max N] [--db <库>] [--state <文件>] [--log <文件>] [--api |
timer:nfos-alert-sweep.timer |
是 | 是 | 有 |
每日备份deploy/nfos/backup-daily.sh |
每日备份日志/配置/数据库到本地并按校验清单自检 | bash | sudo bash backup-daily.sh [--dry-run|-n] [--keep N] [--no-secondary] [--help|-h] |
timer:nfos-backup.timer |
是 | 是 | 有 |
证书自动续期deploy/nfos/cert-renew.sh |
用 acme.sh + HTTP-01 为 9 个域名签发/续期并部署证书 | bash | bash cert-renew.sh {check|staging|issue|renew|install-timer|rollback <备份目录>} |
手动 | 是 | 否 | — |
证书同步与告警deploy/nfos/cert-sync.sh |
扫描权威证书目录,登记证书并按规则生成/恢复安全告警 | bash | sudo bash cert-sync.sh [--quiet] [--dry-run|-n] [--force-report] [--no-fix-cert-dir] |
手动 | 是 | 是 | — |
告警链路体检deploy/nfos/check-pipeline.sh |
按六道关逐项判断告警/MQ 链路当前是否可信任 | bash | sudo bash check-pipeline.sh [--json] |
手动 | 是 | 否 | 有 |
冗余残留清理deploy/nfos/cleanup-obsolete.sh |
清理 NFOS 合并后的冗余残留并修复 nginx 日志轮转配置 | bash | bash cleanup-obsolete.sh [--dry-run|-n] [-h|--help] |
手动 | 是 | 是 | — |
var/tmp 残留清理deploy/nfos/cleanup-vartmp.sh |
清理 /var/tmp 构建/冒烟残留并清理 dnf 缓存 | bash | bash cleanup-vartmp.sh(无参数) |
手动 | 是 | 否 | — |
deploy-auth-backend.shdeploy/nfos/deploy-auth-backend.sh |
部署带统一登录端点的 nfarmsd,并逐个验证新端点 | bash | deploy-auth-backend.sh |
手动 | — | — | — |
deploy-frontend-empty-page-fix.template.shdeploy/nfos/deploy-frontend-empty-page-fix.template.sh |
修复"整站没有可见页面"(前端各平台无内容)—— 部署已重排脚本顺序的 index.html、 | bash | deploy-frontend-empty-page-fix.template.sh |
手动 | — | — | — |
deploy-frontend-login-fix.template.shdeploy/nfos/deploy-frontend-login-fix.template.sh |
前端登录页布局塌陷修复:部署 nf.css(含 .nf-app-login 覆盖)与带版本参数的 HTML | bash | deploy-frontend-login-fix.template.sh |
手动 | — | — | — |
nfarmsd 二进制部署deploy/nfos/deploy-nfarmsd-binary.sh |
部署 nfarmsd 二进制,带备份/回滚与逐项接口验收 | bash | sudo bash deploy-nfarmsd-binary.sh(无参数) |
手动 | 是 | 否 | — |
乱码根因排查deploy/nfos/diag-mojibake.sh |
排查乱码根因:非法 UTF-8 与双重编码(UTF-8 字节被当 GBK 解码) | bash | bash diag-mojibake.sh(无参数) |
手动 | 否 | 否 | — |
fix-alerts-primary.shdeploy/nfos/fix-alerts-primary.sh |
消除四条活动告警的根因修复(主节点侧) | bash | fix-alerts-primary.sh |
手动 | — | — | — |
fix-alerts-secondary.shdeploy/nfos/fix-alerts-secondary.sh |
消除 SiteResponseSlow / 自检两条告警的根因修复(次节点侧) | bash | fix-alerts-secondary.sh |
手动 | — | — | — |
放行站点图标deploy/nfos/fix-favicon-auth.py |
给 /favicon.ico 加精确匹配 location,使其不参与统一登录门禁 | python3 | sudo python3 fix-favicon-auth.py [--check] |
手动 | 是 | 否 | — |
官网图标修复deploy/nfos/fix-favicon.sh |
修复官网 favicon 404:把可用的 png 放到引用路径并改引用 | bash | sudo bash fix-favicon.sh(无参数) |
手动 | 是 | 否 | — |
nginx charset 修复deploy/nfos/fix-nginx-charset.sh |
让 .js/.css/.json 响应显式带 charset=utf-8,消除前端乱码 | bash | sudo bash fix-nginx-charset.sh(无参数) |
手动 | 是 | 否 | — |
fix-secondary-nginx-logs.shdeploy/nfos/fix-secondary-nginx-logs.sh |
次节点 nginx 日志路径修复(真实缺陷) | bash | fix-secondary-nginx-logs.sh |
手动 | — | — | — |
fix-secondary-nginx-root.shdeploy/nfos/fix-secondary-nginx-root.sh |
次节点 nginx catch-all 收尾 | bash | fix-secondary-nginx-root.sh |
手动 | — | — | — |
前端全量部署deploy/nfos/full-frontend-deploy.sh |
前端全量部署:MCP SPA 补齐 + 统一登录页 + 门禁感知校验 | bash | sudo bash full-frontend-deploy.sh |
手动 | 是 | 否 | — |
gen-embed.ps1deploy/nfos/gen-embed.ps1 |
gen-embed.ps1 -- expand "#EMBEDS" in a template bash script into base64 payload writes. | powershell | & .scratch\gen-embed.ps1 -Template .scratch\x.template.sh -Out .scratch\x.sh ` |
手动 | — | — | — |
WAF 配置生成deploy/nfos/gen-waf-from-libs.py |
从 signature-library.yml 生成 nginx 原生 WAF 拦截配置 | python3 | gen-waf-from-libs.py [--apply] [--mode {log,block}] [--wire] [--dry-wire] |
手动 | 是 | 是 | — |
账户页面路由安装deploy/nfos/install-account-pages.sh |
安装统一登录页与个人主页 nginx 路由(v3) | bash | sudo bash install-account-pages.sh(无参数) |
手动 | 是 | 否 | — |
证书运维授权deploy/nfos/install-cert-ops-sudoers.sh |
给 nfarms 服务账户授予证书运维脚本的免密 sudo 规则 | bash | sudo bash install-cert-ops-sudoers.sh(无参数) |
手动 | 是 | 否 | — |
证书审计定时器安装deploy/nfos/install-cert-sync-timer.sh |
安装证书每日审计与安全告警的 systemd 单元 | bash | sudo bash install-cert-sync-timer.sh(无参数) |
手动 | 是 | 否 | — |
汇总定时器安装deploy/nfos/install-digest-timers.sh |
安装 sanitize/digest 脚本与每小时、12 小时汇总定时器 | bash | sudo bash install-digest-timers.sh [--from-dir <目录>] [--dry-run] [--rollback] |
手动 | 是 | 是 | — |
登录页路由安装deploy/nfos/install-login-page.sh |
安装统一登录页 nginx 路由(v2,带“确实写进去了”自校) | bash | sudo bash install-login-page.sh(无参数) |
手动 | 是 | 否 | — |
logrotate 调度安装deploy/nfos/install-logrotate-timer.sh |
补齐主节点 logrotate 的 systemd 调度(此前完全没有调度) | bash | sudo bash install-logrotate-timer.sh(无参数) |
手动 | 是 | 否 | — |
互监测告警规则安装deploy/nfos/install-mutual-alerts.sh |
向次节点 Prometheus 追加 nfos_probe_* 互监测告警规则 | bash | sudo bash install-mutual-alerts.sh(无参数;在次节点执行) |
手动 | 是 | 否 | — |
互监测探针安装deploy/nfos/install-probe.sh |
安装并首跑互监测探针(主/次节点同款) | bash | sudo bash install-probe.sh(无参数) |
手动 | 是 | 否 | — |
探针采集作业安装deploy/nfos/install-prometheus-probe-job.sh |
安装含 nfos_probe 采集作业的 prometheus.yml 并 reload | bash | sudo bash install-prometheus-probe-job.sh(无参数) |
手动 | 是 | 否 | — |
安全控制台落盘deploy/nfos/install-security-console.template.sh |
落盘安全防线控制台组件(三库写入口/云告警处置/令牌) | bash | sudo bash install-security-console.template.sh(无参数) |
手动 | 是 | 否 | — |
安全防线安装deploy/nfos/install-security-guard.sh |
安装三库、检测引擎、每分钟 timer 与审计加固 | bash | sudo bash install-security-guard.sh(无参数) |
手动 | 是 | 否 | — |
时间源安装deploy/nfos/install-time-service.py |
让主节点对外提供 HTTPS 对时端点与 chrony NTP 服务 | python3 | sudo python3 install-time-service.py [--check] [--no-ntp] |
手动 | 是 | 否 | — |
统一登录门禁安装deploy/nfos/install-unified-login.sh |
给受保护站点 443 server 加 nginx 服务端统一登录门禁 | bash | sudo bash install-unified-login.sh(无参数) |
手动 | 是 | 否 | — |
三库运维助手deploy/nfos/lib-ops.sh |
特征/规则/模板三库的唯一写入口,经 stdin JSON 读写校验与同步 | bash | lib-ops.sh [--check-sqlite|--sync-sqlite] # 库操作经 stdin JSON:summary/read/get/validate/create/update/delete/policy_update/apply/rollback |
手动 | 是 | 否 | 有 |
系统日志异常审计deploy/nfos/log-audit.py |
每日审计系统日志异常(OOM/IO/崩溃/爆破等)并上报安全告警 | python3 | log-audit.py [--since ' |
timer:nfos-log-audit.timer |
是 | 是 | 有 |
三库迁移 SQLitedeploy/nfos/migrate-libs-to-sqlite.py |
把三库与全局策略从 YAML 迁移到 SQLite 并独立校验幂等 | python3 | migrate-libs-to-sqlite.py [--libs-dir <目录>] [--db <库>] [--lib-ops <脚本>] [--expect <基线>] [--strict] [--check] [--once] |
手动 | 是 | 否 | 有 |
phase-r1-reorg.shdeploy/nfos/phase-r1-reorg.sh |
NFarms 主节点目录规范重构(Phase R1) | bash | phase-r1-reorg.sh |
手动 | — | — | — |
phase-r2-nginx.shdeploy/nfos/phase-r2-nginx.sh |
NFarms 主节点 Nginx 配置生成(Phase R2) | bash | phase-r2-nginx.sh |
手动 | — | — | — |
phase10-acme-patch.pydeploy/nfos/phase10-acme-patch.py |
为缺少 ACME 挑战 location 的 80 端口 server 块补齐 HTTP-01 支持。 | python3 | phase10-acme-patch.py |
手动 | — | — | — |
phase10-acme-patch2.pydeploy/nfos/phase10-acme-patch2.py |
为缺少 ACME HTTP-01 支持的 80 端口 server 块补齐校验路径(修正版)。 | python3 | phase10-acme-patch2.py |
手动 | — | — | — |
phase10-nginx-auth-hardening.shdeploy/nfos/phase10-nginx-auth-hardening.sh |
NFOS Phase 10:公开入口零信任身份头清洗(高危漏洞修复) | bash | phase10-nginx-auth-hardening.sh |
手动 | — | — | — |
phase11-ai-engine.shdeploy/nfos/phase11-ai-engine.sh |
NFOS 落地 Phase 11 — AI 分析引擎部署与验收(次节点) | bash | phase11-ai-engine.sh |
手动 | — | — | — |
phase11-dir-hygiene.shdeploy/nfos/phase11-dir-hygiene.sh |
NFOS Phase 11:目录与日志归位(主节点) | bash | phase11-dir-hygiene.sh <子命令>(见脚本内 usage) |
手动 | — | — | — |
phase11b-secondary-hygiene.shdeploy/nfos/phase11b-secondary-hygiene.sh |
NFOS Phase 11b:次节点目录与日志归位 | bash | phase11b-secondary-hygiene.sh |
手动 | — | — | — |
证书统一归位deploy/nfos/phase12-cert-consolidate.sh |
把全部证书/私钥/acme 库/备份收敛到单一权威目录 /opt/Cy/certs | bash | sudo bash phase12-cert-consolidate.sh [--dry-run|-n] |
手动 | 是 | 是 | — |
phase12-notification.shdeploy/nfos/phase12-notification.sh |
NFarms 统一通知渠道落地(次节点) | bash | phase12-notification.sh |
手动 | — | — | — |
文档发布知识库deploy/nfos/phase12b-publish-docs.sh |
把脱敏版《核心通知渠道文档》发布到公开知识库 | bash | sudo bash phase12b-publish-docs.sh(无参数) |
手动 | 是 | 否 | — |
phase14-alert-selftest-install.shdeploy/nfos/phase14-alert-selftest-install.sh |
NFOS Phase 14 — 告警链路自检看门狗安装(幂等) | bash | phase14-alert-selftest-install.sh <子命令>(见脚本内 usage) |
手动 | — | — | — |
phase2-data-layer.shdeploy/nfos/phase2-data-layer.sh |
NFOS 落地 Phase 2 — 数据层部署(腾讯云次节点) | bash | phase2-data-layer.sh |
手动 | — | — | — |
phase2b-verify.shdeploy/nfos/phase2b-verify.sh |
NFOS 落地 Phase 2b — 修正 HealthCmd 引号 + 数据层完整验收 | bash | phase2b-verify.sh |
手动 | — | — | — |
phase2c-nats-verify.shdeploy/nfos/phase2c-nats-verify.sh |
NFOS 落地 Phase 2c — NATS 参数修正 + 数据层端到端验收 | bash | phase2c-nats-verify.sh |
手动 | — | — | — |
phase5a-desktop-teardown.shdeploy/nfos/phase5a-desktop-teardown.sh |
NFOS 落地 Phase 5a — 次节点桌面负载下线(释放约 1.6G 内存) | bash | phase5a-desktop-teardown.sh |
手动 | — | — | — |
phase5b-health-and-tuning.shdeploy/nfos/phase5b-health-and-tuning.sh |
NFOS 落地 Phase 5b — 修复容器 healthcheck + 按 docs 恢复 TimescaleDB 内存调优 | bash | phase5b-health-and-tuning.sh |
手动 | — | — | — |
nfarmsd 服务层部署deploy/nfos/phase6-nfarmsd-deploy.sh |
Phase 6 nfarmsd 服务层部署(端口/单元/账号/布局对齐) | bash | sudo bash phase6-nfarmsd-deploy.sh(无参数) |
手动 | 是 | 否 | — |
phase7-nginx-align.pydeploy/nfos/phase7-nginx-align.py |
NFOS 接口层对齐:把主节点 nginx 反代从遗留的 8080 切到规范端口 9990/9991。 | python3 | phase7-nginx-align.py |
手动 | — | — | — |
phase7-nginx-align.shdeploy/nfos/phase7-nginx-align.sh |
NFOS 落地 Phase 7 — 接口层对齐(主节点) | bash | phase7-nginx-align.sh |
手动 | — | — | — |
phase7b-nfarmsd-verify.shdeploy/nfos/phase7b-nfarmsd-verify.sh |
NFOS 落地 — nfarmsd 完整验收(含零信任 RBAC 越权反例) | bash | phase7b-nfarmsd-verify.sh |
手动 | — | — | — |
phase7c-vpn-gateway-test.pydeploy/nfos/phase7c-vpn-gateway-test.py |
NFOS 零信任 VPN 网关实测(vpn-Modules 认证骨架) | python3 | phase7c-vpn-gateway-test.py |
手动 | — | — | — |
phase8a-monitor-tunnel.shdeploy/nfos/phase8a-monitor-tunnel.sh |
NFOS 落地 Phase 8a — 监控反向隧道(次节点 → 主节点) | bash | phase8a-monitor-tunnel.sh |
手动 | — | — | — |
phase8b-monitoring.shdeploy/nfos/phase8b-monitoring.sh |
NFOS 落地 Phase 8b — 监控层部署(次节点 43.156.170.157) | bash | phase8b-monitoring.sh |
手动 | — | — | — |
phase8c-aliyun-node-exporter.shdeploy/nfos/phase8c-aliyun-node-exporter.sh |
NFOS 落地 Phase 8c — 主节点 node_exporter(Quadlet)+ 监控隧道扩展到 9100 | bash | phase8c-aliyun-node-exporter.sh |
手动 | — | — | — |
phase8d-monitoring-verify.shdeploy/nfos/phase8d-monitoring-verify.sh |
NFOS 落地 Phase 8d — 消除 9100 端口冲突 + 监控层端到端验收 | bash | phase8d-monitoring-verify.sh |
手动 | — | — | — |
phase8e-monitoring-fix.shdeploy/nfos/phase8e-monitoring-fix.sh |
NFOS 落地 Phase 8e — 修正容器内可达性 + 桥接器 bug + 端到端复验 | bash | phase8e-monitoring-fix.sh |
手动 | — | — | — |
phase8f-monitoring-finalize.shdeploy/nfos/phase8f-monitoring-finalize.sh |
NFOS 落地 Phase 8f — 收口修正并完成监控层端到端验收 | bash | phase8f-monitoring-finalize.sh |
手动 | — | — | — |
phase9-standby-channel.shdeploy/nfos/phase9-standby-channel.sh |
NFOS 落地 Phase 9 — 高可用:次节点同构 standby 通道(容器化) | bash | phase9-standby-channel.sh |
手动 | — | — | — |
phase9-tunnel-hardening.shdeploy/nfos/phase9-tunnel-hardening.sh |
NFOS Phase 9:跨云链路与告警误报加固 | bash | phase9-tunnel-hardening.sh <子命令>(见脚本内 usage) |
手动 | — | — | — |
phase9b-standby-verify.shdeploy/nfos/phase9b-standby-verify.sh |
NFOS 落地 Phase 9b — standby 通道收口 + 跨通道 HA 验证 | bash | phase9b-standby-verify.sh |
手动 | — | — | — |
phase9c-cross-channel.shdeploy/nfos/phase9c-cross-channel.sh |
NFOS 落地 Phase 9c — 跨通道 HA 正确验证 + standby 口令对齐 | bash | phase9c-cross-channel.sh |
手动 | — | — | — |
phase9d-finalize.shdeploy/nfos/phase9d-finalize.sh |
NFOS 落地 Phase 9d — standby 口令对齐 + 验收数据清理 + 最终状态固化 | bash | phase9d-finalize.sh |
手动 | — | — | — |
互监测探针deploy/nfos/probe-node.sh |
主次节点互相探测各服务存活并输出 Prometheus 指标 | bash | probe-node.sh [--quiet] |
手动 | 是 | 否 | — |
版本发布物收集deploy/nfos/release-collect.sh |
收集可交付、可校验且不含凭据的版本快照到主节点本地 | bash | sudo bash release-collect.sh [ |
手动 | 是 | 是 | — |
安全检测引擎deploy/nfos/security-guard.sh |
读三库执行安全检测,上报统一告警并串联自动处置 | bash | security-guard.sh [--dry-run] [--verbose|-v] [--baseline] [--forensics |
手动 | 是 | 是 | — |
证书告警链实测deploy/nfos/test-cert-alert-chain.sh |
投放自签探针证书,实测证书告警到自动恢复的链路 | bash | bash test-cert-alert-chain.sh(无参数) |
手动 | 是 | 否 | — |
安全检出正向实测deploy/nfos/test-security-detection.sh |
受控投放真实威胁形态,验证特征库到工单恢复全链路 | bash | bash test-security-detection.sh(无参数) |
手动 | 是 | 否 | — |
传感器系统实测deploy/nfos/test-sensor-system.sh |
传感器探测系统实测 v2(每步硬超时,避免整体卡死) | bash | bash test-sensor-system.sh(无参数) |
手动 | 是 | 否 | — |
工单积压核销deploy/nfos/ticket-cleanup.py |
按证据批量核销历史积压工单,并保留可回滚清单 | python3 | ticket-cleanup.py [--db <库>] [--apply] [--dry-run] [--rollback |
手动 | 是 | 是 | 有 |
备份链路实测deploy/nfos/verify-backup-e2e.sh |
直接触发备份单元并验证三类归档真的产出 | bash | bash verify-backup-e2e.sh(无参数) |
手动 | 是 | 否 | — |
证书运维验收deploy/nfos/verify-cert-ops.sh |
验收控制台证书按钮:按名调用、权限反例与幂等复核 | bash | bash verify-cert-ops.sh(无参数) |
手动 | 否 | 否 | — |
通知渠道验证deploy/nfos/verify-notification-channels.py |
验证 SMTP/飞书渠道连通性与发信凭据并实发测试邮件 | python3 | python3 verify-notification-channels.py(无 CLI 参数;凭据与收件人经 SMTP_HOST/MAIL_PW/FEISHU_HOOK/TRAP_TO/TRAP_CC/SEND_TEST_MAIL 环境变量) |
手动 | 否 | 否 | — |
verify-objective-final-secondary.shdeploy/nfos/verify-objective-final-secondary.sh |
目标总验收 —— 次节点侧(互补主节点脚本无法覆盖的部分) | bash | verify-objective-final-secondary.sh |
手动 | — | — | — |
verify-objective-final.shdeploy/nfos/verify-objective-final.sh |
目标总验收:互监测 / 传感器系统 / 八站点 / 统一登录 | bash | verify-objective-final.sh |
手动 | — | — | — |
verify-platform-final.shdeploy/nfos/verify-platform-final.sh |
平台终检:online / console 管理能力 + 计时器编排 + 唯一目录 + 备份 | bash | verify-platform-final.sh |
手动 | — | — | — |
verify-print-agent-e2e.shdeploy/nfos/verify-print-agent-e2e.sh |
打印代理端到端验收(真平台 + 真渲染 + 真落盘) | bash | verify-print-agent-e2e.sh |
手动 | — | — | — |
verify-print-jobs.shdeploy/nfos/verify-print-jobs.sh |
打印任务队列(标签纸 / 小票)功能验收 | bash | verify-print-jobs.sh |
手动 | — | — | — |
公网API验收deploy/nfos/verify-public-api.sh |
经 nginx 公网路径(https://nfarms.cn/api/*)验收本轮新接口 | bash | bash verify-public-api.sh(无参数) |
手动 | 是 | 否 | — |
verify-r7-functional.shdeploy/nfos/verify-r7-functional.sh |
功能验收:账户自助(注册/个人主页/2FA)+ 三库管理 + 云安全事件接入 | bash | verify-r7-functional.sh |
手动 | — | — | — |
verify-resource-charset.shdeploy/nfos/verify-resource-charset.sh |
终验:带会话按"浏览器视角"取各平台首页与其首个 JS,检查 charset 声明与中文解码 | bash | verify-resource-charset.sh |
手动 | — | — | — |
verify-round5-final.shdeploy/nfos/verify-round5-final.sh |
本轮总验收:互监测 / 统一登录 / 安全防线 / 平台站点 | bash | verify-round5-final.sh |
手动 | — | — | — |
verify-secondary.shdeploy/nfos/verify-secondary.sh |
次节点对照核查:证书唯一目录 / 日志唯一目录 / 新增计时器连通性 | bash | verify-secondary.sh |
手动 | — | — | — |
站点入口验收deploy/nfos/verify-sites.sh |
对 9 个站点走真实 HTTPS 验收入口/证书/资源/反代 | bash | bash verify-sites.sh(无参数) |
手动 | 是 | 否 | — |
工单模板渲染验证deploy/nfos/verify-waf-templates.sh |
临时注入扫描日志验证工单模板渲染,验证后立即删除注入行 | bash | bash verify-waf-templates.sh(无参数) |
手动 | 是 | 否 | — |
WAF 上线终检deploy/nfos/verify-waf.sh |
WAF 上线终检:模式/配置/拦截/日志/库/工单 | bash | bash verify-waf.sh(无参数) |
手动 | 是 | 否 | — |
2.3 可复用工具(本仓库 tools/)(17)¶
| 脚本 | 用途 | 语言 | 入口参数 | 触发方式 | 需 root | 可 dry-run | 文档 |
|---|---|---|---|---|---|---|---|
alert-enrich-test.pydeploy/nfos/tools/alert-enrich-test.py |
alert-enrich.py 离线自测(不联网、不写盘、不需要 root)。 | python3 | alert-enrich-test.py |
手动 | — | — | 有 |
ar-local-matrix.pydeploy/nfos/tools/ar-local-matrix.py |
auto-respond.py 离线干跑矩阵(本地 Windows/Linux 均可跑,纯评估不动系统)。 | python3 | ar-local-matrix.py |
手动 | — | — | 有 |
check-guard-core.pydeploy/nfos/tools/check-guard-core.py |
抽出 security-guard.sh 里 heredoc 的 Python 核心,做语法自检(py_compile)。 | python3 | check-guard-core.py |
手动 | — | — | 有 |
fix-lib-yaml.pydeploy/nfos/tools/fix-lib-yaml.py |
修复三库 YAML 里的"双引号标量非法转义"(正则里的 [ ] ( 等)。 | python3 | fix-lib-yaml.py |
手动 | — | — | 有 |
ispublicip-test.jsdeploy/nfos/tools/ispublicip-test.js |
— | text | ispublicip-test.js |
手动 | — | — | 有 |
log-audit-report-test.pydeploy/nfos/tools/log-audit-report-test.py |
log-audit.py 的离线自测(不联网、不调 journalctl、不需要 root): | python3 | log-audit-report-test.py |
手动 | — | — | 有 |
mock-oidc.pydeploy/nfos/tools/mock-oidc.py |
Local mock OAuth 2.0 / OIDC provider for verifying the nfarmsd OAuth client chain. | python3 | mock-oidc.py |
手动 | — | — | 有 |
scan-py-snippets.pydeploy/nfos/tools/scan-py-snippets.py |
扫描 shell 脚本里内嵌的 Python 片段,找出"用了却没 import/定义"的名字。 | python3 | scan-py-snippets.py |
手动 | — | — | 有 |
scan-secrets.pydeploy/nfos/tools/scan-secrets.py |
扫描仓库里是否残留"真实机密明文"(口令/webhook/secret/token)。 | python3 | scan-secrets.py |
手动 | — | — | 有 |
test-waf-wire.pydeploy/nfos/tools/test-waf-wire.py |
离线自测 gen-waf-from-libs.py 的接线逻辑(花括号配对 + 历史命名修复 + 幂等)。 | python3 | test-waf-wire.py |
手动 | — | — | 有 |
ui-audit.pydeploy/nfos/tools/ui-audit.py |
ui-audit.py —— NFarms 前端「显示完整性」审计器(本地静态,无需浏览器)。 | python3 | ui-audit.py [--css] [--no-lint] [--out] |
手动 | — | — | 有 |
ui-coverage.pydeploy/nfos/tools/ui-coverage.py |
ui-coverage.py —— 「长内容页用到的类 → 命中哪条显示完整性规则」逐条核对。 | python3 | ui-coverage.py [--css] [--out] [--pages] |
手动 | — | — | 有 |
ui-delta.pydeploy/nfos/tools/ui-delta.py |
ui-delta.py —— 「显示完整性」改动前后对比(工具版本无关)。 | python3 | ui-delta.py [--base] [--cur] [--out] |
手动 | — | — | 有 |
ui-js-refs.pydeploy/nfos/tools/ui-js-refs.py |
ui-js-refs.py —— 扫描全部前端 JS 引用到的「类名 / CSS 变量」,核对候选 CSS 是否已定义。 | python3 | ui-js-refs.py [--css] [--out] |
手动 | — | — | 有 |
ui-keyrules.pydeploy/nfos/tools/ui-keyrules.py |
ui-keyrules.py —— 输出"关键类最终生效的显示完整性声明"(含 @media 上下文)。 | python3 | ui-keyrules.py [--css] [--out] |
手动 | — | — | 有 |
ui-metrics.pydeploy/nfos/tools/ui-metrics.py |
ui-metrics.py —— 候选 A / 并发版 / 基线 的关键指标对照表(注释剥离后统计)。 | python3 | ui-metrics.py [--base] [--cand] [--other] [--out] |
手动 | — | — | 有 |
verify-page-runtime.mjsdeploy/nfos/tools/verify-page-runtime.mjs |
— | text | verify-page-runtime.mjs |
手动 | — | — | 有 |
2.4 测试(1)¶
| 脚本 | 用途 | 语言 | 入口参数 | 触发方式 | 需 root | 可 dry-run | 文档 |
|---|---|---|---|---|---|---|---|
test-waf-generator.pydeploy/nfos/tests/test-waf-generator.py |
离线自测 gen-waf-from-libs.py 的接线逻辑(花括号配对 + 历史命名修复 + 幂等)。 | python3 | test-waf-generator.py |
手动 | — | — | — |
2.5 健康检查(2)¶
| 脚本 | 用途 | 语言 | 入口参数 | 触发方式 | 需 root | 可 dry-run | 文档 |
|---|---|---|---|---|---|---|---|
nats-health.shdeploy/nfos/health/nats-health.sh |
NFOS NATS 容器健康检查(挂载进容器,避免 Quadlet 多词参数的引号问题) | bash | nats-health.sh |
手动 | — | — | — |
tsdb-health.shdeploy/nfos/health/tsdb-health.sh |
NFOS TimescaleDB 容器健康检查(挂载进容器,避免 Quadlet 多词参数的引号问题) | bash | tsdb-health.sh |
手动 | — | — | — |
2.6 引导安装(12)¶
| 脚本 | 用途 | 语言 | 入口参数 | 触发方式 | 需 root | 可 dry-run | 文档 |
|---|---|---|---|---|---|---|---|
00-directories.shdeploy/nfarms-scripts/00-directories.sh |
NFarms deploy - 00 : create the whole directory tree | bash | 00-directories.sh |
手动 | — | — | — |
10-nginx.shdeploy/nfarms-scripts/10-nginx.sh |
— | bash | 10-nginx.sh |
手动 | — | — | — |
20-frontend.shdeploy/nfarms-scripts/20-frontend.sh |
NFarms deploy - 20 : frontend (nfarms web sites) + hub resources | bash | 20-frontend.sh |
手动 | — | — | — |
30-backend.shdeploy/nfarms-scripts/30-backend.sh |
— | bash | 30-backend.sh |
手动 | — | — | — |
40-certs.shdeploy/nfarms-scripts/40-certs.sh |
NFarms deploy - 40 : certificates import & generation | bash | 40-certs.sh <子命令>(见脚本内 usage) |
手动 | — | — | — |
backup-aliyun.shdeploy/nfarms-scripts/backup-aliyun.sh |
NFarms backup - Aliyun Drive (阿里云盘) token backup | bash | alarm |
手动 | — | — | — |
common.shdeploy/nfarms-scripts/common.sh |
NFarms deploy - common paths & helpers | bash | common.sh |
手动 | — | — | — |
deploy-all.shdeploy/nfarms-scripts/deploy-all.sh |
NFarms deploy - deploy-all : 一键按序执行全部部署脚本 | bash | deploy-all.sh <子命令>(见脚本内 usage) |
手动 | — | — | — |
wg-debug.shdeploy/nfarms-scripts/wg-debug.sh |
— | bash | wg-debug.sh |
手动 | — | — | — |
wg-setup.shdeploy/nfarms-scripts/wg-setup.sh |
standby server WireGuard server setup (executed on remote via stdin) | bash | wg-setup.sh |
手动 | — | — | — |
wg-status-install.shdeploy/nfarms-scripts/wg-status-install.sh |
Standby server: install wg-status refresh timer + nginx wg location | bash | wg-status-install.sh |
手动 | — | — | — |
wg-status.shdeploy/nfarms-scripts/wg-status.sh |
Standby server: WireGuard tunnel status -> JSON for frontend visualization | bash | wg-status.sh |
手动 | — | — | — |
3. 定时器¶
全部 17 个已安装 timer(含 OnCalendar、ExecStart 逐字参数、幂等键与备份位置)见 定时器一览。
4. 在 HUB 里取用¶
- 登录后打开
https://hub.nfarms.cn/; - 左侧「资源库 → 脚本库」,默认标签页就是 仓库脚本(真实);
- 支持按名称/用途/路径/定时器检索、按分组过滤、导出 CSV;
- 行内「下载」直接取同源静态件
scripts/<basename>,「详情」显示依赖、幂等、会写入什么、sha256与最后改动时间。
命令行取用(等价):
# 按清单里的 sha256 校验下载到的脚本
curl -fsS -O https://hub.nfarms.cn/scripts/scripts-index.json # 需带登录会话
python3 -c "import json,hashlib,sys;d=json.load(open('scripts-index.json'));
m={s['name']:s['sha256'] for s in d['scripts']};
print(m['digest'])"
5. 安全与凭据约定¶
- 清单与正文不含任何口令 / webhook / token / 私钥;生成阶段对每个脚本做了正文级凭据扫描,命中者不下发正文(只保留元数据,页面「下载」会提示无 hub 副本)。本快照命中 3 个:
deploy/nfos/admin-password-rotate.sh、deploy/nfos/monitoring/digest.py、deploy/nfos/monitoring/sanitize.py。 - 需要凭据的脚本一律从环境变量或
secrets/读取,文档与页面只写变量名或<redacted>。 - 下发目录
/opt/Cy/nfarms/hub/scripts/受统一登录门禁保护(未登录 401)。
6. 回滚¶
- 覆盖 hub 脚本库前,上一版自动归档到
/opt/Cy/nfarms/.backup/hub-scripts-prev-<ts>/;还原:rm -rf /opt/Cy/nfarms/hub/scripts && cp -a /opt/Cy/nfarms/.backup/hub-scripts-prev-<ts> /opt/Cy/nfarms/hub/scripts。 - hub 页面回滚:
cp -a /opt/Cy/nfarms/hub/js/pages/scripts.js.bak-<ts> /opt/Cy/nfarms/hub/js/pages/scripts.js。 - 备份只放
/opt/Cy/nfarms/.backup/或state/unit-backups/,绝不放在/etc/systemd/system/(会触发 PS-002 完整性告警)。