軟體隔離模型

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

沙箱

建立新的程序後會沒有任何功能。 您可能也表示,空白程序沒有大環境授權

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

指派給程序的部分初始控點是程序掛接至其命名空間中的目錄。

命名空間

這能有效定義處理程序的沙箱規則。

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

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

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

運動:命名空間

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

啟動模擬器

如果您尚未有一個執行中的執行個體,請啟動模擬器:

ffx emu start --headless

啟動完成後,模擬器會輸出下列訊息並傳回:

Logging to "$HOME/.local/share/Fuchsia/ffx/emu/instances/fuchsia-emulator/emulator.log"
Waiting for Fuchsia to start (up to 60 seconds)........
Emulator is ready.

尋找目標元件

您在上一節中學到,與元件相關聯的程序會以 .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