在本節中,您將瞭解 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