<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>沙箱 on Kalend's Blog</title><link>https://blog.kalend.top/tags/%E6%B2%99%E7%AE%B1/</link><description>Recent content in 沙箱 on Kalend's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Sun, 02 Aug 2026 08:30:00 +0800</lastBuildDate><atom:link href="https://blog.kalend.top/tags/%E6%B2%99%E7%AE%B1/index.xml" rel="self" type="application/rss+xml"/><item><title>AI Agent 安全实战：从 MCP 漏洞到权限沙箱，生产环境必须知道的事</title><link>https://blog.kalend.top/2026/08/02/2026-08-02-agent-security-production-guide.html/</link><pubDate>Sun, 02 Aug 2026 08:30:00 +0800</pubDate><guid>https://blog.kalend.top/2026/08/02/2026-08-02-agent-security-production-guide.html/</guid><description>&lt;p&gt;上一篇我们拆了 MCP 生态的 5 条攻击路径——30+ CVE、20 万台服务器中招、1.5 亿次下载处于风险。数据摆完，一个现实问题浮出来：&lt;strong&gt;知道了攻击者怎么打进来，接下来怎么防？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这篇文章不重复列漏洞。我要讲的是生产环境的安全工程——权限怎么设计、沙箱怎么选、审批流怎么建、供应链怎么审。每一条都有对应的技术方案和真实案例，看完直接能落地。&lt;/p&gt;
&lt;h2 id="owasp-agentic-top-10ai-agent-的专属安全标准"&gt;OWASP Agentic Top 10：AI Agent 的专属安全标准
&lt;/h2&gt;&lt;p&gt;2025 年 12 月，OWASP 正式发布了 &lt;strong&gt;Agentic AI Top 10&lt;/strong&gt;——这是继 LLM Top 10 之后，专门针对自主 AI Agent 的安全风险标准。两套标准互补：LLM Top 10 关注模型层面的漏洞（prompt injection、数据泄露），Agentic Top 10 关注 Agent 作为「自主行动体」带来的结构性风险。&lt;/p&gt;
&lt;p&gt;核心风险条目：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;编号&lt;/th&gt;
					&lt;th&gt;风险&lt;/th&gt;
					&lt;th&gt;一句话解释&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Ag1&lt;/td&gt;
					&lt;td&gt;Agentic 机制滥用&lt;/td&gt;
					&lt;td&gt;Agent 被诱导执行非预期动作&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Ag2&lt;/td&gt;
					&lt;td&gt;工具链安全&lt;/td&gt;
					&lt;td&gt;调用的工具本身有漏洞或恶意&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Ag3&lt;/td&gt;
					&lt;td&gt;多 Agent 信任链&lt;/td&gt;
					&lt;td&gt;Agent 间传递的信息被污染&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Ag4&lt;/td&gt;
					&lt;td&gt;上下文投毒&lt;/td&gt;
					&lt;td&gt;恶意内容注入 Agent 的上下文窗口&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Ag5&lt;/td&gt;
					&lt;td&gt;权限提升&lt;/td&gt;
					&lt;td&gt;Agent 突破任务边界获取更高权限&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Ag6&lt;/td&gt;
					&lt;td&gt;记忆/状态污染&lt;/td&gt;
					&lt;td&gt;持久化记忆被投毒，影响后续决策&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Ag7&lt;/td&gt;
					&lt;td&gt;工作流劫持&lt;/td&gt;
					&lt;td&gt;攻击者篡改 Agent 的执行流程&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Ag8&lt;/td&gt;
					&lt;td&gt;身份冒用&lt;/td&gt;
					&lt;td&gt;Agent 假冒其他身份执行操作&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Ag9&lt;/td&gt;
					&lt;td&gt;资源耗尽&lt;/td&gt;
					&lt;td&gt;无限循环、Token 滥用导致成本失控&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Ag10&lt;/td&gt;
					&lt;td&gt;审计缺失&lt;/td&gt;
					&lt;td&gt;没有日志，出事无法追溯&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这不是学术分类——每一条都对应我在 #32 中拆解过的攻击路径。区别在于：#32 从攻击者视角讲「怎么打进来」，现在切换到防御者视角讲「怎么建防线」。&lt;/p&gt;
