overlayfs是构建轻量沙箱的理想机制,依托写时复制与分层隔离:lowerdir为只读基础系统,upperdir承载运行时写入且需独立分区,workdir专用于内部操作;挂载须启用redirect_dir=on、index=on及noexec,nosuid,nodev,并配合命名空间与seccomp-bpf实现完整隔离。

OverlayFS 是构建轻量、隔离、可复用沙箱环境的理想底层机制,核心在于利用其天然的写时复制(Copy-on-Write)和分层隔离能力,让运行环境既保持只读基础系统安全,又支持运行时个性化写入,且所有变更完全限定在上层目录中,不污染原始镜像或宿主系统。
明确三层职责并严格隔离目录
沙箱的安全性始于目录结构的物理隔离与权限控制:
-
lowerdir:存放只读的基础系统快照(如精简版 rootfs、预装工具链的 tar 解压目录),建议使用
chown root:root+chmod 555锁定,禁止任何写入或执行权限提升 -
upperdir:专用于沙箱运行时写操作,必须挂载在独立可写分区(如 tmpfs 或专用 ext4 分区),避免与 lowerdir 共享文件系统;创建后立即
chown -R sandbox:sandbox并禁用 setuid/setgid 位 - workdir:必须与 upperdir 同一文件系统,仅作 OverlayFS 内部原子操作使用;初始化后清空内容,不存放用户数据,也不暴露给沙箱进程
启用关键挂载选项加固行为
默认挂载缺乏细粒度控制,需显式开启安全相关选项:
-
redirect_dir=on:确保rename()等目录操作在 merged 视图下正确重定向到 upperdir,防止因路径解析绕过上层覆盖逻辑 -
index=on:启用硬链接索引机制,避免多个 hardlink 指向同一 lower 文件时触发错误 copy-up,保障元数据一致性 -
不使用
default_permissions(已废弃且无实际作用),依赖内核原生 VFS 权限检查即可 - 挂载时添加
noexec,nosuid,nodev(若宿主文件系统支持),从 mount 层面限制危险操作
沙箱启动与生命周期管理
每次启动新沙箱,都应视为一次全新实例,而非复用旧 upperdir:
- 为每个沙箱分配独立的
upperdir和workdir(例如按 PID 或 UUID 命名),避免跨沙箱状态泄露 - 启动前清空或重建 upperdir(
rm -rf $upper && mkdir -p $upper),杜绝残留配置或恶意持久化文件 - 沙箱退出后,直接
umount /merged并递归删除整个 upperdir —— 所有运行时修改即刻销毁,真正实现“用完即焚” - 若需保留部分输出,仅允许显式
cp或rsync从 merged 中拷出白名单路径(如/tmp/output/),禁止直接访问 upperdir 内部结构
配合命名空间实现完整隔离视图
OverlayFS 提供文件系统层隔离,需结合 Linux 命名空间补全沙箱边界:
- 使用
unshare --user --pid --mount --net --uts创建独立命名空间,再在其中挂载 overlay - 在 mount namespace 内将 merged 目录 bind-mount 到
/,使沙箱进程看到的根目录即为叠加视图 - 配合
chroot或pivot_root切换根目录,并禁用/proc、/sys的全局可见性(仅挂载必要子集) - 通过
seccomp-bpf过滤危险系统调用(如mount,init_module),防止逃逸到宿主文件系统











