RFC-0194:附录:会话

RFC-0194:附录:会话
状态已接受
领域
  • 会话
说明

RFC-0092 的附录,用于批准在 RFC-0092 中未处理的决策。

Gerrit 更改
  • 709745
作者
审核人
提交日期(年-月-日)2022-08-09
审核日期(年-月-日)2022-10-17

总结

注意:此 RFC 是 RFC-0092 的附录,用于批准在 RFC-0092 中未处理的决策。

本文档:

  • 弃用了“会话框架”一词
  • 介绍了 Fuchsia 平台的当前状态(因为它与旧版“会话框架”概念相关)
  • 定义“会话组件”及其在 Fuchsia 平台中的角色
  • 在审核路由到产品组件的功能时,开始规范 Fuchsia Security 角色

在旧版的“会话框架”概念中,保留了以下内容:

  • 平台 session_manager 组件
  • “会话组件”本身作为 session_manager 的子级
  • “会话组件”在平台中作为安全边界的作用
  • ffx session 开发者工具
  • fuchsia.element.GraphicalPresenter 协议
  • fuchsia.element.Manager 协议

以下内容会被舍弃,或者其所有权已转移给特定产品所有者:

  • 用于其他流程(例如输入流水线管理)的平台自有库/组件的一站式概念
  • 目标是解决单个团队下多个运行时(如 Flutter、Android、Chrome 等)与多个产品组合时产生的复杂性爆炸问题

以下几项会保留下来,继续由平台拥有,但已计划弃用:

  • fuchsia.element.Manager 协议
  • element_manager 组件

原始 RFC-0092 中的以下待解决问题已得到解答:

  • 平台为会议提供了哪些图形功能?
  • Google 提供了哪些输入功能?
  • 哪些功能类是敏感的,绝不会提供给会话?

设计初衷

当会话组件作为 RFC-0092 中的一个概念引入时,关于平台为会话提供的功能的问题在很大程度上是开放的。从那时起,Fucsia 平台设计人员就积累了足够的知识,能够详细说明为所有会话提供哪些功能,最重要的是,了解永远不会提供哪些类型的功能。

作为平台软件和产品软件之间的重要安全边界之一,选择为会话组件提供哪些功能对 Fuchsia 平台设计人员来说非常重要。如果向所有会话提供一组过于广泛的功能,可能会导致平台无法跨所有产品提供关键的行为一致性。

最后,旧版的“会话框架”概念给开发者带来了一些困惑。这些概念(其中一些未明确包含在 RFC-0092 中,但包含在会话框架概念文档中),最初包括:

  • 提供要在会话中使用的客户端库和可重复使用的组件来解决众多问题,包括:
    • 窗口管理
    • 最终用户应用生命周期
    • 输入处理
    • 通知
    • ... 等等
  • 组件角色和责任(例如,供会话内使用的 Element Proposer)的定义。
  • 引入了“元素”概念,作为新的一类组件用法。

由于“项目的会话框架”具有开放式范围,因此该术语也变得具有开放性和含糊不清。

利益相关方

教员

hjfreyer@google.com

审核者

此部分会在审核期间更新。

图形:emircan@google.com、dworsham@google.com 输入:neelsa@google.com 产品:yaar@google.com 用户数据保护:jsankey@google.com 身份:jsankey@google.com 工作站:sanjayc@google.com

咨询问题

neelsa@google.com

社交

草稿文档已发送给景观团队、输入团队、工作站、可信平台服务团队进行讨论。

设计

“会话组件”是一种组件。每个 Fuchsia 产品都将其用户体验封装在一个会话组件(及其后代组件)中。术语“用户体验”被广泛使用:它涵盖传统的触摸/鼠标/键盘互动图形体验,以及单个 RGB LED 和多个硬件按钮或仅具有网络 I/O 的更简单的体验。

简单的产品可以指定没有子级的会话组件,而复杂的产品可能会有多个会话组件的子级。例如,工作站会话会实例化组件,以将系统界面、命令行 shell 和网络浏览器显示为其会话组件的后代。

目前,任何 Fuchsia 产品的组件拓扑中都存在一个会话组件。将来,预计会有多个会话并发运行。会话组件的身份(网址)由产品所有者选择。拓扑中的位置由平台定义,产品所有者无法更改。由于组件架构的性质,会话组件无法获知其在拓扑中的位置。

会话组件提供了打造相应产品的用户体验所需的所有平台提供的功能。会话组件是组件拓扑中具有最高权限的非平台组件之一。因此,平台与会话组件之间的边界定义是 Fuchsia 的重要安全和控制层。

启动和拓扑

会话组件是 session_manager.cml 的子级,后者是 core.cml 的子级。session_manager.cml 是一个中间平台二进制文件,可实现关键行为:

  • 会话组件的网址无需修改 core.cml 或任何其他平台 .cml 文件即可进行配置
  • 在某些产品中,会话组件会在启动时自动启动(按照惯例,这用于 user build 和 userdebug build)
  • 在其他情况下,可以通过为 session_manager 配置空会话网址来指示启动过程在启动会话组件之前中断(按照惯例,这用于 eng build 的“已暂停”变体)
  • 在 eng build 中,会话组件可以在运行时重启或替换为其他组件

