Skip to main content
explain --json 返回命令分析的结构化跟踪。本页定义脚本和其他工具可用的 JSON 结构,并说明分享跟踪时可能泄露哪些内容。 有关标志和退出行为,请参阅 CLI 命令。命令被意外阻止时的排查方法,请参阅 故障排除
跟踪并不自动适合分享。请先阅读 分享跟踪之前

ExplainResult

explain --json 返回的顶级对象。 effectiveLevelselectedPreseteffectiveCapabilitiesdestructiveCommandRuleOverrides 这四个配置字段只构建一次,并出现在每条返回路径中。因此,即使解释的是空命令,它们也存在。safetyPresetScope 在同一条路径上构建,但只有读取到项目的 .cc-safety-net/policy.json 时才会出现。 在面向人的输出中,预设显示在 CONFIG 部分,形式为 ,其中的范围取 user policyproject policybuilt-in default。没有项目策略文件时,该行是不带括号的

effectiveCapabilities

effectiveCapabilities 是一个以 fail_closedparanoid_rmparanoid_interpreters 为键的记录。每个值包含: 各项能力分别改变什么,请参阅 模式

ruleActivation

ruleActivation 只在相关规则声明了激活能力时才存在。相关规则要么是匹配到的规则,要么是受模式门控的候选规则;后者指的是只要所需的级别或能力处于启用状态就会匹配的规则。 在人类可读输出中,这一行显示为

ExplainTrace

跟踪只记录信息,不会改变判定。普通防护评估不会构建跟踪,只有 explain 会。 上限。 记录器会限制自己保留的内容:最多 512 个事件、每个文本值最多 2,048 个字符、每个列表最多 128 项、每个对象最多 128 个属性、最多 16 层嵌套。超出上限的事件只计数而不存储,并且每个记录下来的值都会被深度冻结。ExplainTrace 只有 stepssegments,不会显示被丢弃的事件数量。

TraceStep 变体

先用 type 选出变体,再读取它的其他字段。

recurse 原因

recurse.reason 取以下八个值之一:shell-wrapperinterpreterbusyboxshell-evalshell-trapshell-stdinshell-heredocheredoc-file 当命令运行分析器已知内容的脚本文件时,就会记录 heredoc-file,并把存储的 body 当作该脚本重新分析。这适用于同一命令中此前经由 cat >tee 写入该路径的带引号 heredoc body。请参阅 Heredoc 分析

transparent-wrapper 步骤

transparent-wrapper 是片段范围的步骤,当分析器展开通过 rule wrapper add 注册的命令时记录。主子命令和每个备选项都会各产生一个步骤,每个步骤携带: 该步骤在递归进入这些 token 之前立刻记录,因此总是排在被包装命令的分析之前。人类可读输出把它渲染为带编号的 Transparent wrapper 步骤,显示 Wrapper:Tokens: 使用 rule wrapper addrule wrapper removerule wrapper list 命令管理包装器。请参阅 rule wrapper

跟踪顺序

典型的跟踪流程为 parse → 每个片段的 env-strip / leading-tokens-stripped → 检测(shell-wrapper / interpreter / busybox / transparent-wrapper)→ rule-checkcustom-rules-check → 决策。递归表现为 depth 递增的 recurse 步骤。busybox 分派是例外,它会记录 recurse 步骤但不消耗递归深度,因此一连串 busybox 包装器会重复同一个 depth 值。只需要判定结果时,直接读顶级的 result(以及 reasonsegmentruleId),不必遍历整条跟踪。 有三种保护会在评估器运行之前短路:策略文件保护、Git 元数据保护和机密保护。其中之一阻止命令时,跟踪只含一个合成的 rule-check 步骤,且没有 parse 步骤ruleId 设为 policy-protectiongit-metadata-protection 或匹配到的机密规则的 ID。假定每条跟踪都以 parse 步骤开头的工具需要处理这种情况。

分享跟踪之前

explain 跟踪本身并不天然可以安全分享。 parse 步骤会记录你提供的原始命令字符串,以及从中解析出的每一个 token。许多其他步骤也携带原始文本,包括 fallback-scan.tokensScanneddangerous-text.tokenshell-wrapper.innerCommandinterpreter.codeArgrecurse.innerCommandstrict-unparseable.rawCommandtransparent-wrapper.outputworktree-relaxation.gitCwdcwd-change.segmentconfigSource 是绝对路径,通常位于你的主目录内。脱敏只移除已识别的凭证形式,使用的是审计日志中的有界模式列表。它对文件路径、主机名、IP 地址、用户名、项目或客户名称,以及任何格式不在列表中的机密都不作保证,也无法脱敏无法识别的内容。分享前,请用占位凭证和占位路径复现场景,再通读完整输出,删除不应公开的内容。
例如,解释包含 --token=… 赋值的命令时,token 会被脱敏,但同一命令中 /srv/acme-prod/customer-dump.sql 这样的路径会完整返回,命令文本里的任何主机名、IP 地址或账户名也一样。 可以在漏洞报告中附上 explain 输出。脱敏是尽力而为的控制手段,而不是保证;脱敏绕过属于可上报的漏洞。粘贴之前请通读完整输出。

相关页面

  • CLI 命令explain 的标志、示例和退出行为。
  • 审计日志:脱敏模式列表,以及同样适用于已记录条目的边界。
  • 分析引擎:每个跟踪步骤对应的行为。
  • 故障排除:用 explain 诊断意外的阻止。
最后修改于 2026年8月31日