&lt;h2 id="权限最小化agent-不该用你的钥匙开门"&gt;权限最小化：Agent 不该用你的钥匙开门
&lt;/h2&gt;&lt;p&gt;权限设计是第一道防线，也是最容易做错的一环。很多团队的 Agent 直接复用开发者的个人凭证——GitHub token、AWS key、数据库密码。一旦 Agent 被注入恶意指令，攻击者等于拿到了你的全套权限。&lt;/p&gt;
&lt;h3 id="三个核心原则"&gt;三个核心原则
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;原则一：Agent 身份独立化。&lt;/strong&gt; Agent 需要自己的身份，不是复用人的凭证。微软在 2026 年 7 月发布的《Least Privilege for AI Agents》白皮书中明确建议：每个 Agent 分配独立的服务账号，权限范围严格限定在任务所需之内。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;原则二：Task-scoped RBAC。&lt;/strong&gt; 传统 RBAC 是按角色分配权限——「开发者」角色拥有所有开发工具的访问权。Agent 安全需要的是按任务分配权限：一个负责「读代码并生成文档」的 Agent，不应该有写入数据库的权限。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;原则三：Tool binding 而非 prompt 约束。&lt;/strong&gt; 很多人在 system prompt 里写「不要删除文件」「不要访问外部网络」——这不叫安全，叫「请攻击者用 prompt injection 覆盖你的规则」。权限控制必须在工具层强制执行（runtime checks），不是在 prompt 里写规矩。&lt;/p&gt;
&lt;h3 id="amazon-的真实教训"&gt;Amazon 的真实教训
&lt;/h3&gt;&lt;p&gt;Amazon 内部在多次成本高昂的生产事故后，强制推行了「AI 辅助代码变更需显式审批」的政策。任何由 AI Agent 生成或修改的代码变更，必须经过人工审批才能合入主分支。这不是不信任 AI，而是承认：&lt;strong&gt;自动化操作的错误率虽然低，但一旦出错，影响面比人工操作大得多。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;落地建议：30 天内盘点你的 Agent 身份，移除宽泛角色，引入任务级 RBAC。优先审计那些拥有「admin」或「write-all」权限的 Agent 服务账号。&lt;/p&gt;
&lt;h2 id="沙箱隔离选型五种技术怎么选"&gt;沙箱隔离选型：五种技术，怎么选
&lt;/h2&gt;&lt;p&gt;Agent 有了独立身份，下一步是限制它能接触到的资源。沙箱隔离的核心思想：即使 Agent 被注入恶意指令，它也突破不了运行时的边界。&lt;/p&gt;
&lt;h3 id="五种主流技术对比"&gt;五种主流技术对比
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;技术&lt;/th&gt;
					&lt;th&gt;代表工具&lt;/th&gt;
					&lt;th&gt;隔离强度&lt;/th&gt;
					&lt;th&gt;性能开销&lt;/th&gt;
					&lt;th&gt;适用场景&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Bubblewrap (namespace)&lt;/td&gt;
					&lt;td&gt;Codex CLI&lt;/td&gt;
					&lt;td&gt;中&lt;/td&gt;
					&lt;td&gt;极低&lt;/td&gt;
					&lt;td&gt;文件系统隔离，开发环境&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;gVisor (用户态内核)&lt;/td&gt;
					&lt;td&gt;Google Cloud Run&lt;/td&gt;
					&lt;td&gt;高&lt;/td&gt;
					&lt;td&gt;中&lt;/td&gt;
					&lt;td&gt;容器级隔离，云端部署&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;MicroVM (Firecracker)&lt;/td&gt;
					&lt;td&gt;Docker Sandbox, Northflank&lt;/td&gt;
					&lt;td&gt;最高&lt;/td&gt;
					&lt;td&gt;高 (128MB+/VM)&lt;/td&gt;
					&lt;td&gt;企业级隔离，多租户&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Container (Docker)&lt;/td&gt;
					&lt;td&gt;Docker Sandboxes&lt;/td&gt;
					&lt;td&gt;中-高&lt;/td&gt;
					&lt;td&gt;低&lt;/td&gt;
					&lt;td&gt;通用场景&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;WASM&lt;/td&gt;
					&lt;td&gt;Cosmonic&lt;/td&gt;
					&lt;td&gt;中&lt;/td&gt;
					&lt;td&gt;极低&lt;/td&gt;
					&lt;td&gt;插件级隔离&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="codex-vs-claude-code两种截然不同的策略"&gt;Codex vs Claude Code：两种截然不同的策略
