RFC-0194:附录:会话

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

RFC-0092 的附录,批准了 RFC-0092 中未决的决定。

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

摘要

注意:此 RFC 是 RFC-0092 的附录,批准了 RFC-0092 中未决的决定。

此文档:

  • 弃用了“会话框架”一词
  • 介绍了 Fuchsia 平台与旧版“会话框架”概念相关的当前状态
  • 定义了“会话组件”及其在 Fuchsia 平台中的角色
  • 开始编纂 Fuchsia 安全团队在审核路由到产品组件的功能方面的角色

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

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

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

  • 针对其他进程(例如输入流水线管理)的按需平台自有库/组件的概念
  • 解决在许多运行时(例如 Flutter、Android、Chrome 等)中跨越许多产品时复杂性爆炸的目标,这些产品在单个团队下属于单个保护伞

以下内容已保留,并继续由平台拥有,但计划弃用:

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

回答了原始 RFC-0092 中的以下未解决的问题:

  • 平台向会话提供了哪些图形功能?
  • 提供了哪些输入功能?
  • 哪些功能类是敏感的,并且永远不会提供给会话?

设计初衷

在 RFC-0092 中引入会话组件这一概念时,关于平台向会话提供的功能的问题基本上都未解决。此后,Fuchsia 平台设计人员已掌握足够的信息,可以详细说明向所有会话提供的功能,更重要的是,说明哪些类型的功能永远不会提供。

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

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

  • 提供客户端库和可重用组件以供在会话内部使用,以解决各种问题,包括:
    • 窗口管理
    • 最终用户应用生命周期
    • 输入处理
    • 通知
    • 等等
  • 定义组件角色和职责,例如元素提议者,以供在会话内部使用。
  • 引入“元素”概念,作为组件的新的一流用法。

由于“会话框架项目”的范围不确定,因此该术语也变得不确定且模棱两可。

利益相关方

教员

hjfreyer@google.com

审核人

本部分将在审核期间更新。

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

Consulted

neelsa@google.com

Socialization

草稿文档已发送给 Scenic、Input、Workstation、Trusted Platform Services 团队进行讨论。

设计

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

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

如今,任何 Fuchsia 产品的组件拓扑中都存在单个会话组件。未来,预计会有多个会话同时运行。会话组件的身份 (网址) 由产品所有者选择。拓扑中的位置由平台定义,产品所有者无法更改。由于组件架构的性质,会话组件无法了解其在拓扑中的位置。

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

启动和拓扑

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

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

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

功能

与任何组件一样,会话组件的父级定义了会话组件的沙盒。以下是不完整的列表,其中列出了平台向会话组件提供的功能超集。根据产品对平台的配置,某些功能在运行时将不可用。

如今,通过在 产品软件包标签集上添加或移除 build 时软件包依赖项,可以完成产品配置,从而确定给定产品上给定会话组件实际可用的功能集。

系统生命周期控制

会话组件可以:

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

图形

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

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

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

会话并非 必须 指定视图。例如:在无头设备上运行的无头会话不会指定视图。

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

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

输入

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

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

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

系统设置

会话可以访问和管理系统设置,例如软件更新渠道和活跃的 WLAN 网络,包括:

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

持久保存数据

会话提供了必要的功能,用于向会话内部的组件提供加密存储。其中包括加密设备 存储功能和账号管理 服务。账号管理服务可用于执行身份验证和访问账号加密存储。

实现

更新文档

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

限制会话功能路由

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

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

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

安全注意事项

概览

平台向会话组件提供的功能限制了会话组件的能力。这具有重要的意义:如果会话组件被授予将第三方软件作为其子级启动的能力,则可以了解有关这些软件实例的很多信息。例如:它拥有其子实例的永久性存储,并且可以配置为从该存储读取和写入数据。它还可以了解软件的身份 (网址) 以及其他信息。

审核职责

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

产品所有者负责会话组件边界的产品端的功能路由的安全属性:Fuchsia 平台安全团队无法看到在会话组件或其子级中做出的任何路由决策。

如今,存在一些审核和强制执行工具。其中包括:

  • fx scrutiny
  • 路由允许名单,该名单可能因产品而异

需要改进的审核和强制执行工具来支持特定于产品的安全团队。组件框架团队的目的是改进 scrutiny 和路由允许名单机制,以实现更好的递归,从而更轻松地将工具应用于平台根以外的组件子拓扑。不过,目前还没有具体的计划。

目前,如果 CL 更改了 session_manager.cml或负责编译 .cml文件的BUILD.gn文件,安全团队将自动抄送这些 CL。

隐私注意事项

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

文档

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

缺点、替代方案和未知因素

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

在先技术和参考文档