跳转到内容
你正在查看尚未发布的 main 分支的文档,其中可能包含尚未进入任何发布版本的变更。

权限边界

用户范围的安装不需要提权:一切都位于用户自己的目录中。整机范围的安装要写入系统位置,因此需要管理员权限;Niobium 以一种封闭的能力授予这些权限,而不是提供一个通用的提权进程。

对于整机范围的事务,setup 会以管理员权限启动它自身的第二个副本(视平台而定,通过系统授权提示、runas、pkexec 或 sudo)。这个助手:

  • 只在一个事务期间存在;
  • 只接受一份固定的带类型操作列表:创建目录;写入、追加或复制文件;重命名;删除文件或目录树;设置或删除 current 指针;准备、激活、丢弃或删除一项系统集成;报告可用空间;
  • 没有任何运行程序、加载库或建立网络连接的操作;
  • 用事务 id 和一个随机 nonce 认证每一条消息,并拒绝被重放的消息 id。

未提权的 setup 负责下载和验证发布,并把它暂存到用户的缓存中;助手把暂存的文件复制到位。

助手自行计算其策略,不接受来自未提权一方的路径:

  • 它只在 <install base>/<product id> 内写入,其中安装基目录在 macOS 上是 /Library/Application Support,在 Windows 上是 %ProgramFiles%,在 Linux 上是 /opt;
  • 系统集成只写到它已知的系统集成目录;
  • 复制的源必须位于暂存区或安装根目录中,打开时不跟随符号链接;拥有多个硬链接的文件会被拒绝。

助手限制的是它写到哪里,而不是写什么。内容已经由未提权的进程对照已签名的发布验证过。如果攻击者已经控制了执行安装的用户的会话,他们可以让助手把任意内容写进该产品的整机安装根目录,并为其注册服务或快捷方式;但不能借助它写入其他产品或任意系统位置。这一剩余风险是被接受的。

使用 C ABI 的嵌入宿主永远不会弹出提权提示:只有当宿主进程本身已经提权时,整机范围才可用。

在真实的 Windows 或 Linux 系统上进行的整机范围安装尚未验证;参见状态与平台上的 N1-UJ-02。线路协议在 ipc-v1 中规定。