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 中未解決的問題:

  • 平台提供哪些圖形功能給工作階段?
  • 提供哪些輸入功能?
  • 哪些能力類別屬於敏感類別,且絕不會提供給工作階段?

提振精神

在 RFC-0092 中,工作階段元件是以概念的形式引入,因此關於工作階段的平台提供功能的問題,大多是開放式的。自那時起,Fuchsia 平台設計人員已充分瞭解所有工作階段提供哪些功能,並且更重要的是,瞭解哪些類型的功能永遠不會提供。

由於會話元件是平台軟體和產品軟體之間的重要安全界線,因此,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

社交化

草稿已傳送至 Scenic、Input、Workstation、Trusted Platform Services 團隊進行討論。

設計

「工作階段元件」是一種元件。每個 Fuchsia 產品都會在工作階段元件 (及其子元件) 中封裝使用者體驗。「使用者體驗」一詞的用途廣泛,涵蓋使用觸控/滑鼠/鍵盤互動的傳統圖形體驗,以及使用單一 RGB LED 和多個硬體按鈕的簡單體驗,或僅使用網路 I/O 的體驗。

簡單的產品可能會指定沒有子項的會話元件,而複雜的產品則有許多會話元件的子項。舉例來說,工作站工作階段會將元件例項化,以便顯示系統使用者介面、指令列殼層和網頁瀏覽器,做為其工作階段元件的子項。

目前,單一工作階段元件會出現在任何 Fuchsia 產品的元件拓撲中。日後預計會同時執行多個工作階段。產品擁有者會選擇工作階段元件的身分 (網址)。拓樸圖中的順序由平台定義,產品擁有者無法變更。由於元件架構的特性,工作階段元件無法瞭解自己在拓樸圖中的相對位置。

工作階段元件提供所有平台提供的功能,可用於打造該產品的使用者體驗。工作階段元件是元件拓撲中最具權限的非平台元件之一。因此,定義平台和工作階段元件之間的邊界,可做為 Fuchsia 的重要安全性和控管層。

啟動和拓樸

工作階段元件是 session_manager.cml 的子項,而 session_manager.cmlcore.cml 的子項。session_manager.cml 是可啟用重要行為的中介平台二進位檔:

  • 您可以設定工作階段元件的網址,而無須編輯 core.cml 或任何其他平台 .cml 檔案
  • 在某些產品中,系統會在啟動時自動啟動工作階段元件 (依慣例,這會用於使用者和使用者偵錯版本)
  • 在其他情況下,您可以為 session_manager 設定空白的工作階段網址,讓系統在啟動工作階段元件前中斷啟動程序 (依慣例,這會用於 eng 建構的「暫停」變種版本)
  • 在 eng 建構作業中,工作階段元件可在執行階段重新啟動或由其他元件取代

session_manager.cml 會設定可從平台傳遞至產品的功能的明確上限

功能

如同其他元件,工作階段元件的父項會定義工作階段元件的沙箱。以下是平台可供會話元件的超級集合功能 (不完整清單)。視產品的平台設定而定,部分功能在執行階段時將無法使用。

產品設定 (以及特定產品的特定工作階段元件實際可用的功能集合) 目前是透過在一系列產品套件標籤上新增或移除建構時的套件依附元件,來完成。

系統生命週期控制

會話元件可執行以下操作:

  • 指示平台重新啟動工作階段元件。
  • 要求裝置硬體重新啟動或暫停。
  • 將裝置恢復原廠設定。

圖形

針對具有圖形使用者介面的產品:

工作階段元件提供必要的功能,可指定單一 View 做為使用者體驗的根 View。在單一工作階段的生命週期中,檢視畫面的選擇可能會有所變動。舉例來說,如果與工作階段的互動因閒置而遭到鎖定,根檢視畫面可能會切換至鎖定畫面。

此外,工作階段也可以在其根 View 中嵌入子 View,以便委派給其他軟體。嵌入子檢視畫面的功能並非工作階段專屬:這是 Fuchsia 的系統合成器屬性。

