首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
把代理关进笼子:coop-proxy 的 Landlock 与 Seatbelt 沙箱实战
📅 2026/10/27 1:49:29
✍️ 爱科研究院
👁 阅读 3,247
【免费下载链接】coopIsolated VM environment for running Claude Code and Codex项目地址https://gitcode.com/gh_mirrors/coop9/coop点击查看免费下载在 coop一个为 Claude Code / Codex 提供一次性隔离 VM 的 Rust CLI的凭证代理模式下真正持有 API Key 的不是虚拟机而是主机上的coop-proxy进程。本文带你实战看懂 coop-proxy 如何用 Linux 内核的Landlock和 macOS 的Seatbelt 沙箱把自己关进笼子即使代理被攻破也写不了文件、跑不了程序、连不了白名单之外的端口。 为什么代理比VM更需要看管先理解 coop 凭证代理解决的安全问题详见 docs/credential-proxy.md不开代理模式ANTHROPIC_API_KEY/OPENAI_API_KEY会被原样转发进虚拟机被提示注入的 agent 一读环境变量就能偷走密钥。开启代理模式真实密钥永远留在主机内存里由coop-proxy在转发请求时注入guest 里只有一个一次性的capability token能力令牌偷走也没用——它只授权访问本机代理换不出任何上游密钥。但这里诞生了一个新矛盾coop-proxy终结了来自不可信 guest 的连接、解析 HTTP、还手握真实密钥——它本身就是新的攻击面。设计文档 docs/design/issue-411-injecting-proxy.md 把话说得很直白代理被利用时的爆炸半径blast radius不能是整台主机。于是有了 issue #411 的第三片给代理上枷锁jailing。 Linux 方案Landlock 自我约束Landlock 是 Linux 5.13 引入的内核级访问控制机制核心特点对 coop-proxy 极为友好进程给自己上锁不需要 root、不需要守护进程进程调用restrict_self()后约束永久生效约束可继承锁一旦戴上后续创建的所有线程都自动继承按内核版本能力分级新特性在老内核上可以优雅降级。coop-proxy 在启动早期、tokio 运行时创建线程之前就完成自我约束见 coop-proxy/src/main.rs这样每个 worker 线程生来就在笼子里。三层手铐按内核能力分级具体实现在 coop-proxy/src/jail.rs代码叠了三个规则集ruleset每一层职责单一、状态可单独检查层级约束内容强度生效条件① 文件写入 程序执行拒绝一切新建/修改文件拒绝execve任何程序硬性要求fail-closed内核 ≥ 5.13ABI v1否则直接拒绝启动② 额外文件写入权拒绝 v2/v3 新增的写类权限refer、truncate 等尽力而为Best-effort老内核上静默丢弃③ TCP 出站白名单只允许 connect:443上游 HTTPS与:53DNS over TCPbind 仅限自己的监听端口尽力而为Best-effort内核 ≥ 6.7ABI v4注意一个精妙的细节Landlock 里执行Execute权限属于读族如果只在写族取反里处理execve会漏网。源码里专门单独处理了AccessFs::Executejail.rs 第 133–139 行——这种魔鬼细节正是沙箱实战中最容易翻车的地方。优雅降级老内核不会被一刀切拒绝这是本方案最值得新手学习的设计完整规格见 docs/design/proxy-jail-graceful-degradation.md宿主机内核文件写入程序执行TCP 出站限制≥ 6.7❌ 拒绝❌ 拒绝✅ 仅限:443/:535.13 – 6.6❌ 拒绝❌ 拒绝⚠️ 不限制该内核无 Landlock 网络规则 5.13拒绝启动——设计取舍非常克制高价值拒绝写文件 执行是底线达不到就 fail-closed网络限制是锦上添花老内核上放弃而不是让整个代理起不来。项目刻意不提供--no-jail逃生通道给生产路径——coop主程序从不传这个参数它只存在于仓库内测试中coop-proxy/tests/gate.rs。 macOS 方案Seatbelt 外部代扣macOS 没有进程内自我约束的沙箱所以改由启动器launcher代劳coop在 src/proxy.rs 的confined_command()里把coop-proxy包进sandbox-exec挂上 Seatbelt 策略文件 src/seatbelt-proxy.sb。策略的思路是默认全拒逐项放行deny default✅ 文件读动态链接器、/etc/resolv.conf等进程活着总得能读✅ 只绑定 loopback 监听端口 接受 SSH 反向隧道入站✅ 出站仅限 TCP/UDP:443与:53✅ 唯一的exec许可sandbox-exec替换执行代理二进制本身——通过-D PROXY_BIN...参数把许可精确锁死在这个绝对路径上❌ 其余一切文件写、执行其他程序、其他网络出站sandbox-exec虽然已被 Apple 官方标记为 deprecated仍被 Chromium 等大量使用但它是 macOS 上最务实的进程沙箱 CLI设计文档 issue-411 第 14 节 也坦承了这一点。 沙箱不能自说自话一次自我验证最容易被忽略的工程细节沙箱必须被断言而不只是被设计。coop-proxy 内置了--jail-selftest模式coop-proxy/src/jail.rs在已经上锁的进程里做四项探测探测动作期望结果在临时目录创建文件被拒PermissionDenied执行/bin/sh -c exit 0被拒连接非上游端口47821被拒仅当网络层生效时连接127.0.0.1:443不被沙箱拒只判是不是笼子拦的四项全过才打印 PASS并以 0 退出。VM 集成测试在两种后端上都会跑它Linux 直接运行macOS 用与生产完全一致的sandbox-exec -D PROXY_BIN... -p profile方式套壳运行tests/integration.sh。还有一个防假阳性的单测probe_fails_when_unconfined 保证没有上锁的进程必然自检失败——否则集成测试里的PASS就是一句空话。⚠️ 诚实的边界这个笼子拦不住什么docs/trust-model.md 用按构造接受的限制一节明确列出了边界新手读安全设计最该学这种坦诚端口级不是主机级Landlock/Seatbelt 按端口过滤被完全攻陷的代理仍可能连到别的主机的:443。上游身份由代理内部的 TLS 校验 固定Host在上一层兜底guest 无法改指目标Linux 的 UDP 出站不受限Landlock 网络规则只管 TCP5.13–6.6 内核TCP 出站不限量开放出站因此降级运行时会打印reduced scope警告coop-proxy/src/main.rsfail-closed地板级约束写 执行建立失败时代理在开始服务前退出coop的就绪探测连不上整个 VM 启动中止——宁可不跑也不裸奔。 快速上手三步验证你的主机想知道自己的机器处于哪一档跟着做克隆并构建含coop与coop-proxy两个二进制git clone https://gitcode.com/gh_mirrors/coop9/coop cd coop cargo build --workspace --release看内核版本uname -r对照上面的降级表预判结果≥ 6.7 才是完整笼子。跑沙箱自检./target/release/coop-proxy --jail-selftest输出里writeBLOCKED execBLOCKED ... PASS表示约束真实生效net-scopingdegraded则表示你的内核处于 5.13–6.6 档文件/执行层仍在仅 TCP 出站未收敛。 延伸阅读索引文件内容coop-proxy/src/jail.rsLandlock 三层规则集与自检探测的完整实现src/proxy.rsmacOS 下sandbox-exec套壳启动逻辑src/seatbelt-proxy.sbSeatbelt 策略文件单一定义源启动器与测试共用docs/credential-proxy.md凭证代理的用户向说明与平台支持docs/trust-model.md完整威胁模型与已接受限制docs/design/issue-411-injecting-proxy.md代理整体设计为什么是主机侧、为什么不用 MITMdocs/design/proxy-jail-graceful-degradation.md分级降级的实现规格含 Landlock API 的坑赞分享【免费下载链接】coopIsolated VM environment for running Claude Code and Codex项目地址https://gitcode.com/gh_mirrors/coop9/coop点击查看免费下载相关推荐deepseek-harness 的 Landlock 子进程沙箱入口包deepseek-ai/node-addon-landlock-run 解析与实战deepseek harness 的 Landlock 子进程沙箱入口包deepseek ai/node addon landlock run 解析与实战人工智能AI AgentAgent 框架DeepSeekDeepSeek Harness 中 Landlock 子进程沙箱的入口包deepseek-ai/node-addon-landlock-run 实战解析DeepSeek Harness 中 Landlock 子进程沙箱的入口包deepseek ai/node addon landlock run 实战解析人工智能AI AgentAgent 框架DeepSeekOpenHuman cwd_jail 深度解析跨平台目录沙箱与 Landlock / Seatbelt / AppContainer 三后端实现OpenHuman cwd_jail 深度解析跨平台目录沙箱与 Landlock / Seatbelt / AppContainer 三后端实现 本文基于 O人工智能AI Agent多智能体Agent 编排工具调用桌面应用上一篇开发者指南如何为 medical-research-skills 编写并贡献你的第一个 SKILL.md 技能附模板与25项评分标准下一篇小红书笔记如何不像AI写的Growth Lab的DAI改写方法与自动合规检查脚本清单创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/27 1:49:29
题解:洛谷 P2871 [USACO07DEC] Charm Bracelet S
2026/10/27 1:49:29
ParseHubBot 配置完全教程:环境变量 + 平台级代理/Cookie 池终极指南
2026/10/27 1:49:29
艾尔登法环存档编辑器 ER-Save-Editor:把属性和装备一次配到位,不必删档重练
2026/10/27 2:39:36
强化学习数学原理:从网格世界到贝尔曼方程的决策建模
2026/10/27 2:39:36
DataGridView动态列:元数据驱动建表与类型映射实战
2026/10/27 2:39:36
DHCP报文分析与交换机配置:从半截交互定位故障
2026/10/27 2:39:36
贝尔曼方程手推指南:从网格世界到策略梯度的数学闭环
2026/10/27 2:39:36
贝尔曼方程的数学本质:从马尔可夫性到收缩映射的完整推导
2026/10/27 2:34:35
OpenClaw高级内存服务设计与优化实践
2026/10/27 0:04:20
WorkBuddy_新建任务与工作模式19_“模式选错”的典型代价
2026/10/27 0:04:20
WorkBuddy_新建任务与工作模式20_新手推荐路径
2026/10/27 0:04:20
ZerolanLiveRobot开发者指南:如何扩展一个新服务并注册自定义事件(附完整实战示例)
2026/10/26 11:29:50
全国计算机二级C语言真题PDF高效刷题指南
2026/10/26 0:03:29
requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南
2026/10/26 11:29:49
递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现
2026/10/25 22:15:16
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/26 11:29:48
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/25 12:42:56
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)