在本節中,您將瞭解 Zircon 核心物件如何讓 Fuchsia 遵循最低權限原則、隔離程序,並僅授予這些需要的功能。
沙箱
建立新的程序後會沒有任何功能。 您可能也表示,空白程序沒有大環境授權。
因此,程序通常會透過一些初始資源和功能建立。fuchsia.process.Launcher
通訊協定提供低階介面,可讓您透過可執行檔和一組核心物件控點在系統上建立新程序。大多數軟體都會使用元件架構,這可簡化設定新程序的程序,以一組標準初始功能執行某些程式碼。稍後您將進一步瞭解元件。
指派給程序的部分初始控點是程序掛接至其命名空間中的目錄。
命名空間
命名空間會填入各種資源物件,包括:
- 檔案:包含二進位資料的物件。
- 目錄:包含其他物件的物件。
- 通訊端:開啟時建立連線的物件,例如具名管道。
- 通訊協定和服務:在開啟時提供結構化服務的物件。
- 裝置:提供硬體資源存取權的物件,
程序的建立者會根據一組必要功能,填入命名空間內容。程序無法將物件新增至自己的命名空間,因為基本上,這樣會讓程序自行授予物件存取功能的能力。
運動:命名空間
在本練習中,您將探索元件命名空間的內容。
啟動模擬器
如果您尚未擁有執行中的執行個體,請透過網路支援啟動 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