不必使用工作階段指定檢視畫面。舉例來說,在無頭裝置上執行的無頭工作階段不會指定 View。

下列敏感功能「不會」提供給工作階段:

  • 對顯示硬體進行低階控制。Fuchsia 可確保透過系統轉譯器進行 UI 轉譯,在所有產品中提供最低程度的效能和功能 (例如無障礙疊加層)。

輸入

會話元件提供可觀察輸入事件的功能。這些事件包括將重要事件路由至檢視畫面階層中的焦點檢視畫面、路由滑鼠和觸控事件,以及註冊鍵盤快速鍵通知的功能。日後可能需要額外的輸入功能,才能支援與其他輸入裝置 (虛擬和實體) 的互動。

下列敏感功能「不會」提供給工作階段:

  • 對 HID 輸入事件的低階存取權。

系統設定

這個工作階段可存取及管理系統設定,例如軟體更新管道和有效的 Wi-Fi 網路,包括:

  • 輸入政策,例如鍵盤鍵盤映射和自動重複率
  • 顯示政策,例如光源感應器模式
  • 國際化
  • 軟體更新管道
  • 硬體設定,例如 WLAN (WiFi)、藍牙或相機設定。

永久性資料

這個工作階段會提供必要功能,為工作階段內的元件提供加密儲存空間。包括加密裝置儲存空間功能和帳戶管理服務。帳戶管理服務可用於執行驗證,以及存取帳戶加密儲存空間。

實作

更新說明文件

  • 刪除工作階段架構概念說明文件。
  • 在詞彙中新增「工作階段元件」。

限制工作階段能力轉送

session_manager.cml 元件包含提供給工作階段的功能的完整清單。如果在 session_manager.cml 中加入會造成安全性或隱私權風險的選取功能,將導致平台建構作業失敗。

我們會與 Fuchsia 安全性團隊合作,產生並維護禁止使用的功能清單。可能的候選項包括:

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

安全性考量

總覽

平台提供給工作階段元件的功能會限制工作階段元件的功能。這點具有重要意義:如果會話方塊元件具備以自身子項啟動第三方軟體的功能,就能瞭解許多關於這些軟體執行個體的資訊。舉例來說,它擁有子項例項的永久性儲存空間,且可設定為讀取及寫入該儲存空間。它還可以瞭解軟體的 ID (網址) 和其他資訊。

稽核責任

平台 session_manager.cml 元件會設定從平台授予工作階段元件的所有功能的上限。Fuchsia 安全性團隊有責任稽核這個超集合,並確保其適用於所有可能的產品。對這些功能的任何變更都必須經過安全性審查

產品擁有者負責在工作階段元件邊界產品端一次性執行能力導向的安全性屬性:Fuchsia 平台安全性團隊無法查看工作階段元件或其子項中做出的任何導向決策。

目前已有部分稽核和執行工具。包括:

  • fx scrutiny
  • 路由許可清單 (可能因產品而異)

我們需要改善稽核和執行工具,以支援特定產品的安全性團隊。元件架構團隊的目標是改善 scrutiny 和路由許可清單機制,以便更有效地進行遞迴,讓您更輕鬆地將工具套用至平台根目錄以外的元件子拓樸。不過,目前沒有具體的計畫。

目前,如果 CL 變更 session_manager.cml 或負責編譯 .cml 檔案的 BUILD.gn 檔案,安全團隊會自動收到副本。

隱私權注意事項

使用工作階段元件時,隱私權的影響與安全性類似。雖然 Fuchsia 平台可以向工作階段擁有者發布指南和最佳做法,但除了限制提供給工作階段元件的功能 (以及其相應的後端實作) 之外,並沒有任何機制可強制執行政策。

說明文件

我們會更新或移除現有的 Session Framework 說明文件,以符合本文件中的內容。

缺點、替代方案和未知事項

除了預設的「不執行任何動作」之外,沒有其他選項。其中的風險包括持續使用會造成混淆的過時概念 (「工作階段架構」),且目前沒有專責團隊來減少模糊不清的情況或解決技術問題。

既有技術與參考資料