OverlayFS安全沙箱的关键在于三层目录物理隔离、挂载选项强制约束及生命周期严格管控:lowerdir只读锁定,upperdir独立分区并清空重建,workdir同文件系统且不存用户数据;必须启用redirect_dir=on、index=on、noexec/nosuid/nodev;每次运行分配唯一目录,启动前重建、退出后销毁,并配合命名空间与seccomp-bpf实现完整隔离。

用 OverlayFS 构建安全沙箱,关键不在挂载命令本身,而在于三层目录的物理隔离、挂载选项的强制约束,以及沙箱生命周期的严格管控。它不是“搭个挂载点就完事”,而是围绕写时复制(COW)机制设计一整套防逃逸、防残留、防污染的操作规范。
明确划分 lower/upper/work 三层职责
每一层必须独立存放、权限锁定、文件系统分离:
-
lowerdir:只读基础系统,比如解压好的最小 rootfs 或 Squashfs 挂载点;执行
chown root:root && chmod 555,禁用执行与写入 -
upperdir:专用于运行时写入,必须放在独立可写分区(如 tmpfs 或专用 ext4 分区),不能和 lowerdir 共享同一挂载点;创建后立即
chown -R sandbox:sandbox并清除 setuid/setgid 位 - workdir:必须与 upperdir 同一文件系统,仅作 OverlayFS 内部原子操作使用;每次启动前清空内容,不存放任何用户数据
挂载时启用关键安全选项
默认挂载不具备防护能力,必须显式指定行为约束:
-
redirect_dir=on:确保
rename()等目录操作正确重定向到 upperdir,防止路径解析绕过覆盖逻辑 - index=on:启用硬链接索引,避免多个 hardlink 指向同一 lower 文件时触发错误 copy-up
- noexec,nosuid,nodev:从 mount 层面禁止执行、提权和设备访问,即使 upperdir 中混入恶意文件也难以生效
- 不启用
default_permissions(已废弃且无效),依赖内核 VFS 原生权限检查更可靠
沙箱启动与销毁需“用完即焚”
每个沙箱实例必须视为一次性环境,杜绝状态复用:
- 为每次运行分配唯一 upperdir 和 workdir(例如按 PID 或 UUID 命名),避免跨沙箱污染
- 启动前强制重建 upperdir:
rm -rf $upper && mkdir -p $upper,清除所有历史残留 - 退出后立即
umount /merged并递归删除整个 upperdir,所有修改彻底消失 - 如需保留输出,仅允许从 merged 目录显式拷出白名单路径(如
/tmp/output/),绝不直接访问 upperdir 内部结构
叠加命名空间与 seccomp 实现完整隔离
OverlayFS 只解决文件系统层隔离,必须配合其他内核机制才能形成真正安全边界:
- 用
unshare --user --pid --mount --net --ipc --uts创建独立命名空间,使进程、网络、挂载点互不可见 - 通过 seccomp-bpf 过滤危险系统调用(如
mount、chroot、ptrace),堵住逃逸通道 - 配合 cgroups 限制 CPU、内存、IO,防止资源耗尽型攻击
- 若需更高保障,可叠加 AppArmor 或 SELinux 策略,控制进程对文件路径的访问粒度


















