随笔 · admin

Bubblewrap和Seccomp 原理

Bubblewrap(bwrap)文件系统隔离

1. 核心作用

Bubblewrap(bwrap)通过 Linux Mount Namespace,为 LLM / Agent 构造一个独立的文件系统视图,控制它能看到、读取和修改哪些目录。

2. 三种目录映射方式

bwrap 参数 能否看到 能否读取 能否修改
--ro-bind /usr /usr 是 是 否
--bind A/session001 /workspace 是 是 是
没有映射的 /home/work/.ssh 否 否 否
--tmpfs /tmp 是 是 是

3. 常用参数含义

参数 含义
--ro-bind A B 将宿主机目录 A 映射到沙盒目录 B,只读
--bind A B 将宿主机目录 A 映射到沙盒目录 B,可读写
--tmpfs A 在指定路径创建独立的临时文件系统
--proc /proc 创建沙盒自己的进程信息视图
--dev /dev 创建沙盒自己的设备目录
--chdir /workspace 进入指定工作目录

4. OnWorks 多用户隔离示例

4.1 宿主机目录结构

/home/work/workspace/
├── A/
│   ├── session001/
│   └── session002/
└── B/
    └── session001/

4.2 启动 A 用户的 session001

bwrap \
  --ro-bind /usr /usr \
  --ro-bind /lib /lib \
  --ro-bind /lib64 /lib64 \
  --ro-bind /bin /bin \
  --ro-bind /etc /etc \
  --proc /proc \
  --dev /dev \
  --tmpfs /tmp \
  --bind /home/work/workspace/A/session001 /workspace \
  --chdir /workspace \
  /bin/bash

4.3 沙盒内部的文件系统视图

/
├── usr/          # 只读
├── lib/          # 只读
├── lib64/        # 只读
├── bin/          # 只读
├── etc/          # 只读
├── proc/         # 独立进程视图
├── dev/          # 独立设备目录
├── tmp/          # 独立临时目录
└── workspace/    # 当前 Session 可读写

4.4 隔离效果

A 用户的 Agent 只能访问映射进沙盒的目录。

例如:

  • 可以读取 /usr、/bin 等只读目录。
  • 可以修改 /workspace 下的文件。
  • 无法通过当前文件系统视图访问 B 用户的工作目录。
  • 无法访问未映射的宿主机 SSH 密钥目录。

注意: 这里的隔离指当前 Mount Namespace 中的文件系统可见性。实际安全性还取决于符号链接、其他 Namespace、设备暴露、进程权限及其他挂载方式。

5. 需要区分的安全机制

机制 核心作用
bwrap / Mount Namespace 控制文件系统可见范围和读写范围
User Namespace 隔离沙盒内外的用户身份与 UID/GID 映射
UID / GID 控制文件访问权限
Capabilities 限制进程拥有的 Linux 特权
Seccomp 限制进程能够使用的系统调用

三个核心判断

  • --ro-bind:看得到、读得到、改不了。
  • --bind:看得到、读得到、改得了。
  • 不映射:在当前文件系统视图中看不到、无法直接读取和修改。

Seccomp 系统调用过滤

1. 核心作用

Seccomp(Secure Computing)是 Linux 内核提供的系统调用过滤机制。

它的作用是:限制进程能够调用哪些 Linux 系统调用,防止 Agent 使用不必要或危险的内核功能。

2. 工作原理

Agent 执行命令
      │
      ▼
调用 Linux 系统调用
      │
      ▼
Seccomp BPF 过滤器
      │
  ┌───┴───┐
  ▼       ▼
允许     拒绝
执行     执行
          │
          ▼
     返回 EPERM

Seccomp 通过 BPF 过滤器检查系统调用及其参数,根据预先设置的规则决定如何处理。

常见处理方式包括:

  • ALLOW:允许系统调用。
  • ERRNO:拒绝调用并返回指定错误码。
  • KILL:终止进程。
  • TRAP:向进程发送 SIGSYS 信号。

3. 常见系统调用示例

系统调用 作用
mount() 挂载文件系统
ptrace() 跟踪、调试其他进程
reboot() 重启系统
unshare() 创建新的 Namespace
setns() 加入已有 Namespace

Seccomp 可以根据策略禁止这些系统调用。

4. Seccomp 在 Agent 沙盒中的作用

机制 管理对象 核心问题
bwrap / Mount Namespace 文件系统 能看到、读取、修改什么?
UID / GID 用户身份与文件权限 以谁的身份运行?
Capabilities 系统特权 拥有哪些特权?
Seccomp 系统调用 能使用哪些内核功能?

5. 总结

Agent 沙盒的安全隔离需要多种 Linux 安全机制协同工作:

  • bwrap / Mount Namespace:限制文件系统访问范围。
  • UID / GID:控制文件访问权限。
  • Capabilities:限制进程的系统管理特权。
  • Seccomp:限制进程可以调用的内核功能。

一句话总结:

bwrap 限制文件访问范围,Linux 权限限制操作权限,Seccomp 限制内核功能调用。