&lt;/h3&gt;&lt;p&gt;Codex CLI 默认强制启用 Bubblewrap 沙箱，所有文件操作和 shell 命令都在 namespace 隔离中执行。Claude Code 则走可配置路线——开发者可以调整沙箱的严格程度，甚至完全关闭。&lt;/p&gt;
&lt;p&gt;两种策略各有道理：Codex 适合「安全优先，体验次之」的场景；Claude Code 适合「开发者清楚自己在做什么，需要灵活度」的场景。我的建议是：&lt;strong&gt;生产环境用 Codex 的强制模式，开发环境可以用 Claude Code 的可配置模式。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="docker-sandbox-的-microvm-升级"&gt;Docker Sandbox 的 microVM 升级
&lt;/h3&gt;&lt;p&gt;2026 年 7 月，Docker 发布了基于 microVM 的沙箱隔离方案。传统容器共享宿主机内核，逃逸漏洞虽然罕见但存在（如 CVE-2024-21626）。microVM 在容器和宿主机之间加了一层虚拟化——每个 Agent 运行在独立的微虚拟机中，即使逃逸容器，也撞上虚拟化层。&lt;/p&gt;
&lt;p&gt;性能代价？每个 microVM 最少需要 128MB 内存。对于跑几十个 Agent 的场景，内存开销不小。但对于高安全需求的生产环境，这是目前最可靠的隔离方案。&lt;/p&gt;
&lt;h3 id="场景推荐"&gt;场景推荐
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;开发/测试&lt;/strong&gt;：Bubblewrap 或 Container，够用就行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内部工具/CI&lt;/strong&gt;：Container + 网络隔离&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;面向客户的 Agent&lt;/strong&gt;：gVisor 或 MicroVM&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多租户 SaaS&lt;/strong&gt;：MicroVM，没商量&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="敏感操作审批流哪些事不能让-agent-自己决定"&gt;敏感操作审批流：哪些事不能让 Agent 自己决定
&lt;/h2&gt;&lt;p&gt;权限再小、沙箱再硬，总有些操作必须人工把关。关键问题是：怎么定义「哪些操作必须审批」？&lt;/p&gt;
&lt;h3 id="必须人工审批的操作"&gt;必须人工审批的操作
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;操作类型&lt;/th&gt;
					&lt;th&gt;为什么必须审批&lt;/th&gt;
					&lt;th&gt;典型后果&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;删除资源&lt;/td&gt;
					&lt;td&gt;误删无法自动恢复&lt;/td&gt;
					&lt;td&gt;数据丢失&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;支付/转账&lt;/td&gt;
					&lt;td&gt;资金不可逆&lt;/td&gt;
					&lt;td&gt;直接经济损失&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;生产部署&lt;/td&gt;
					&lt;td&gt;影响线上用户&lt;/td&gt;
					&lt;td&gt;服务中断&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;凭证变更&lt;/td&gt;
					&lt;td&gt;可能导致权限失控&lt;/td&gt;
					&lt;td&gt;安全事件&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;外部 API 调用&lt;/td&gt;
					&lt;td&gt;无法撤回&lt;/td&gt;
					&lt;td&gt;数据泄露&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="approval-gate-实现方案"&gt;Approval Gate 实现方案
