OpenClaw 安全巡检
使用前须知:本技能的功能范围
本技能并非纯本地扫描工具,在运行前请确认你已了解以下行为:
所有模式均会(包括默认本地模式):
- - 读取系统敏感信息:MAC 地址、主机名、系统日志、完整 Skill 清单
- 在本机持久化保存文件:扫描报告、安全基线(均保存在
~/.openclaw/)
仅在用户选择 --push 模式(需显式同意)时还会:
- - 生成并永久保存
agent_id(~/.openclaw/.agent-id),形成持久设备标识 - 将摘要数据上传至
auth.ctct.cn(Changeway 自营服务),可用于多次上传后的设备历史关联
仅在用户选择设置定时任务时还会:
- - 通过
openclaw cron 添加定时任务,执行与 openclaw 基础设施绑定(可跳过,不影响手动执行)
如对上述任一行为有顾虑,可仅使用本地模式并拒绝定时任务设置。
第一步:检查运行环境
执行命令 node --version,确认返回了版本号(如 v18.x.x 或更高)。
- - 如果命令成功返回版本号 → 继续第二步
- 如果报错"command not found" → 告诉用户:"安全巡检需要 Node.js 环境,请先安装 Node.js(推荐 v18 以上),安装后再来找我。",然后停止,不要继续后续步骤
第二步:首次使用引导
检查文件 ~/.openclaw/.audit-first-run 是否存在。
如果文件已存在 → 跳过本步,直接进入第三步。
如果文件不存在(说明是首次使用),向用户发送以下消息,然后等待用户回复:
CODEBLOCK0
根据用户回复执行:
- - 用户选 1(或回复"设置"、"自动"、"定时"等含义)→ 先创建标记文件
~/.openclaw/.audit-first-run(内容写 setup-done),然后必须读取 references/cron-setup.md 文件,严格按照其中的步骤帮用户配置定时任务。配置完成后再继续第三步。 - 用户选 2(或回复"先跑一次"、"以后再说"、"跳过"等含义)→ 创建标记文件
~/.openclaw/.audit-first-run(内容写 skipped),然后继续第三步。
关于定时任务的硬性要求:
- - 必须使用
openclaw cron add 命令 - 禁止使用系统 crontab(
crontab -e 等) - 原因:系统 crontab 无法正确初始化 OpenClaw 环境,会导致执行失败
- ⚠️ 基础设施绑定说明:使用
openclaw cron 会将定时执行与 openclaw 基础设施绑定;如不希望依赖此基础设施,可不设置定时任务,改为手动执行 - cron 命令中严禁添加
--push 参数:定时任务只以本地离线模式运行,绝不自动向远端上报设备标识
第三步:询问检测模式
向用户发送以下消息,然后等待用户回复:
CODEBLOCK1
根据用户回复执行:
- - 用户回复 "1" 或任何"本地"、"离线"含义 → 记录选择:本地模式,继续第四步
- 用户回复 "2 已了解"(必须包含"已了解"或"我已知晓"等确认短语)→ 记录选择:完整检测,继续第四步
- 用户只回复 "2" 但没有确认短语 → 不执行,回复:"完整检测模式会向 Changeway 服务器上报 MAC 地址、主机名、agent_id 和 Skill 清单等隐私敏感数据,请回复「2 已了解」确认知情同意后再继续。"
第四步:执行安全扫描
根据用户在第三步的选择,执行对应的命令:
- - 用户选 1(仅本地)→ 执行命令: INLINECODE16
- 用户选 2(完整检测)→ 执行命令: INLINECODE17
其中 <SKILL_DIR> 是本 skill 的安装目录(即本 SKILL.md 所在的目录)。
输出要求(严格遵守):
脚本执行完毕后,不要把脚本的完整控制台输出发给用户。脚本输出内容很长、包含大量技术细节,直接展示会让用户困惑。
你需要从脚本输出中只提取以下信息,然后按下面的格式发给用户:
- 1. 从输出末尾找到
PASS X FAIL X SKIP X 这一行,提取 PASS、FAIL、SKIP 的数量 - 仅在完整检测模式(--push)下,从输出末尾找到
系统安全得分: XX / 100 这一行,提取得分;本地模式无此行,得分显示为"—" - 从输出末尾找到
详细审计报告已保存至: ... 这一行,提取报告文件路径
然后只向用户发送以下内容(不要多写,不要少写):
CODEBLOCK2
然后停下来等用户回复,不要自动开始分析。
第五步:解读报告(用户要求时才执行)
当用户回复"是"、"要"、"分析"、"解读"、"看看"等肯定含义时,执行本步。
5.1 读取报告文件
读取文件 ~/.openclaw/security-reports/report-YYYY-MM-DD.txt,其中 YYYY-MM-DD 是今天的日期。
如果文件不存在,告诉用户:"没有找到今天的报告文件,可能扫描还没完成,请稍后再试。"
5.2 按以下格式逐项输出分析
输出规则(非常重要,必须全部遵守):
- - 按报告中
[1/14]、[2/14]... 的顺序,逐项输出分析 - 每项独立一段,不要合并、不要按通过/失败分类
- 每项用一段话说清楚(2-4 句,不超过 100 字),要让不懂技术的人也能看明白
- 图标含义:✅ = 安全没问题;⚠️ = 有点小问题建议处理;🚨 = 严重问题必须处理
- PASS 的项简短确认即可,FAIL 和 SKIP 的项要说明是什么问题和怎么解决
- 不要输出哈希值、原始日志、进程列表等技术细节,只输出结论和建议
5.3 解读模板(严格按此格式输出)
以下是完整的输出模板。你必须按照这个格式来写,内容根据实际报告调整:
CODEBLOCK3
5.4 解读案例(供你参考,实际输出时根据真实报告内容来写)
以下是基于一份真实报告的解读示范,展示每种状态该怎么写:
CODEBLOCK4
5.5 关于图标使用
在解读报告时使用以下图标(只有这 4 个,不要使用其他图标):
| 图标 | 含义 | 对应报告状态 |
|---|
| ✅ | 安全,没问题 | [PASS] |
| ⚠️ |
有小问题,建议处理 | [FAIL] 但不严重 |
| 🚨 | 严重问题,必须处理 | [FAIL] 且有安全风险 |
| ⏭️ | 跳过了,不用担心 | [SKIP] |
判断 FAIL 是 ⚠️ 还是 🚨 的标准:
- - 如果报告里提到"篡改"、"恶意"、"爆破"、"危险"、"高危" → 用 🚨
- 如果报告里提到"首次运行"、"缺失基线"、"权限过宽"、"未知请求" → 用 ⚠️
定时任务配置
当用户后续要求"设置定时巡检"、"修改定时任务"、"自动巡检"时:
- 1. 读取 references/cron-setup.md 文件
- 在执行任何配置命令前,向用户确认以下信息并等待明确同意:
基本行为:
- 定时任务将在后台持续运行(按用户指定的时间间隔,如每天、每周等)
- 每次执行会在本地生成报告(保存在 ~/.openclaw/security-reports/)
- 必须使用 openclaw cron add 而非系统 crontab(openclaw cron 管理独立的调度会话和超时,系统 crontab 无法正确初始化 OpenClaw 环境)
隐私和网络行为:
- 默认行为:定时任务仅在本地运行,不产生任何网络请求
- 如果启用通知 --announce/--channel/--to 参数:每次巡检结果会通过 OpenClaw 消息通道(如 Telegram、钉钉)发送通知到指定 chat ID,这是额外的外部消息路径,需要用户明确知晓
- 严禁在定时任务中使用 --push:定时任务的命令中绝不应该包含 --push,因为 --push 会让定时任务定期向 Changeway 服务器上报设备标识和 Skill 清单,造成隐私敏感数据的长期自动上报。--push 仅限用户单次手动运行时显式指定
用户确认:
- 询问用户:"确认要设置定时巡检吗?定时任务会每天运行扫描并保存本地报告。(是/否)",收到"是"后再继续
- 如果用户问及通知功能,补充:"通知功能会让结果发送到你的 Telegram/钉钉等,可选配置。"
- 3. 严格按照 cron-setup.md 中的步骤执行
- 关键安全要求:
- 必须使用
openclaw cron add 命令,禁止使用系统 crontab
- 定时任务的命令中严禁添加
--push 参数
- 审查用户最终的 cron 命令,确保不含 --push
OpenClaw 安全巡检
使用前须知:本技能的功能范围
本技能并非纯本地扫描工具,在运行前请确认你已了解以下行为:
所有模式均会(包括默认本地模式):
- - 读取系统敏感信息:MAC 地址、主机名、系统日志、完整 Skill 清单
- 在本机持久化保存文件:扫描报告、安全基线(均保存在 ~/.openclaw/)
仅在用户选择 --push 模式(需显式同意)时还会:
- - 生成并永久保存 agent_id(~/.openclaw/.agent-id),形成持久设备标识
- 将摘要数据上传至 auth.ctct.cn(Changeway 自营服务),可用于多次上传后的设备历史关联
仅在用户选择设置定时任务时还会:
- - 通过 openclaw cron 添加定时任务,执行与 openclaw 基础设施绑定(可跳过,不影响手动执行)
如对上述任一行为有顾虑,可仅使用本地模式并拒绝定时任务设置。
第一步:检查运行环境
执行命令 node --version,确认返回了版本号(如 v18.x.x 或更高)。
- - 如果命令成功返回版本号 → 继续第二步
- 如果报错command not found → 告诉用户:安全巡检需要 Node.js 环境,请先安装 Node.js(推荐 v18 以上),安装后再来找我。,然后停止,不要继续后续步骤
第二步:首次使用引导
检查文件 ~/.openclaw/.audit-first-run 是否存在。
如果文件已存在 → 跳过本步,直接进入第三步。
如果文件不存在(说明是首次使用),向用户发送以下消息,然后等待用户回复:
你好!这是首次使用安全巡检功能。
除了现在手动执行,你还可以设置每天自动巡检,系统会自动检查并把结果推送给你。(默认执行时间为 23:45,也可以自定义为其他时间)
请选择:
- 1. 设置每天自动巡检(推荐,省心)
- 先跑一次看看,以后再说
根据用户回复执行:
- - 用户选 1(或回复设置、自动、定时等含义)→ 先创建标记文件 ~/.openclaw/.audit-first-run(内容写 setup-done),然后必须读取 references/cron-setup.md 文件,严格按照其中的步骤帮用户配置定时任务。配置完成后再继续第三步。
- 用户选 2(或回复先跑一次、以后再说、跳过等含义)→ 创建标记文件 ~/.openclaw/.audit-first-run(内容写 skipped),然后继续第三步。
关于定时任务的硬性要求:
- - 必须使用 openclaw cron add 命令
- 禁止使用系统 crontab(crontab -e 等)
- 原因:系统 crontab 无法正确初始化 OpenClaw 环境,会导致执行失败
- ⚠️ 基础设施绑定说明:使用 openclaw cron 会将定时执行与 openclaw 基础设施绑定;如不希望依赖此基础设施,可不设置定时任务,改为手动执行
- cron 命令中严禁添加 --push 参数:定时任务只以本地离线模式运行,绝不自动向远端上报设备标识
第三步:询问检测模式
向用户发送以下消息,然后等待用户回复:
请选择检测模式:
- 1. 仅本地扫描(默认)— 不联网、不发送任何数据
· 所有扫描报告仅保存在本地 ~/.openclaw/security-reports/
· 适合离线环境或隐私敏感场景
· 无任何网络请求
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠️ 注意:下面的完整检测模式会向外部服务器发送隐私敏感数据
请仔细阅读数据上报内容后再决定
- 2. 完整检测(--push)— 联网查询威胁情报并同步安全评分
📡 网络请求目标(仅在用户同意时):
- 服务器:https://auth.ctct.cn:10020(Changeway 自营服务器,本 Skill 的发布方,非第三方平台)
- 端点1:/changeway-open/api/pushAuditData
- 端点2:/changeway-open/api/skills/assessment
📊 上报的隐私敏感数据包括:
· MAC 地址(如 a1:b2:c3:d4:e5:f6)
· 主机名(如 MacBook-Pro.local)
· agent_id(首次自动生成并永久保存在 ~/.openclaw/.agent-id,后续复用)
· 本机已安装的完整 Skill 清单(包含名称、作者、版本、所有者 ID)
· 每项安全检查的名称和结果摘要(不包含详细命令输出)
🔐 请求防重放机制(非设备认证):
· 每次请求附带时间戳 + 随机 nonce,服务端校验时间窗口防重放
· X-SIGN = SHA-256(mac + hostname + timestamp + nonce),用作请求指纹
· 注意:此机制无预共享密钥,不构成设备身份认证;服务端以 agent_id 标识设备来源
· 完整命令输出和敏感日志仅保存本地,不上传
⚠️ 长期指纹化风险与重要限制:
· 此选项仅限本次手动执行(一次性)
· 定时巡检(cron)中绝不自动启用 --push,防止设备信息被长期自动上报
· agent_id 为持久化唯一标识,多次手动选择完整检测均复用同一 ID,服务端将积累该设备的历史安全档案
· Skill 清单揭示本机工具组合情况,每次上传均与 agent_id 绑定,形成可追溯的设备指纹
· 如对隐私有较高要求,建议始终选择本地模式(选项 1)
🎯 如同意数据上报,请回复:2 已了解
根据用户回复执行:
- - 用户回复 1 或任何本地、离线含义 → 记录选择:本地模式,继续第四步
- 用户回复 2 已了解(必须包含已了解或我已知晓等确认短语)→ 记录选择:完整检测,继续第四步
- 用户只回复 2 但没有确认短语 → 不执行,回复:完整检测模式会向 Changeway 服务器上报 MAC 地址、主机名、agent_id 和 Skill 清单等隐私敏感数据,请回复「2 已了解」确认知情同意后再继续。
第四步:执行安全扫描
根据用户在第三步的选择,执行对应的命令:
- - 用户选 1(仅本地)→ 执行命令:node DIR>/scripts/openclaw-hybrid-audit-changeway.js
- 用户选 2(完整检测)→ 执行命令:node DIR>/scripts/openclaw-hybrid-audit-changeway.js --push
其中 是本 skill 的安装目录(即本 SKILL.md 所在的目录)。
输出要求(严格遵守):
脚本执行完毕后,不要把脚本的完整控制台输出发给用户。脚本输出内容很长、包含大量技术细节,直接展示会让用户困惑。
你需要从脚本输出中只提取以下信息,然后按下面的格式发给用户:
- 1. 从输出末尾找到 PASS X FAIL X SKIP X 这一行,提取 PASS、FAIL、SKIP 的数量
- 仅在完整检测模式(--push)下,从输出末尾找到 系统安全得分: XX / 100 这一行,提取得分;本地模式无此行,得分显示为—
- 从输出末尾找到 详细审计报告已保存至: ... 这一行,提取报告文件路径
然后只向用户发送以下内容(不要多写,不要少写):
检测统计: PASS X FAIL X SKIP X
系统安全得分: XX / 100(本地模式下显示为—)
详细审计报告已保存至: <报告文件路径>
需要我帮你解读这份报告吗?回复是我会逐项分析每个检查结果,告诉你哪些没问题、哪些需要注意。
然后停下来等用户回复,不要自动开始分析。
第五步:解读报告(用户要求时才执行)
当用户回复是、要、分析、解读、看看等肯定含义时,执行本步。
5.1 读取报告文件
读取文件 ~/.openclaw/security-reports/report-YYYY-MM-DD.txt,其中 YYYY-MM-DD 是今天的日期。
如果文件不存在,告诉用户:没有找到今天的报告文件,可能扫描还没完成,请稍后再试。
5.2 按以下格式逐项输出分析