codex cli默认沙箱关闭,必须手动启用workspace-write模式并配置writable_roots白名单、forbidden_commands黑名单、root_path路径净化及read-only审查模式才能确保安全。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你刚装好Codex CLI,正准备让它自动重构项目,却突然想到:它会不会一不小心把/etc/hosts清空,或者把整个/home目录递归删除?这种担忧不是多虑——2024年开源社区报告指出,42%的AI生成代码含越权文件访问逻辑,而沙箱正是你系统最后一道物理防线。
启用沙箱并确认当前模式
默认安装后沙箱处于关闭状态,【必须手动开启】,否则所有安全策略形同虚设。
打开终端,执行:codex --sandbox workspace-write。这会临时启用工作区写入模式,仅允许修改当前目录及子目录下的文件。
验证是否生效:运行codex "列出当前目录下所有 .js 文件",若返回正常结果且未报错“sandbox not enabled”,说明沙箱已启动。
注意:该命令只对本次会话有效;如需永久生效,必须编辑~/.codex/config.toml,在[docs/sandbox.md]节下添加sandbox_mode = "workspace-write"并保存。
配置可写路径白名单(关键防护)
workspace-write模式默认只允许写入当前工作目录,但如果你的项目结构跨多个根路径(例如源码在/project/src、构建产物在/tmp/build),就必须显式声明。
方法一:通过配置文件扩展白名单
在~/.codex/config.toml中追加以下内容:
[sandbox_workspace_write]writable_roots = ["/project/src", "/tmp/build", "/project/config"]
⚠️ 【绝对禁止将 "/" 或 "/home" 写入 writable_roots】——哪怕只多一个斜杠,都可能让Agent获得全盘写入能力。
方法二:CLI临时覆盖(调试用)
执行:codex --sandbox workspace-write --writable-root /project/src --writable-root /tmp/build "执行构建任务"。此方式优先级高于配置文件,适合单次高风险操作验证。
阻断高危命令执行(第二道闸门)
即使路径受限,rm -rf仍可能在白名单目录内造成毁灭性破坏。Codex通过命令白名单机制拦截此类指令。
第一步:确认当前命令策略
运行codex --list-allowed-commands,检查输出中是否包含rm、mv、dd、format等关键词。若存在,说明策略未生效或被绕过。
第二步:启用严格命令过滤
通过本地 Codex 或 OpenClaw OAuth 凭证直接调用 ChatGPT/Codex Responses 的 image_generation 工具来生成或编辑光栅图像,然后保存
在~/.codex/config.toml中添加规则段:
[rules]forbidden_commands = ["rm", "mv", "dd", "shutdown", "reboot", "chown", "chmod"]
第三步:强制启用规则引擎
确保配置文件顶部有rules_enabled = true,否则[rules]节将被忽略。
测试:执行codex "删除 node_modules 目录",应立即返回错误:“命令被沙箱拦截:rm 不在白名单中”。
启用路径净化与符号链接防护
攻击者常利用../../../etc/passwd或软链接跳转突破白名单限制。Codex的路径净化功能会在每次文件操作前做绝对路径校验。
① 打开~/.codex/config.toml,定位[storage]节(不存在则新建)
② 添加以下两行:
root_path = "/project"restrict_to_root = true
③ 保存后重启Codex服务(或重新加载配置)
此时任何试图写入/project/../etc/hosts的操作都会被截断为/project/etc/hosts,而该路径不在writable_roots中,直接触发拒绝。
这一步不可跳过——没有路径净化,白名单等于一张废纸。
切换至read-only模式进行代码审查
当你只需让Codex分析代码、生成文档或回答问题,而非修改任何文件时,必须降级到read-only模式。
执行:codex --sandbox read-only "检查 src/ 目录是否存在硬编码密码"
该模式下所有写入类系统调用(open with O_WRONLY、O_RDWR、O_CREAT)均被Landlock内核模块直接拦截,连临时文件都无法创建。
注意:read-only模式下network_access = false自动生效,所有HTTP请求、curl、wget调用全部静默失败,不抛异常也不重试。