&lt;/h3&gt;&lt;p&gt;最简单的实现：在 Agent 的 tool 定义中，对敏感操作标记 &lt;code&gt;requires_approval: true&lt;/code&gt;。当 Agent 尝试调用该工具时，框架暂停执行，发送审批请求到 Slack/邮件/IM，等待人工确认后继续。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Agent 调用 &amp;#34;delete_resource(id=xxx)&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → 框架检测到 requires_approval
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → 暂停执行，发送审批通知
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → 人工审核 → 批准/拒绝
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → 批准：继续执行 → 拒绝：终止并记录
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="读写分离原则"&gt;读写分离原则
&lt;/h3&gt;&lt;p&gt;一个被低估的安全设计：&lt;strong&gt;把读操作和写操作拆成不同的 Agent。&lt;/strong&gt; 读 Agent 只有查询权限，写 Agent 有修改权限但必须通过审批流。这样即使读 Agent 被注入恶意指令，它也压根没有写入的能力——不是「不让它写」，而是「它物理上不能写」。&lt;/p&gt;
&lt;h2 id="供应链安全审计mcp-server-不是随便装的"&gt;供应链安全审计：MCP Server 不是随便装的
&lt;/h2&gt;&lt;p&gt;MCP 生态的供应链攻击已经不是假设性威胁。在 #32 中我们拆解过 npm typosquatting、后门代码、恶意 MCP Server 等真实案例。这里讲怎么防。&lt;/p&gt;
&lt;h3 id="安装前必做检查"&gt;安装前必做检查
&lt;/h3&gt;&lt;p&gt;装一个 MCP Server 之前，至少检查这几项：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;检查项&lt;/th&gt;
					&lt;th&gt;怎么查&lt;/th&gt;
					&lt;th&gt;红线&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;来源&lt;/td&gt;
					&lt;td&gt;GitHub/GitLab 仓库地址&lt;/td&gt;
					&lt;td&gt;无仓库或个人小号&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Star 数&lt;/td&gt;
					&lt;td&gt;低于 100 需警惕&lt;/td&gt;
					&lt;td&gt;低于 10 且刚发布&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;维护频率&lt;/td&gt;
					&lt;td&gt;最近 commit 时间&lt;/td&gt;
					&lt;td&gt;超过 6 个月无更新&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;依赖树&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;npm audit&lt;/code&gt; / &lt;code&gt;pip-audit&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;有已知 CVE 未修&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;代码审查&lt;/td&gt;
					&lt;td&gt;快速扫一眼主入口文件&lt;/td&gt;
					&lt;td&gt;有混淆代码或可疑网络请求&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="运行时监控"&gt;运行时监控
