軟體隔離模型

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

沙箱

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

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

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

命名空間

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

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

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

程序的 建立者會根據 所需的功能處理程序無法將物件新增至本身的 命名空間,因為這基本上是向該程序自行授予 存取這些物件

練習:命名空間

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

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

啟動模擬器

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

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這就是所謂的元件 猴子 ,直接在 Google Cloud 控制台實際操作。

使用 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