explain --json 返回命令分析的结构化跟踪。本页定义脚本和其他工具可用的 JSON 结构,并说明分享跟踪时可能泄露哪些内容。
有关标志和退出行为,请参阅 CLI 命令。命令被意外阻止时的排查方法,请参阅 故障排除。
ExplainResult
explain --json 返回的顶级对象。
effectiveLevel、selectedPreset、effectiveCapabilities 和 destructiveCommandRuleOverrides 这四个配置字段只构建一次,并出现在每条返回路径中。因此,即使解释的是空命令,它们也存在。safetyPresetScope 在同一条路径上构建,但只有读取到项目的 .cc-safety-net/policy.json 时才会出现。
在面向人的输出中,预设显示在 CONFIG 部分,形式为 ,其中的范围取 user policy、project policy 或 built-in default。没有项目策略文件时,该行是不带括号的 。
effectiveCapabilities
effectiveCapabilities 是一个以 fail_closed、paranoid_rm 和 paranoid_interpreters 为键的记录。每个值包含:
各项能力分别改变什么,请参阅 模式。
ruleActivation
ruleActivation 只在相关规则声明了激活能力时才存在。相关规则要么是匹配到的规则,要么是受模式门控的候选规则;后者指的是只要所需的级别或能力处于启用状态就会匹配的规则。
在人类可读输出中,这一行显示为 。
ExplainTrace
跟踪只记录信息,不会改变判定。普通防护评估不会构建跟踪,只有
explain 会。
上限。 记录器会限制自己保留的内容:最多 512 个事件、每个文本值最多 2,048 个字符、每个列表最多 128 项、每个对象最多 128 个属性、最多 16 层嵌套。超出上限的事件只计数而不存储,并且每个记录下来的值都会被深度冻结。ExplainTrace 只有 steps 和 segments,不会显示被丢弃的事件数量。
TraceStep 变体
先用 type 选出变体,再读取它的其他字段。
recurse 原因
recurse.reason 取以下八个值之一:shell-wrapper、interpreter、busybox、shell-eval、shell-trap、shell-stdin、shell-heredoc 或 heredoc-file。
当命令运行分析器已知内容的脚本文件时,就会记录 heredoc-file,并把存储的 body 当作该脚本重新分析。这适用于同一命令中此前经由 cat > 或 tee 写入该路径的带引号 heredoc body。请参阅 Heredoc 分析。
transparent-wrapper 步骤
transparent-wrapper 是片段范围的步骤,当分析器展开通过 rule wrapper add 注册的命令时记录。主子命令和每个备选项都会各产生一个步骤,每个步骤携带:
该步骤在递归进入这些 token 之前立刻记录,因此总是排在被包装命令的分析之前。人类可读输出把它渲染为带编号的
Transparent wrapper 步骤,显示 Wrapper: 和 Tokens:。
使用 rule wrapper add、rule wrapper remove 和 rule wrapper list 命令管理包装器。请参阅 rule wrapper。
跟踪顺序
典型的跟踪流程为parse → 每个片段的 env-strip / leading-tokens-stripped → 检测(shell-wrapper / interpreter / busybox / transparent-wrapper)→ rule-check 或 custom-rules-check → 决策。递归表现为 depth 递增的 recurse 步骤。busybox 分派是例外,它会记录 recurse 步骤但不消耗递归深度,因此一连串 busybox 包装器会重复同一个 depth 值。只需要判定结果时,直接读顶级的 result(以及 reason、segment 和 ruleId),不必遍历整条跟踪。
有三种保护会在评估器运行之前短路:策略文件保护、Git 元数据保护和机密保护。其中之一阻止命令时,跟踪只含一个合成的 rule-check 步骤,且没有 parse 步骤,ruleId 设为 policy-protection、git-metadata-protection 或匹配到的机密规则的 ID。假定每条跟踪都以 parse 步骤开头的工具需要处理这种情况。
分享跟踪之前
例如,解释包含--token=… 赋值的命令时,token 会被脱敏,但同一命令中 /srv/acme-prod/customer-dump.sql 这样的路径会完整返回,命令文本里的任何主机名、IP 地址或账户名也一样。
可以在漏洞报告中附上 explain 输出。脱敏是尽力而为的控制手段,而不是保证;脱敏绕过属于可上报的漏洞。粘贴之前请通读完整输出。