軟體隔離模型

在本節中,您將瞭解 Zircon 核心物件如何讓 Fuchsia 可 遵循最低權限原則、隔離流程 應用程式只需要的功能

沙箱

建立新程序時,該程序沒有任何功能。運作流程 讓創作者透過一組 帳號代碼 傳遞到這個檔案換句話說,空白程序沒有環境權限

因此,建立程序時通常會有一些初始資源 和功能fuchsia.process.Launcher 通訊協定提供低階介面,可透過可執行檔和一組核心物件句柄,在系統上建立新程序。大多數軟體都會使用元件架構,這可簡化設定新程序的作業,讓您能以標準的初始功能集執行程式碼。您稍後將進一步瞭解元件。

程序收到的部分初始句柄是程序掛載至其命名空間的目錄。

命名空間

命名空間 包含容器 並控制此程序能影響多少 Fuchsia 系統。 這會有效定義處理程序的沙箱規則。

命名空間會填入各種資源物件,包括:

  • 檔案:包含二進位資料的物件。
  • 目錄:包含其他物件的物件。
  • 通訊端:開啟時建立連線的物件,例如 直線號。
  • 通訊協定和服務:在開啟時提供結構化服務的物件。
  • 裝置:提供硬體資源存取權的物件。

程序建立者會根據一組必要功能,填入命名空間的內容。處理程序無法將物件新增至自己的命名空間,因為這會讓該處理程序自行授予存取這些物件的功能。

練習:命名空間

Fuchsia 中的大部分程序都代表與

在本練習中,您將探索元件命名空間的內容。

啟動模擬器

如果您尚未啟動執行個體,請啟動支援網路功能的 FEMU:

ffx emu start workstation_eng.x64 --headless

尋找目標元件

在上一節中,您已瞭解處理與元件相關聯的程序 以 .cm 副檔名命名。請參考下列範例程序清單:

TASK                     PSS PRIVATE  SHARED   STATE NAME
j: 1027               507.8M  507.4M                 root
  p: 1061             564.4k    564k     36k         bin/bootsvc
  p: 1150            4264.4k   4264k     36k         bin/component_manager
  j: 1479             228.4k    228k
    p: 1583           228.4k    228k     36k         pwrbtn-monitor.cm
  j: 1484             532.4k    532k
    p: 1599           532.4k    532k     36k         svchost.cm
  j: 1544             402.4k    304k
    p: 1633           402.4k    304k    232k         netsvc.cm
  j: 1681             296.4k    296k
    p: 1733           296.4k    296k     36k         console-launcher.cm
  j: 1799            7232.4k   7232k
    p: 1825          7232.4k   7232k     36k         archivist.cm
  ...
  j: 31294           1872.2K   1872K 
    p: 31331         1872.2K   1872K     20K         http-client.cm 

在本練習中,您將使用 http-client.cm 做為探索目標。

連線至目標元件

為了探索元件的命名空間,必須判斷元件的 系統中的元件 ID這就是元件的名稱。

使用 ffx component show 指令列出元件的其他詳細資料,包括元件名稱:

ffx component show http-client.cm

這個指令會輸出類似以下的內容:

$ ffx component show http-client.cm
               Moniker: /core/network/http-client 
                   URL: #meta/http-client.cm
                  Type: CML static component
                  ...

您可以使用 ffx component explore 指令,在目標元件環境中開啟互動式殼層。請嘗試針對 http-client 元件執行以下操作:

ffx component explore /core/network/http-client

在探索殼層中,使用 ls 指令列出根目錄的內容:

[explore shell] $ ls
bin
exposed
ns
out
runtime
svc

探索命名空間

您可以在環境中的 /ns 路徑下方找到元件的命名空間

在「探索殼層」中,列出命名空間的內容:

[explore shell] $ ls /ns
config
pkg
svc

以下簡要說明各元素的特色:

  • config/:元件的設定資料
  • pkg/:元件套件的內容
  • svc/:元件可用的系統服務

在「探索」殼層中,列出傳入的 /ns/svc 的內容 目錄。這個目錄包含服務節點,代表提供給此元件的系統服務。

[explore shell] $ ls /ns/svc
fuchsia.logger.LogSink
fuchsia.net.name.Lookup
fuchsia.posix.socket.Provider

這些服務都可透過廣為人知的通訊協定 (由 Fuchsia 介面定義語言 (FIDL) 存取 API 稍後,我們會更詳細地探討 FIDL 通訊協定,以及如何存取各種服務。

在探索殼層中,輸入 exit 即可返回開發機器上的殼層:

[explore shell] $ exit