&lt;/h3&gt;&lt;p&gt;安装检查只是第一道关。运行时监控更关键：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;网络流量审计&lt;/strong&gt;：MCP Server 启动后，用 &lt;code&gt;netstat&lt;/code&gt; 或 &lt;code&gt;ss&lt;/code&gt; 检查它连接了哪些外部地址&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文件系统监控&lt;/strong&gt;：用 &lt;code&gt;inotifywait&lt;/code&gt; 或 auditd 监控它读写了哪些文件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;进程行为&lt;/strong&gt;：&lt;code&gt;strace -f -e trace=network&lt;/code&gt; 追踪它的系统调用&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="docker-mcp-的供应链方案"&gt;Docker MCP 的供应链方案
&lt;/h3&gt;&lt;p&gt;Docker 推出的 MCP marketplace 对上架的 Server 做了三重检查：静态代码扫描、依赖树审计、运行时行为监控。虽然不能保证 100% 安全，但比直接从 npm 装一个未审核的包靠谱得多。&lt;/p&gt;
&lt;p&gt;建议：&lt;strong&gt;生产环境只用经过审核的 MCP Server，开发环境可以用社区的但必须容器化隔离。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="全链路审计追踪出事能追溯"&gt;全链路审计追踪：出事能追溯
&lt;/h2&gt;&lt;p&gt;安全的最后一道防线是审计。如果 Agent 被注入恶意指令并执行了破坏性操作，你需要能回答三个问题：&lt;strong&gt;做了什么、什么时候做的、是谁触发的。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="审计日志必须包含的字段"&gt;审计日志必须包含的字段
&lt;/h3&gt;&lt;p&gt;每一条 tool call 记录必须包含：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;时间戳&lt;/strong&gt;：精确到毫秒&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent ID&lt;/strong&gt;：哪个 Agent 执行的&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Task ID&lt;/strong&gt;：属于哪个任务&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tool 名称&lt;/strong&gt;：调用了什么工具&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;输入参数&lt;/strong&gt;：传了什么参数&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;执行结果&lt;/strong&gt;：成功/失败/返回值&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;触发来源&lt;/strong&gt;：用户手动触发还是 Agent 自动调用&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;审批状态&lt;/strong&gt;：是否经过人工审批&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="异常行为检测"&gt;异常行为检测
&lt;/h3&gt;&lt;p&gt;基于审计日志，可以设置告警规则：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;单个 Agent 在短时间内调用大量写操作&lt;/li&gt;
&lt;li&gt;Agent 访问了任务范围之外的工具&lt;/li&gt;
&lt;li&gt;Agent 尝试读取凭证文件（&lt;code&gt;.env&lt;/code&gt;、&lt;code&gt;.ssh&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Agent 向外部 IP 发送大量数据&lt;/li&gt;
&lt;li&gt;同一 Agent 在非工作时间执行操作&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些规则不需要复杂的 ML 模型——简单的阈值检测就能拦住 80% 的异常行为。&lt;/p&gt;
&lt;h2 id="落地安全检查清单"&gt;落地安全检查清单
&lt;/h2&gt;&lt;p&gt;最后附一个可直接执行的 checklist。按这个过一遍，你的 Agent 安全基线就有了：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;权限层&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Agent 使用独立服务账号，不复用个人凭证&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 权限按任务分配（Task-scoped），不是按角色&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 敏感工具标记 &lt;code&gt;requires_approval&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 读写 Agent 分离&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;沙箱层&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Agent 在隔离环境中运行（Container/MicroVM/gVisor）&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 网络访问白名单限制&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 文件系统只读挂载（除必要写入目录）&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 资源配额（CPU/内存/Token）设置上限&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;审批层&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 删除、支付、部署、凭证变更必须人工审批&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 审批流有超时机制（避免无限等待）&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 审批记录持久化存储&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;供应链层&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; MCP Server 安装前完成来源/Star/依赖检查&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 运行时网络流量和文件访问监控&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 生产环境只用审核过的 MCP Server&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;审计层&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 所有 tool call 有完整日志&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 异常行为告警规则已配置&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 日志保留至少 90 天&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 支持按 Agent/Task/时间范围查询&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;这篇文章的核心观点只有一句：&lt;strong&gt;Agent 的安全不是「写好 prompt」的问题，是「建好工程」的问题。&lt;/strong&gt; 权限、沙箱、审批、供应链、审计——这五层防线少一层都不行。&lt;/p&gt;
&lt;p&gt;如果你正在生产环境跑 AI Agent，建议先拿上面的 checklist 对照一遍。有具体问题欢迎评论区聊。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;系列文章：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.kalend.top/2026/06/29/mcp-security-vulnerabilities.html/" &gt;MCP 安全血案：5 条攻击路径、20 万台服务器中招&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;本文：Agent 安全实战（防御侧）&lt;/li&gt;
&lt;/ul&gt;

 &lt;/blockquote&gt;</description></item><item><title>Codex CLI 上手：OpenAI 的沙箱安全编程方案</title><link>https://blog.kalend.top/2026/07/12/2026-07-12-codex-cli-sandbox.html/</link><pubDate>Sun, 12 Jul 2026 08:30:00 +0800</pubDate><guid>https://blog.kalend.top/2026/07/12/2026-07-12-codex-cli-sandbox.html/</guid><description>&lt;p&gt;AI 编程 Agent 能执行任意命令，这意味着它也能删库、泄露密钥、安装后门。&lt;strong&gt;信任问题不解决，自主编程就是空谈。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;OpenAI 的 Codex CLI 选择了一条不同的路：不靠&amp;quot;请你信任我&amp;quot;，而是用沙箱把 Agent 关进笼子里。97,000+ Star、Rust 重写、Apache-2.0 开源——这是目前安全设计最完善的终端编程 Agent。&lt;/p&gt;
