tmpfs挂载可隔离第三方不可信写行为:指定挂载点(如/tmp)、启用noexec/nosuid/nodev限制执行与提权、设size硬上限防oom、清空初始文件防残留、配合--read-only实现根层只读。
用 tmpfs 挂载隔离第三方不可信写行为,核心是“只给内存空间、不给落盘路径、限制执行权限”,让不可信组件只能在受控的内存区域里读写,且无法持久化、无法提权、无法逃逸。
明确挂载点并禁用危险操作
选择第三方组件实际写入的目录(如 /tmp、/var/run、/app/cache),用 --tmpfs 显式挂载,并强制关闭执行与权限继承能力:
- noexec:阻止在该路径下运行任何二进制文件或脚本,防恶意 payload 执行
- nosuid:忽略 setuid/setgid 位,切断通过伪造权限提升进程权限的路径
- nodev:禁止创建设备文件,避免绕过沙箱访问硬件或内核接口
- mode=1770 或 mode=0750:设置严格目录权限,防止其他用户篡改或窥探
严格限制内存用量,防资源耗尽攻击
第三方组件若存在无限写入逻辑(如日志刷屏、缓存膨胀),可能耗尽主机内存。必须用 size 参数设硬上限:
一款AI开发辅助工具,主要用于从 AI 编程会话日志(Clawdbot、Claude Code、Codex)中提取对话记录。该功能用于在用户要求导出提示词历史、会话日志或 `.jsonl` 格式的会话文件时使用,适合需要提升相关任务效率的用户。
- 根据组件典型负载预估峰值,再上浮 20%~30%,例如:size=32m 或 size=128m
- 不设 size 时,tmpfs 默认可占用主机内存一半,极易引发 OOM killer 杀死关键进程
- 结合 docker stats 或 cgroup 监控,确认容器内 tmpfs 实际使用未持续逼近上限
避免路径覆盖与挂载竞争
很多第三方镜像默认在构建层已写入 /tmp 或 /var/tmp 内容,若不清理就挂载 tmpfs,旧文件会被隐藏但未删除,造成行为不一致甚至权限残留:
- 启动前确保目标路径为空——用 ENTRYPOINT 脚本在挂载后清空非必要文件,或改用 --mount 语法配合 bind + tmpfs 分层控制
- 不要对同一路径重复挂载(如先 -v /tmp 后 --tmpfs /tmp),后者会覆盖前者,但 Docker 不报错,易被误认为失败
- 若组件依赖特定初始文件(如空 socket 目录),应在 tmpfs 挂载后由初始化脚本按需创建,而非打包进镜像
配合只读根文件系统进一步收窄权限
tmpfs 解决的是“写哪里”,而 --read-only 解决的是“能写什么”:
- 加 --read-only 启动容器,使整个容器根层只读
- 仅对必需写入路径用 --tmpfs 显式放开(如 --tmpfs /tmp:rw,noexec,nosuid,size=16m)
- 这样即使第三方程序尝试向 /etc、/usr/bin 等路径写入,也会立即报错 Permission denied,而非静默失败或污染磁盘










