软件隔离模型

在本部分中,您将了解 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 作为探索的目标。

连接到目标组件

如需探索组件的命名空间,您需要确定系统中该组件的唯一标识符。这称为 名称 ,了解所有最新动态。

使用 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 命令打开交互式 shell 目标组件环境内部在 http-client内试用 组件:

ffx component explore /core/network/http-client

在探索 Shell 中,使用 ls 命令列出根目录的内容:

[explore shell] $ ls
bin
exposed
ns
out
runtime
svc

探索命名空间

您可以在 /ns 路径下的 /ns 路径下找到组件的命名空间 环境

在探索 shell 中,列出命名空间的内容:

[explore shell] $ ls /ns
config
pkg
svc

以下是每个元素的一些要点:

  • config/:组件的配置数据
  • pkg/:组件软件包的内容
  • svc/:可供组件使用的系统服务

在探索 shell 内,列出传入的 /ns/svc 的内容 目录。此目录包含 服务节点 表示向该组件提供的系统服务。

[explore shell] $ ls /ns/svc
fuchsia.logger.LogSink
fuchsia.net.name.Lookup
fuchsia.posix.socket.Provider

上述每一个服务都可通过知名的协议访问,该协议由 Fuchsia 接口定义语言 (FIDL) 界面。 我们稍后会详细介绍 FIDL 协议以及如何访问各种服务。

在探索 Shell 中,输入 exit 以返回到您的 开发机器:

[explore shell] $ exit