启动配置检查¶
文件模式读取 --config 指定的原始 TOML,按字段路径识别未显式填写的参数,再沿用现有默认值与参数校验。标准 Docker 使用 --config-source env,从内置容器默认值和 NM__… 环境变量生成检查快照,无需挂载 TOML;文件模式不会合并这些环境变量。配置检查本身不改写文件,也不要求将只读挂载改为可写;旧身份迁移另有清理 TOML 字段的行为,见部署指南。
允许提示的字段以本版本仓库根目录追踪的 config.toml 为准,再排除数据库管理及身份参数。内部心跳间隔、Masscan 扩展参数等未公开字段不生成提示;Docker 示例中的额外字段不扩展公开范围。
公开部署字段的内置默认值为 None 时,仍可生成缺省提示,报告值为 null,Web 显示“未设置”。这不会将字段判为必需参数,也不会扩大公开范围或恢复数据库、身份字段的提示;未启用功能的参数仍作为可选项。
启动终端输出摘要,JSON 日志记录 ConfigCheckSummary / ConfigFieldDefaulted。缺少 scanner.c_server、scanner.c_port、scanner.rate 或 upload.endpoint 时输出必要字段并拒绝启动。语法、类型、范围和功能依赖继续由原加载流程校验。
- 未启用引擎的配套参数作为可选项,不要求用户补齐。
- 引擎开关是本地部署限制,服务端远程配置不能开启本地禁用引擎。
- 工具和模板路径来自本地配置,按文件或 Docker 部署核对实际路径。
- 由 Web 管理、存储在服务端数据库并下发的探测预算、DNS、Nuclei 等运行参数不生成本地配置缺省提示,也不计入启动摘要或字段日志。
- 本地引擎开关和
scanner.rate是独立的部署限制,仍保留检查;远程策略不能开启本地禁用的引擎,也不能突破本地速率上限。 scanner_id和runtime_token属于 SQLite 身份或历史迁移输入,不作为缺失提示,也不随检查报告发送。
启动快照通过心跳的可选 local_config_check 上报。支持该能力的服务端在管理员“扫描器 → 扫描配置 → 扫描器本地配置检查”展示;旧服务端可忽略该额外字段。扫描器停止或连接失败时无法更新报告,Web 应结合启动检查时间和最后回报时间判断。
修改文件后重启扫描器才能得到新快照;Compose .env 修改后使用 up -d --force-recreate,restart 不更新环境。正常任务仍按原任务边界应用远程参数。检查功能不改变只读挂载、身份数据库或待上传缓存,也不迁移字段名称与类型。
build.rs 从根目录配置提取公开字段名称;默认值仍复用配置类型和不含凭据的内置原型,禁止输出实际用户配置。新增基础必需字段时应同步 inspect_scanner 并添加兼容测试。新增代码默认字段不会自动生成用户提示。
修改公开配置字段后运行 python3 scripts/update-config-fields.py(Python 3.11+),更新只含名称的 src/public_config_fields.txt;本地构建会校验其与根目录配置一致。Docker 构建通过 NM_PUBLIC_CONFIG_FIELDS_FILE 使用该清单,不将实际根目录配置放入构建上下文或二进制。报告上报 public_fields 名称清单供前端过滤,旧报告由前端使用对应仓库的公开名称清单兼容过滤。