Fuchsia 版本中集成了多个验证流程。所有这些流程 对构建输出工件执行某种形式的检查。这种集成的目的是 在开发过程中尽早发现潜在问题。
仔细验证系统级属性
通过 ffx 调用审查可完成一系列验证流程。 这些步骤已编入 build/security/verifier 的 gn 模板中。 目录。例如,在组件拓扑上验证格式正确的功能路由,以及 验证系统上预安装的一组静态软件包。
一般来说,这些验证过程会分析所有文件集合,以测试特定的 属性,和/或确保这些集合与人工审核的制品的许可名单匹配。
验证配置文件
*注意:本部分仅适用于 Google 员工。“验证结构化配置文件”设置 目前仅对 Google 产品的非 eng build 启用。
在某些情况下,系统组件旨在支持 eng 和非 eng 的不同配置 build 类型。当使用此策略对组件进行工程处理时,务必要 通过验证非 eng 版本的正确配置来保护此类 build 的完整性。
验证结构化配置文件
要针对结构化配置验证非 eng Google 产品 build,您必须完成 操作步骤:
- 确定非 eng build 中预期的安全配置值;
- 提交 bug,以便安全地跟踪组件或功能的实现情况;
- 将配置值添加到政策文件,将其标记为“过渡性”;
- 签入新的组件或功能;
- 清理政策文件和 bug。
下面详细介绍了此过程的每个步骤。
1. 确定非 eng build 中预期的安全配置值
系统将通过比较 build 生成的值来验证结构化配置文件 黄金文件,该文件表示向用户交付的安全配置值。请先撰写 并缩小您的组件的这些值
2. 提交 bug,以安全地跟踪组件或功能的着陆
如果您还没有让 bug 用来跟踪您正在使用的组件或功能,请务必提交 一个并提及针对非 eng build 且经过验证的结构化配置。您将参考这个 bug 。
3. 将配置值添加到政策文件,将其标记为“过渡性”
您将需要修改以下位置中的所有文件:
//vendor/google/security/policy/**/*structured_config_policy*.json5
。这些文件包含
按由 Fuchsia 网址标识的组件分组的结构化配置值(请参阅示例
)。任何标记为“过渡”的组件或配置值只有在
否则就会被忽略。未标记为
需要过渡:非过渡组件必须出现在 build 输出中,并且
每个非过渡配置值都必须与政策中指明的预期值一致
文件。
例如,添加新组件时,政策文件可能如下所示:
{
components: {
// ...existing components...
// new component:
// <High-level description of how to configure new component>
"fuchsia-pkg://fuchsia.com/new-frobinator#meta/new-frobinator.cm": {
// TODO(https://fxbug.dev/####): Remove transitional once `new-frobinator` is integrated into
// the build.
transitional: true,
fields: {
// <Precise description of why `frobinator_debugging_enabled=false` is a safe
// configuration to ship to users>
frobinator_debugging_enabled: false,
},
},
},
}
如果您是向现有组件添加新字段,则政策文件可能如下所示: 如下所示:
{
components: {
// ...existing components...
// component with new fields:
"fuchsia-pkg://fuchsia.com/existing-frobinator#meta/existing-frobinator.cm": {
fields: {
// ...existing fields appear as `<field_name>: <expected_value>`; e.g.,
frobinator_internal_policy: "production",
// <Precise description of why `frobinator_debugging_enabled=false` is a safe
// configuration to ship to users>
frobinator_debugging_enabled: {
expected_value: false,
// TODO(https://fxbug.dev/####): Remove transitional once `frobinator_debugging_enabled`
// is integrated into the build.
transitional: true,
},
},
},
},
}
该政策必须包含所有可能因 eng 和非 eng 而异的结构化配置字段
build。请勿跳过 <Description>
或 TODO(https://fxbug.dev/####)
概述的任何注释
。
具有政策中指定的值的字段不得包含 mutability
说明符,因为它会
这些值可能会偏离政策所要求的值。
4. 签入新的组件或功能
现在可以安全地检查新组件或功能,并将其连接到 build 和紫红色 系统组件树。如果您在非 eng Google 产品中配置组件时出错 build 中会出现此错误,在结构化配置政策检查期间会显示为 build 错误。
5. 清理政策文件和 bug
再次修改第 3 步中所述的政策文件,移除之前添加的 transitional
标记,
在第 3 步中添加。
返回到第 3 步的示例,对于新组件示例,最终的政策文件为 如下所示:
{
components: {
// ...existing components...
// new component:
// <High-level description of how to configure new component>
"fuchsia-pkg://fuchsia.com/new-frobinator#meta/new-frobinator.cm": {
fields: {
// <Precise description of why `frobinator_debugging_enabled=false` is a safe
// configuration to ship to users>
frobinator_debugging_enabled: false,
},
},
},
}
现有组件的新字段的最终政策文件如下所示:
{
components: {
// ...existing components...
// component with new fields:
"fuchsia-pkg://fuchsia.com/existing-frobinator#meta/existing-frobinator.cm": {
fields: {
// ...existing fields appear as `<field_name>: <expected_value>`; e.g.,
frobinator_internal_policy: "production",
// <Precise description of why `frobinator_debugging_enabled=false` is a safe
// configuration to ship to users>
frobinator_debugging_enabled: false,
},
},
},
}
这些更改生效后,假设新组件或新功能的工作已经完成,可以放心 关闭第 2 步中提到的错误。