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

社会化

草稿文档已发送给 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 文件
  • 在某些产品上,会话组件会在启动时自动启动(按照惯例,这适用于用户 build 和 userdebug build)
  • 在其他设备上,可以通过为 session_manager 配置一个空的会话网址,指示启动进程在启动会话组件之前中断(按照惯例,这用于“暂停”的工程 build 变体)
  • 在 eng build 中,会话组件可以在运行时被其他组件重启或替换

session_manager.cml 用于配置可从平台传递到产品的能力的明确上限

功能

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

产品配置(以及给定产品上给定会话组件实际可用的功能集)目前是通过添加或移除一组产品软件包标签上的 build-time 软件包依赖项来实现的。

系统生命周期控制

会话组件可以:

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

图形

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

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

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

会话不需要指定视图。例如:在无头设备上运行的无头会话不会指定视图。

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

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

输入

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

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

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

系统设置

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

  • 输入政策,例如键盘键映射和自动重复率
  • 显示政策,例如光传感器模式
  • 国际化
  • 软件更新渠道
  • 硬件设置,例如 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 平台可以向会话所有者发布指南和最佳实践,但除了限制提供给会话组件的功能(及其各自的后备实现)之外,它没有其他机制来强制执行政策。

文档

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

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

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

在先技术和参考资料