Skip to main content
explain --json 命令返回命令分析的结构化跟踪。此页面定义了用于脚本和其他工具的 JSON 形状。它还解释了在共享跟踪之前可以揭示的内容。 有关标志和退出行为,请参阅 CLI 命令。有关意外阻止的帮助,请参阅 故障排除
跟踪不能自动安全共享。请先阅读 共享跟踪之前

ExplainResult

explain --json 返回的顶级对象。 四个配置字段 — effectiveLevelselectedPreseteffectiveCapabilitiesdestructiveCommandRuleOverrides — 会一次性构建并包含在每个返回路径中,因此即使解释空命令时它们也存在。

effectiveCapabilities

effectiveCapabilities 是一个记录,键为 fail_closedparanoid_rmparanoid_interpreters。每个值包含: 请参阅 模式,了解每个功能会改变什么。

ruleActivation

ruleActivation 仅在相关规则声明激活功能时存在。相关规则是要么匹配的规则,要么是受模式限制的候选规则。受模式限制的候选规则是指如果其所需的级别或功能处于活动状态就会匹配的规则。 在人类可读的输出中,这会渲染为一行:Rule activation: <id> — on|off via <source>

ExplainTrace

跟踪是被动的:记录它永远不会改变决策,普通的保护评估也永远不会构建它。它仅用于 explain 边界。 记录器会限制其保留的内容:最多 512 个事件,每个文本值最多 2,048 个字符,每个列表最多 128 个项,每个对象最多 128 个属性,以及 16 个嵌套级别。超出限制的事件会被计数而不是存储,并且每个记录的值都会被深度冻结。丢弃事件的数量不会在 ExplainTrace 中暴露 — 仅暴露 stepssegments

TraceStep 变体

在读取其其他字段之前,请使用 type 来选择变体。

recurse 原因

recurse.reason 有八个值之一:shell-wrapperinterpreterbusyboxshell-evalshell-trapshell-stdinshell-heredocheredoc-file 当命令运行一个分析引擎已知的脚本文件时(通过 cat >tee 在同一命令的早期通过 quoted heredoc body 写入该路径),并且存储的 body 被作为脚本重新分析时,会记录 heredoc-file;请参阅 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 → 决策。递归显示为具有增加的 depthrecurse 步骤 — 除了 busybox 分派,它会记录一个 recurse 步骤但不会消耗递归深度,因此一系列 busybox 包装器会重复相同的 depth 值。当您只需要结果时,请阅读顶级的 result(加上 reasonsegmentruleId),而不是遍历跟踪。 三个保护措施在评估器运行之前会短路:策略文件保护、Git 元数据保护和秘密保护。当其中一个阻止命令时,跟踪将包含一个单一的合成 rule-check 步骤,没有 parse 步骤ruleId 设置为 policy-protectiongit-metadata-protection 或匹配的秘密规则的 ID。假定每个跟踪都以 parse 步骤开始的工具需要处理这种情况。

共享跟踪之前

解释跟踪本身并不安全。 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月12日