&lt;h2 id="为什么需要安全编程"&gt;为什么需要&amp;quot;安全编程&amp;quot;
&lt;/h2&gt;&lt;p&gt;AI 编程工具有个天然的取舍：&lt;strong&gt;给的自由越多，风险越大。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Agent 需要执行 shell 命令才能干活——装依赖、跑测试、提交代码。但 shell 命令是无限制的：&lt;code&gt;rm -rf /&lt;/code&gt; 也是合法命令。你给 Agent 一个任务，它可能顺手执行了你没想到的操作。&lt;/p&gt;
&lt;p&gt;已经出过事了。2026 年多个 AI 编程工具被曝出安全问题：沙箱逃逸、权限提升、未授权网络访问。企业用户不敢用，因为一次意外就可能影响生产环境。&lt;/p&gt;
&lt;p&gt;Codex CLI 的答案是：&lt;strong&gt;默认不信任 Agent，用系统级隔离强制约束行为。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="codex-cli-是什么"&gt;Codex CLI 是什么
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;项目&lt;/th&gt;
					&lt;th&gt;值&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;GitHub&lt;/td&gt;
					&lt;td&gt;github.com/openai/codex&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Stars&lt;/td&gt;
					&lt;td&gt;97,204&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;语言&lt;/td&gt;
					&lt;td&gt;Rust（从 TypeScript 重写）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;许可证&lt;/td&gt;
					&lt;td&gt;Apache-2.0&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;开发商&lt;/td&gt;
					&lt;td&gt;OpenAI&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;支持模型&lt;/td&gt;
					&lt;td&gt;GPT-5 系列、codex-1 专用模型&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Codex CLI 是 OpenAI 开源的终端编程智能体。三种形态：CLI 终端、VS Code 插件、Codex Cloud 云端。核心特点是&lt;strong&gt;把安全沙箱做成了系统级能力&lt;/strong&gt;，而不是靠 prompt 约束。&lt;/p&gt;
&lt;p&gt;Rust 重写不只是为了性能。Rust 的内存安全特性让沙箱实现本身更难被绕过——没有 use-after-free、没有 buffer overflow，攻击面从语言层就被收窄了。&lt;/p&gt;
&lt;h2 id="五层安全防线"&gt;五层安全防线
&lt;/h2&gt;&lt;p&gt;这是 Codex CLI 的核心卖点，也是它与其他工具拉开差距的地方。&lt;/p&gt;
&lt;h3 id="第一层三级沙箱模式"&gt;第一层：三级沙箱模式
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;read-only 只读，不能写文件、不能执行命令
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ 降低约束
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;workspace-write 可写项目目录，可执行本地命令（默认）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ 降低约束
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;danger-full-access 无限制访问（需要显式声明 danger）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;默认是 workspace-write&lt;/strong&gt;——Agent 只能修改当前项目目录的文件，不能动系统文件、不能改其他项目。想突破这个边界？必须显式声明 &lt;code&gt;danger-full-access&lt;/code&gt;，名字本身就提醒你这是危险操作。&lt;/p&gt;
&lt;h3 id="第二层审批控制"&gt;第二层：审批控制
&lt;/h3&gt;&lt;p&gt;沙箱管&amp;quot;能做什么&amp;quot;，审批管&amp;quot;什么时候需要问人&amp;quot;：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;策略&lt;/th&gt;
					&lt;th&gt;行为&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;untrusted&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;非信任命令都要问&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;on-request&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;沙箱内自由操作，越界时才问（推荐）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;never&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;完全自动，不问任何人&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;最佳实践：&lt;code&gt;--sandbox workspace-write --ask-for-approval on-request&lt;/code&gt;。Agent 在项目目录里自由干活，一旦要访问目录外的资源、使用网络、执行敏感命令，就停下来等你确认。&lt;/p&gt;
&lt;h3 id="第三层可写目录白名单"&gt;第三层：可写目录白名单
&lt;/h3&gt;&lt;p&gt;如果 Agent 需要写多个目录（比如同时改前端和后端），不用开 full-access，用 &lt;code&gt;writable_roots&lt;/code&gt; 白名单：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# config.toml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;sandbox_workspace_write&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;writable_roots&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;/home/user/frontend&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;/home/user/backend&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;精确控制哪些目录可写，其余一律只读。&lt;strong&gt;最小权限原则的工程实现。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="第四层平台原生隔离"&gt;第四层：平台原生隔离
&lt;/h3&gt;&lt;p&gt;Codex 不是用 Docker 容器做隔离，而是用操作系统原生的安全机制：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;平台&lt;/th&gt;
					&lt;th&gt;隔离机制&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;macOS&lt;/td&gt;
					&lt;td&gt;Seatbelt 框架（系统级沙箱）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Linux&lt;/td&gt;
					&lt;td&gt;bubblewrap（用户命名空间隔离）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Windows&lt;/td&gt;
					&lt;td&gt;双用户架构（CodexSandboxOffline/Online）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;WSL2&lt;/td&gt;
					&lt;td&gt;复用 Linux 的 bubblewrap 方案&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Windows 的实现比较巧妙：创建两个本地用户，&lt;code&gt;CodexSandboxOffline&lt;/code&gt;（防火墙阻断出站网络）和 &lt;code&gt;CodexSandboxOnline&lt;/code&gt;（允许网络），密码随机生成后用 DPAPI 加密存储。Agent 运行在受限用户下，天然无法访问你的个人文件。&lt;/p&gt;
