RFC-0194:附录:会话

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

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

Gerrit 更改
作者
审核人
提交日期(年-月-日)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 中的以下悬而未决的问题:

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

设计初衷

在 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 和网络浏览器显示为其会话组件的后代。

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

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

启动和拓扑

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

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

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

功能

与任何组件一样,会话组件的父级会定义会话组件的沙盒。以下列出了平台提供给会话组件的超集功能(不完整)。部分功能在运行时将不可用,具体取决于产品的平台配置。

目前,通过对一组产品软件包标签添加或移除构建时软件包依赖项,即可实现产品配置,从而实现给定产品上给定会话组件实际可用的一组功能。

系统生命周期控制

会话组件可以:

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

图形

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

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

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

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

系统明确不会向会话提供以下敏感功能:

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

输入

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

系统明确不会向会话提供以下敏感功能:

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

系统设置

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

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

持久性数据

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

实现

更新文档

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

限制会话功能路由

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 文件,安全团队会自动抄送。

隐私注意事项

使用会话组件对隐私的影响与对安全性的影响类似。虽然 Fuchsia 平台可以向会话所有者发布准则和最佳实践,但除了限制向会话组件提供的功能(及其各自的后备实现)之外,它没有任何强制执行政策的机制。

文档

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

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

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

在先技术和参考文档