尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Monty文件系统挂载完全指南:read-only、read-write、overlay三种模式详解

Monty文件系统挂载完全指南:read-only、read-write、overlay三种模式详解 Monty文件系统挂载完全指南read-only、read-write、overlay三种模式详解【免费下载链接】montyA minimal, secure Python interpreter written in Rust for use by AI项目地址: https://gitcode.com/GitHub_Trending/monty3/montyMonty 是一个用 Rust 编写的极简安全 Python 解释器专为 AI 运行不可信代码而设计。它的沙箱默认没有任何文件系统通过「文件系统挂载」你可以把宿主机目录安全地映射进沙箱——本指南完整讲解 read-only、read-write、overlay 三种挂载模式的用法、安全边界与选型建议。为什么沙箱需要文件系统挂载Monty 的安全模型是「零环境权限」不挂载任何目录时open()和所有pathlib文件操作对任何路径都会抛出PermissionError/tmp、/etc、/proc、/dev、~以及宿主机工作目录全都不可达想访问文件只有两种途径挂载Mounts把宿主机目录映射到虚拟路径或用os回调在宿主代码中响应文件操作一个MountDir就把一个真实的宿主机目录映射到沙箱内的一个虚拟路径例如把./data挂载为沙箱里的/data。验证发生在构造时而非运行时刻——错误的virtual_path会立即报错而不是等到沙箱代码运行到一半才失败。 官方文档docs/filesystem.md三种挂载模式对比一图看懂差异模式读操作写操作默认read-only从宿主机目录读取抛出PermissionError❌read-write从宿主机目录读取直接写入宿主机❌overlay未修改的文件回落到宿主机读取写入捕获到内存feed 结束即丢弃✅ 默认模式字符串在 Rust 侧由MountMode枚举解析支持的值正是read-only、read-write、overlay三个源码见 crates/monty-fs/src/mount_mode.rs。read-only 模式只让 AI 看数据只读模式适合最常见的场景让 AI 分析你的一份 CSV、读取配置文件、解析日志文件但绝对不允许它改动任何东西。mount MountDir(host_path./data, virtual_path/data, moderead-only)在这种模式下任何写操作write_text、open(path, w)、mkdir、unlink、rename等都会触发PermissionError。这是把不可信代码指向生产数据的最安全选择。read-write 模式威力最大也最危险 ⚠️read-write模式让沙箱代码的每一次写入都直接落到你的真实磁盘上。官方文档特别警告沙箱写出的文件都是不可信输入不要执行它们。import也属于执行而且可能是间接的如果挂载的目录在sys.path上沙箱代码可以写入一个json.py宿主机下次import时就会运行它。✅ 使用建议仅当该目录不含代码和配置、且不在任何执行路径sys.path等上时才使用read-write。overlay 模式默认模式写操作自动隔离overlay覆盖层是默认模式采用copy-on-write写时复制语义读内存覆盖层中没有的文件直接从宿主机读取写全部捕获到内存宿主磁盘分毫不动沙箱代码仍能读回自己刚写的内容删除插入墓碑标记隐藏真实文件目录列表是真实条目与覆盖层条目的合并结果生命周期每次 feed 开始时覆盖层都是全新的feed 结束时所有改动全部丢弃这意味着 AI 可以随意乱写——创建临时文件、修改副本、反复试错——结束后一切恢复原状就像 Docker 容器里的可写层。覆盖层数据受memory_usage_limit预算约束默认 100 MB超出的读/写操作会抛出MemoryError。挂载选项与资源限制参数默认值说明host_path必填真实宿主机目录构造时即做规范化校验virtual_path必填沙箱内的绝对 POSIX 路径前缀任何宿主系统上都是 POSIX 风格modeoverlay上述三种模式之一write_bytes_limitNone每个 feed 通过该挂载写入的字节上限超出抛OSErrormemory_usage_limit100_000_000覆盖层数据与临时结果的内存预算超出抛MemoryError 所有参数都是keyword-only的——因为各挂载工具对宿主机路径在前还是虚拟路径在前约定不一对比docker -v与 nginx 的alias强制命名参数消除歧义。命令行快速挂载如果你只想快速跑一个 Python 文件试试montyCLI 提供了-m参数$ monty -m ./data::/data::ro -c from pathlib import Path; print(Path(/data).iterdir())格式为-m /host/path::/virtual/path[::mode[::write_limit_bytes]]用::分隔以免与 Windows 盘符冲突。mode可省略简写为ro默认、rw或overlay。完整参数说明见 docs/cli.md。安全机制结构性的隔离而非事后检查 Monty 的隔离不是检测到越界就拦截而是结构上无法越界每个挂载在创建时打开一次目录描述符cap_std::fs::Dir之后所有操作都相对于该描述符运行——..、符号链接、运行中途被替换的目录都无法逃出挂载范围..和.在虚拟命名空间中先于任何文件系统操作被折叠路径中的空字节一律拒绝超长路径超过 4096 字节和过深路径超过 64 级组件直接拒绝回传给沙箱的路径如Path.resolve()的结果永远是虚拟路径宿主路径不会泄漏进沙箱只读/读写模式拒绝绝对目标符号链接即使目标仍在挂载内overlay 模式拒绝一切符号链接只有常规文件可以被读写打开——FIFO、套接字、设备节点一律PermissionError确保挂载 I/O 永远不会阻塞挂载边界的核心实现位于 crates/monty-fs/src/mount_table.rs描述符与操作路由和 crates/monty-fs/src/path_security.rs虚拟路径策略。完整威胁模型见 docs/security.md。选型速查表我该用哪种模式场景推荐模式理由AI 分析数据文件、读取日志read-only零风险最保守AI 生成报告需要落盘且目录无代码read-write写入持久化注意目录安全AI 自由试错、临时计算文件默认overlay内存隔离用完即弃完全不接触宿主磁盘不挂载 os回调 /MemoryFile纯内存虚拟文件系统延伸资料文件系统官方文档docs/filesystem.md文件系统的完整限制清单limitations/filesystem.md挂载 crate 说明crates/monty-fs/README.md挂载行为测试用例crates/monty/test_cases/mount_fs__ops.py、crates/monty/test_cases/mount_fs__errors.py一句话总结默认用overlay给 AI 一个可乱写的练习本只读分析用read-onlyread-write请把目录当作不可信输入区来对待。【免费下载链接】montyA minimal, secure Python interpreter written in Rust for use by AI项目地址: https://gitcode.com/GitHub_Trending/monty3/monty创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表