&lt;h3 id="第五层自动审核"&gt;第五层：自动审核
&lt;/h3&gt;&lt;p&gt;设置 &lt;code&gt;approvals_reviewer = &amp;quot;auto_review&amp;quot;&lt;/code&gt; 后，审批请求不是弹给你，而是交给另一个 AI Agent 审核。&lt;strong&gt;Agent 审 Agent&lt;/strong&gt;——审核者有权拒绝越界操作，形成双重校验。&lt;/p&gt;
&lt;h2 id="安装与上手"&gt;安装与上手
&lt;/h2&gt;&lt;h3 id="macos--linux"&gt;macOS / Linux
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://chatgpt.com/codex/install.sh &lt;span class="p"&gt;|&lt;/span&gt; sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Linux 需要先装 bubblewrap：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Ubuntu/Debian&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install bubblewrap
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Fedora&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo dnf install bubblewrap
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="windows"&gt;Windows
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;powershell&lt;/span&gt; &lt;span class="n"&gt;-ExecutionPolicy&lt;/span&gt; &lt;span class="n"&gt;ByPass&lt;/span&gt; &lt;span class="n"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;irm https://chatgpt.com/codex/install.ps1 | iex&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="认证"&gt;认证
&lt;/h3&gt;&lt;p&gt;两种方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ChatGPT 账号&lt;/strong&gt;：运行 &lt;code&gt;codex&lt;/code&gt; 后选 &amp;ldquo;Sign in with ChatGPT&amp;rdquo;，Plus/Pro/Business 套餐包含 Codex 额度&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API Key&lt;/strong&gt;：设置 &lt;code&gt;OPENAI_API_KEY&lt;/code&gt; 环境变量&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="agentsmd"&gt;AGENTS.md
&lt;/h3&gt;&lt;p&gt;在项目根目录放一个 &lt;code&gt;AGENTS.md&lt;/code&gt;，告诉 Agent 项目上下文：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gh"&gt;# 项目说明
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;这是一个 Next.js 15 项目，使用 TypeScript + Tailwind CSS。
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gh"&gt;# 规则
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 测试用 vitest，不要用 jest
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 提交信息用 conventional commits 格式
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 不要修改 .env 文件
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Codex 启动时会自动读取这个文件，相当于给 Agent 一份项目手册。&lt;/p&gt;
&lt;h2 id="实战演示"&gt;实战演示
&lt;/h2&gt;&lt;h3 id="场景-1安全模式下重构代码"&gt;场景 1：安全模式下重构代码
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex --sandbox workspace-write --ask-for-approval on-request
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;在这个模式下，Agent 可以自由读写项目文件、运行测试。但当它尝试 &lt;code&gt;npm install&lt;/code&gt; 一个新包（需要网络）时，会弹出审批提示。你确认后才继续。&lt;/p&gt;
&lt;h3 id="场景-2cicd-管道中的静默模式"&gt;场景 2：CI/CD 管道中的静默模式
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex &lt;span class="nb"&gt;exec&lt;/span&gt; --sandbox workspace-write --ask-for-approval never &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;运行所有测试，如果有失败的修复它们，然后提交&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;exec&lt;/code&gt; 是一次性执行模式，跑完自动退出。配合 &lt;code&gt;--ask-for-approval never&lt;/code&gt; 适合自动化管道——但沙箱仍然生效，Agent 不能突破项目目录。&lt;/p&gt;
&lt;h3 id="场景-3goal-自主执行"&gt;场景 3：/goal 自主执行
&lt;/h3&gt;&lt;p&gt;在交互模式下输入 &lt;code&gt;/goal&lt;/code&gt;，Agent 进入自主循环：规划 → 执行 → 验证 → 继续，直到目标完成。沙箱和审批策略全程生效。&lt;/p&gt;
&lt;h2 id="与-claude-codeopencode-对比"&gt;与 Claude Code、OpenCode 对比
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;维度&lt;/th&gt;
					&lt;th&gt;Codex CLI&lt;/th&gt;
					&lt;th&gt;Claude Code&lt;/th&gt;
					&lt;th&gt;OpenCode&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;开发商&lt;/td&gt;
					&lt;td&gt;OpenAI&lt;/td&gt;
					&lt;td&gt;Anthropic&lt;/td&gt;
					&lt;td&gt;社区&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;语言&lt;/td&gt;
					&lt;td&gt;Rust&lt;/td&gt;
					&lt;td&gt;TypeScript&lt;/td&gt;
					&lt;td&gt;Go&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;安全设计&lt;/td&gt;
					&lt;td&gt;五层沙箱 + 平台原生隔离&lt;/td&gt;
					&lt;td&gt;沙箱 + 权限控制&lt;/td&gt;
					&lt;td&gt;BYOK，无内置沙箱&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;沙箱机制&lt;/td&gt;
					&lt;td&gt;bubblewrap/Seatbelt/Windows Sandbox&lt;/td&gt;
					&lt;td&gt;类似但实现不同&lt;/td&gt;
					&lt;td&gt;无&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;审批控制&lt;/td&gt;
					&lt;td&gt;三级策略 + 自动审核&lt;/td&gt;
					&lt;td&gt;有&lt;/td&gt;
					&lt;td&gt;基础&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;可写目录白名单&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;writable_roots&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;有&lt;/td&gt;
					&lt;td&gt;无&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;模型&lt;/td&gt;
					&lt;td&gt;GPT-5 系列 + codex-1&lt;/td&gt;
					&lt;td&gt;Claude 4 系列&lt;/td&gt;
					&lt;td&gt;75+ 模型&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;MCP 支持&lt;/td&gt;
					&lt;td&gt;✅&lt;/td&gt;
					&lt;td&gt;✅&lt;/td&gt;
					&lt;td&gt;✅&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;安全设计维度，Codex CLI 领先一个身位。&lt;/strong&gt; 它的沙箱不是应用层的权限检查，而是操作系统级的强制隔离——Agent 想逃逸，得先攻破 bubblewrap 或 Seatbelt。&lt;/p&gt;
