随笔 · 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 限制内核功能调用。