session_manager.cml 配置可以从平台传递给产品的功能的确切上限

功能

与任何组件一样,会话组件的父级定义了会话组件的沙盒。以下列表并未列出平台中会话组件可用的功能超集。根据产品对平台的配置,某些功能在运行时将无法使用。

现在,产品配置(也就是给定产品上的给定会话组件实际可用的功能集)是通过在一组产品包标签上添加或移除构建时软件包依赖项来实现的。

系统生命周期控制

会话组件可以:

  • 指示平台重启会话组件。
  • 请求重新启动或暂停设备硬件。
  • 启动设备恢复出厂设置。

显卡

对于具有图形界面的产品:

我们为会话组件提供了必要的功能,以便指定单个 View 作为用户体验的根 View。View 的选择可能会在会话的生命周期中发生变化。例如,当与会话的互动因处于不活动状态而被锁定时,根视图可能会切换到锁定屏幕。

此外,会话可以在其根视图中嵌入子视图,以委托给其他软件。嵌入子视图的功能不是会话所独有的:它是 Fuchsia 系统合成器的一个属性。

会话并非指定数据视图的必要条件。例如:在无头设备上运行的无头会话不会指定 View。

以下敏感功能明确提供给会话:

  • 对显示硬件的低级控制。Fuchsia 可确保通过系统合成器进行界面合成,该合成器可以在所有产品中提供最低级别的性能和功能(例如无障碍叠加层)。

输入

会话组件提供了一些功能,可允许其观察输入事件。它们包括将按键事件路由到视图层次结构中的聚焦视图、鼠标和触摸事件的路由,以及注册接收键盘快捷键通知的功能。未来,为了支持与其他输入设备(包括虚拟和实体)的交互,可能需要其他输入功能。

以下敏感功能明确提供给会话:

  • 对 HID 输入事件的低级别访问权限。

系统设置

该会话可以访问和管理系统设置,例如软件更新渠道和有效的 Wi-Fi 网络,包括:

  • 输入政策,例如键盘按键映射和自动重复率
  • 显示政策,例如光传感器模式
  • 国际化
  • 软件更新渠道
  • 硬件设置,例如 WLAN (Wi-Fi)、蓝牙或相机设置。

持久性数据

该会话具有必要的功能,可以为会话内的组件提供加密存储。这些服务包括加密的设备存储空间和帐号管理服务。帐号管理服务可用于执行身份验证和访问帐号加密存储空间。

实现

更新文档

  • 删除会话框架概念文档。
  • 将“会话组件”添加到词汇表。

限制会话功能路由

session_manager.cml 组件包含为会话提供的功能的明确列表。部分存在安全或隐私风险的功能如果包含在 session_manager.cml 中,则会导致平台构建失败。

我们将与 Fuchsia 安全团队合作生成和维护禁止的功能列表。候选人包括:

  • fuchsia.hardware.display.controller.*
  • /dev/class/input-report

安全注意事项

概览

平台为会话组件提供的功能会限制会话组件的功能。这具有重要影响:被授予能够作为其自身子项启动第三方软件的会话组件可以学习很多关于此类软件实例的信息。例如:它拥有其子实例的永久性存储空间,并且可以配置为对该存储空间执行读写操作。它还可以了解软件的身份(网址)以及其他信息。

审计责任

平台 session_manager.cml 组件用于配置可从平台授予会话组件的所有功能的上限。Fuchsia 安全团队负责审核此超集,并确保其适合所有可能的产品。对这些功能所做的任何更改都必须通过安全审核

产品所有者负责在会话组件边界的产品端进行一次功能路由的安全属性:在会话组件或其子级中作出的任何路由决策都对 Fuchsia 平台安全团队不可见。

目前已经推出一些审核和执行工具。这些文件包括:

  • fx scrutiny
  • 转送许可名单(可能因产品而异)

需要改进的审核和强制执行工具来支持特定于产品的安全团队。组件框架团队旨在改进 scrutiny 和路由许可名单机制,以便更好地实现递归,从而更轻松地将工具应用于平台根以外的组件子拓扑。不过,我们目前并未提供具体的方案。

目前,对于更改 session_manager.cml 或负责编译 .cml 文件的 BUILD.gn 文件的 CL,安全团队将自动进行抄送。

隐私注意事项

拥有会话组件的隐私隐患与安全性隐患类似。虽然 Fuchsia 平台可以向会话所有者发布指南和最佳做法,但除了限制向会话组件提供的功能(及其各自的后备实现)之外,它没有其他机制来强制执行政策。

文档

我们将更新或移除现有的会话框架文档,以与本文档中的内容保持一致。

缺点、替代方案和未知情况

除了默认的“不进行任何操作”外,没有其他替代方案。其中的风险包括长期存在会导致混淆的过时概念(“会话框架”),并且目前还没有专门的团队来减少歧义或解决技术问题。

早期技术和参考资料