记录 Agent、环境、任务、原因、计划修改的文件。
MCP 项目接入 · 2026-10-14
zfold8 等设备继续使用各自已有 SSH 身份。先查询项目;首次无权限时申请,经管理台批准后,自动登记和提交,无需手工上传 JSON。
DSH 机器人私聊通知审批人。批准不含发布权限;本页下方旧命令作为未接入 MCP 客户端的兼容方式。
先阅读完整工作流、管理员授权与交接模板。本页保留既有留痕功能及历史说明,最新接入能力见完整工作流。
第一阶段 / 修改可追溯
谁改了什么,为什么改,结果怎样。
按任务查看文件前后差异、执行身份、验证结果和发布状态。
不在本次启动新的 AI 凭证授权、暂停、撤销功能,也不变更现有 SSH 权限。已经存在的认证服务保持原状。
这是一套主动登记的变更流程,不是全机自动监听。没有记录,不能推断没有修改。
自动读取文件,比较前后内容与 SHA-256。
区分已发布、完成未发布、失败与回滚。
看差异、身份依据和验证记录。
管理员怎么看?
- 打开 统一登录管理 → Agent 修改留痕,使用现有管理员账号登录。
- 默认使用现有 @njwl/table 2.0.0 多维表格。可搜索记录,按 Agent、执行账号、环境和发布状态筛选,添加多重排序、按分类分组、拖动调整列顺序;表格视图按当前管理员账号保存。也可切换卡片视图。
- 点击表格中的“查看差异”或卡片中的“查看差异与验证”,展开具体文件:
−是删除,+是新增。 - 查看验证结果及限制;“已发布”表示执行者提交的发布状态,不等于所有业务场景都已人工验收。
- 若显示“进行中”,只表示已完成修改前登记,尚未提交修改后结果。
哪些信息可靠,哪些只是声明?
| 信息 | 来源 | 说明 |
|---|---|---|
| Agent 名称 / 工具 / 环境 | 执行者提交 | 便于理解,不能证明实际模型品牌。 |
| 执行账号 | 记录工具读取运行身份 | sudo 时记录原始账号;共用账号时不能区分每个 AI。 |
| SSH 公钥指纹 | 本次流程登记 | 用于关联维护凭证;尚未与 SSH 审计日志自动核验绑定。 |
| 文件差异 / 哈希 | 工具自动计算 | 来自登记时和结束时的真实文件;不能归因登记窗口内其他人同时写入的内容。 |
| 验证结果 / 发布状态 | 执行流程提交 | 应包含实际命令结果和未完成检查,不能把声明当作独立审计证明。 |
需要更强归因时,应给不同执行环境独立账号与凭证,并让发布流程成为唯一写入口。这一步尚未启用。
当前记录范围与限制
表格只读:筛选、排序、分组和列顺序只改变查看方式,不修改审计记录。不提供新增、编辑或删除历史记录按钮。控件复用管理台现有 @njwl/table 2.0.0,未修改组件源码。
已登记源码根目录:/home/ubuntu/sso-console 、/var/www/ai.njwl.ai/guide 与记录工具目录 /usr/local/lib/njwl-agent-changes。只接受明确列出的 HTML、JS、CSS、Python、Markdown、JSON 源文件;不扫描数据库、运行目录、隐藏文件、凭证或备份目录。
一个任务最多30个文件,每个文件最多2 MiB。修改前快照仅供服务器 root 访问,管理员网页只看处理后的差异。疑似密钥行、长行和超过展示限制的内容会省略;这类检测不能保证识别所有秘密,因此源码本身仍不得包含真实凭证。
记录保存在独立的 /var/lib/njwl-agent-changes,由受信任的管理员/发布流程写入;网页只读,不提供新增、修改或删除日志的 API。界面展示最近100次完成记录;不自动删除历史或基线,需由负责人规划保留期和备份。
给后续 Agent 的操作流程
在用户已授权的项目和任务范围内,修改前先登记,修改后再结束记录。登记不扩大权限,不能因为工具要求 sudo 就给普通 AI 新增管理员权限。
sudo python3 /usr/local/lib/njwl-agent-changes/agent-change.py begin /path/to/change-spec.json # 返回记录编号;然后执行已授权的修改和验证 sudo python3 /usr/local/lib/njwl-agent-changes/agent-change.py finish 记录编号 \ --status 已发布 --checks /path/to/check-results.json
任务说明示例(全部为示意,不含真实凭证):
{
"agent": "Codex · 指南维护",
"environment": "指定维护设备",
"task": "GUIDE-2026-001",
"summary": "补充组件接入说明",
"reason": "让后续维护人员能找到固定版本组件",
"credential_fingerprint": "公钥指纹;不填写私钥",
"paths": ["/var/www/ai.njwl.ai/guide/index.html"]
}检查结果文件为字符串数组,例如 ["页面返回200", "链接检查通过", "真实登录尚待本人验收"]。任务失败也应结束记录并说明失败;执行实际回滚后才标“已回滚”。重复执行结束命令不会覆盖已完成记录。
发布前重新核对线上源码是否与登记基线一致,避免覆盖其他任务;本工具本身不锁定源码,也不替你执行发布或回滚。
所有 AI:修改前登记,修改后提交
通过 SSH 工作的 AI 必须先读取项目 AGENTS.md。现有有权限的账号可使用下面命令;没有 sudo 权限时由管理员代为登记,不扩展 AI 权限。
保存 spec.json,paths 必须明确列出将修改的绝对路径:
{
"agent": "实际AI或工具名称",
"environment": "实际执行环境",
"task": "任务编号",
"summary": "准备修改什么",
"reason": "为什么修改",
"paths": ["/var/www/ai.njwl.ai/guide/example.html"]
}修改前执行,保存返回的 registration_id:
sudo python3 /usr/local/lib/njwl-agent-changes/agent-submit.py register /绝对路径/spec.json
修改后将真实验证结果写入 checks.json,例如 ["语法检查通过", "尚未发布,等待验收"],再执行:
sudo python3 /usr/local/lib/njwl-agent-changes/agent-submit.py submit 登记号 --checks /绝对路径/checks.json
没有有效登记号或登记账号不匹配,会拒绝提交。登记后开始修改;范围扩大要先另行登记,禁止事后补登记冒充修改前快照。交付回复必须包含登记号。
SSH 命令复用原源码留痕工具:登记出现在“正在进行的修改”,完成后进入修改记录表。网页的 CHG 任务编号用于网页候选源码提交,两种编号不可混用。网页提交不修改线上文件;SSH 工具记录所登记路径的实际修改,不自动上传或发布,也不能自动发现登记范围以外的改动。
当前是流程要求,尚未通过权限收紧阻断旁路。共用 SSH 账号无法区分真实 AI 身份。不要把完成留痕视为发布授权。
统一变更登记与审计
管理台现分为四个 Tab:待执行、已提交、审计记录、未报备。源码、数据库和配置共用网页登记号及版本记录。
- 待执行:登记类型、任务、原因和范围。源码填写允许修改的路径;数据库填写库标识、表对象、操作类型及预计影响行数上限;配置填写对象绝对路径和操作类型。SSH 正在进行的登记也在此展示。
- 已提交:按登记号提交候选源码,或提交执行步骤、验证方法和回滚计划。每次保留独立版本;数据库与配置显示“计划已提交·未执行”。范围不能在提交时偷偷扩大。
- 审计记录:区分系统接收/拒绝日志和原始文件差异审计。计划没有实际执行结果,不填造影响行数、不显示成功发布。实际执行审计应由后续执行服务采集,关联原登记号。
- 未报备:复用后台检测,查看未匹配登记的文件变化及监测健康状态。数据库业务数据变化尚未接入此告警。
网页登记号 CHG-…在登记、逐次提交和接收日志中共用。历史 SSH 留痕编号保持不变;旧记录不会被改写。后续执行记录可在 task 字段关联网页登记号,但自动执行与可信关联校验尚未接通,不把同名编号当成执行证明。
此版本不连接数据库执行计划、不修改系统配置、不授予新权限。请勿在任务或计划中填写密码、数据库连接串、密钥或完整业务数据。后端会拒绝部分明显凭证格式,但不能保证识别所有秘密。
先登记,再提交
管理台新增“任务登记与提交”。填写任务、原因和完整源码路径,系统生成 CHG 登记号;提交身份由当前 SSO 登录账号确定,不接受表单自报身份。共用账号仍无法区分不同 AI。
- 登记:记录允许修改的文件和线上基线哈希。
- 提交:填写登记号及文件 JSON 数组,每项含 path 和 content(修改后的完整源码)。必须恰好覆盖登记范围。单文件200KB,总请求900KB。
- 校验:无登记、身份不符、文件越界、基线变化或无修改时拒绝;业务拒绝写入异常记录。
- 接收:每次提交保存独立版本及 SHA-256,状态为“已提交待检查”。源码保存在管理服务私有数据目录,不写到线上文件。
入口校验已启用,线上发布尚未强制。尚未接入自动检查和发布服务,SSH 直接写入仍可绕过。此页面不能把“已接收”标为“已发布”。后续必须收紧线上写权限并绑定检查通过的确切版本,才能全局强制。提交记录当前为本机存储,不承诺抗管理员篡改;不要提交密钥或运行数据。
本次交付状态
第一阶段提供真实文件修改记录、受管理员登录保护的只读界面、哈希链校验和差异查看。本次上线自身也纳入记录。
AI 权限管理扩展草稿未部署;没有新增 AI 管理员、没有签发生产 AI 凭证、没有改变 SSH 或业务权限。
2026-09-20:验证文件差异、链式哈希、新增文件、未修改文件、敏感路径拒绝与差异省略。正式管理页面仍需管理员本人登录查看,未绕过登录保护。
提交者来源信息
新网页登记、提交和入口校验拒绝事件记录认证账号、来源IP、浏览器User-Agent及服务端请求编号。来源IP由本机Nginx覆盖传入;浏览器信息属于客户端声明,可以伪装。只向原SSO管理员展示,不记录Cookie、认证令牌、私钥或完整请求头。
SSH登记与完成提交分别采集当前进程祖先PID,并匹配本次系统启动的sshd公钥认证日志,展示登录账号、来源IP、密钥指纹和认证时间。无唯一匹配时显示未核实,不使用提交者自报指纹替代。后台脱离SSH的任务可能无法关联。
历史记录不补造身份。已有未报备文件告警不自动归因到最近登录者。共享账号或密钥不能区分具体AI;完整sudo权限可以篡改本机证据。网页代理信息也不能抵御本机特权进程伪造。来源信息沿用现有审计记录保存周期,目前没有自动到期清理。
历史身份补充
旧审计原文和哈希链保持不变。附加文件按原记录编号及哈希绑定历史日志证据,展示回填时间。能通过唯一部署命令执行时段、系统会话和SSH日志关联的标为“历史日志关联(待确认)”,不等同于当时直接采集的身份。证据不足显示“历史无法核实”。新记录的直接身份优先,不用历史推断覆盖。
旧网页提交如没有请求级唯一关联,不按相近时间的访问日志猜测浏览器或IP;未报备告警也不据此归因。
