軟體隔離模型

在本節中,您將瞭解 Zircon 核心物件如何讓 Fuchsia 遵循最低權限原則,隔離程序並只授予程序所需的功能。

沙箱

建立新程序時,該程序沒有任何功能。這個程序完全仰賴創作者透過一組換句話說,空白程序沒有環境權限

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

某些指派給程序的初始控點是該程序掛接至其命名空間的目錄。

命名空間

這麼做可有效地定義該程序執行時的沙箱規則。

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

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

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

練習:命名空間

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

啟動模擬器

如果您尚未啟動執行個體,請啟動支援網路功能的 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

稍後,我們將更深入探討 FIDL 通訊協定和各種服務存取方式。

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

[explore shell] $ exit