&lt;p&gt;Claude Code 也有沙箱，设计思路类似，但实现深度不同。OpenCode 走的是 BYOK（Bring Your Own Key）路线，安全完全交给用户自己负责。&lt;/p&gt;
&lt;h2 id="谁该用-codex-cli"&gt;谁该用 Codex CLI
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;首选场景：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;企业/金融/医疗等安全敏感行业&lt;/strong&gt;：沙箱隔离是刚需，不是锦上添花&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenAI 生态用户&lt;/strong&gt;：已经用 GPT-5 系列，Codex CLI 是最自然的编程 Agent 选择&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;团队协作&lt;/strong&gt;：自动审核功能让多人共用 Agent 时有统一的安全策略&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CI/CD 集成&lt;/strong&gt;：静默模式 + 沙箱 = 安全的自动化编程&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;不太适合的场景：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;需要频繁切换多个 LLM 模型的用户（Codex 主要服务 OpenAI 模型）&lt;/li&gt;
&lt;li&gt;超长上下文任务（Claude 的长上下文更稳定）&lt;/li&gt;
&lt;li&gt;预算敏感的纯 API 用户（Codex-1 专用模型按 token 计费）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="结论"&gt;结论
&lt;/h2&gt;&lt;p&gt;AI 编程 Agent 的竞争正在从&amp;quot;谁能写更好的代码&amp;quot;转向&amp;quot;谁更值得信任&amp;quot;。Codex CLI 的五层安全防线不是营销话术，而是工程落地：操作系统级沙箱、最小权限白名单、Agent 审 Agent 的自动审核。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;沙箱不是限制，是 Agent 自主运行的前提。&lt;/strong&gt; 你得先确定它不会越界，才敢放手。Codex CLI 目前是安全机制最完善的终端编程 Agent。&lt;/p&gt;</description></item></channel></rss>