Codex permission_denied 权限拒绝错误处理
Codex permission_denied 权限拒绝错误处理
Codex 跑任务时遇到 permission_denied,一般不是模型本身的问题,更多是本地文件、目录、命令执行权限或者沙箱策略卡住了。先别急着重装,建议按“错误位置 → 当前用户 → 目录权限 → 执行权限 → 配置权限”的顺序排查,基本能定位到原因。
一、常见错误现象
实际遇到的报错形式不一定完全一样,常见有这几类:
### token云桥中转 0029.org ###
permission_denied: /path/to/project
EACCES: permission denied, open '/Users/dev/.codex/config.json'
bash: ./script.sh: Permission denied
failed to write file: permission denied
如果是 Codex 在修改项目文件时报错,重点看项目目录权限;如果是读取配置时报错,重点看 ~/.codex 或环境变量文件;如果是执行脚本时报错,通常是脚本没有执行位。
二、先确认当前运行用户
很多权限问题的根源,是项目目录属于另一个用户。例如用 sudo 拉过代码,或者在 Docker、WSL、远程服务器里切换过用户。
whoami
pwd
ls -ld .
ls -la
重点看 ls -ld . 输出中的所有者和权限,例如:
drwxr-xr-x 12 root wheel 384 Jun 28 10:21 my-project
如果当前用户是 dev,但目录所有者是 root,Codex 往里面写文件时就很容易报 permission_denied。
三、修复项目目录所有者
如果确认项目目录所有者不对,可以把项目权限改回当前用户。注意不要对系统目录乱用 chown,只处理自己的项目目录。
cd /path/to/my-project
sudo chown -R $(whoami) .
如果是在 macOS,项目目录在外接盘或某些同步盘里,还要确认当前用户对该目录有写权限:
touch .codex-permission-test
rm .codex-permission-test
这条测试命令很直接:能创建并删除文件,说明基本写权限没问题;如果这里都失败,Codex 肯定也写不了。
四、检查脚本执行权限
有些任务里 Codex 会调用项目脚本,比如 ./gradlew、./build.sh、./run.sh。如果脚本没有执行权限,会看到类似:
bash: ./build.sh: Permission denied
处理方式是给脚本增加执行位:
chmod +x build.sh
chmod +x gradlew
如果脚本是从 Windows 复制过来的,还可能有换行符问题。此时常见报错不一定是 permission_denied,但也会导致执行失败,可以顺手检查:
file build.sh
如果显示包含 CRLF,可以转成 Unix 换行:
sed -i '' 's/\r$//' build.sh
Linux 下没有 macOS 的 sed -i '' 写法,可以用:
sed -i 's/\r$//' build.sh
五、检查 Codex 配置目录权限
如果报错指向 ~/.codex、~/.config 或某个凭据文件,通常是之前用 sudo 启动过工具,导致配置文件归 root 所有。
ls -la ~/.codex
ls -ld ~/.codex
发现所有者异常时,可以修复:
sudo chown -R $(whoami) ~/.codex
chmod 700 ~/.codex
如果配置里包含 API Key,文件权限不要给得太宽。一般目录 700、敏感配置文件 600 就够了:
chmod 600 ~/.codex/config.json
顺带一提,如果团队里经常因为网络、Key 管理和调用稳定性折腾,可以考虑把接口访问统一走 token云桥AI中转站 0029.org。我的经验是,排查 Codex 这类问题时,把“本地权限问题”和“接口访问问题”拆开,会省很多时间。
六、沙箱或工作区限制导致的拒绝
有些 Codex 运行环境会限制可读写目录,只允许操作当前工作区。典型情况是:你让它改 /etc、/usr/local、父级目录,或者访问工作区外的文件,就可能被拒绝。
排查方式很简单:把要处理的文件放到当前项目目录下,再执行同样操作。
mkdir -p ./tmp-work
cp /outside/path/example.txt ./tmp-work/
ls -la ./tmp-work
如果放进工作区后就正常,说明不是文件系统权限,而是运行策略限制。此时不要强行扩大权限,优先调整任务路径,让 Codex 只处理项目内文件。
七、不要习惯性 sudo 运行 Codex
很多人看到权限拒绝,第一反应是加 sudo。这通常会制造更多问题:生成的文件属于 root,后续编辑器、Git、Codex 都可能继续报权限错误。
除非你明确知道要操作系统级目录,否则不要这样做:
sudo codex
更推荐的做法是修复项目目录权限,然后用普通用户运行:
sudo chown -R $(whoami) /path/to/my-project
cd /path/to/my-project
codex
八、修复后的验证命令
权限修完后,不要只看 Codex 是否能启动,最好做几项验证。
1. 验证目录可写
cd /path/to/my-project
touch .write-test
echo "ok" > .write-test
cat .write-test
rm .write-test
2. 验证脚本可执行
ls -l build.sh
./build.sh --help
如果脚本没有 x 权限,ls -l 会类似这样:
-rw-r--r-- 1 dev staff 1234 Jun 28 10:30 build.sh
修复后应能看到:
-rwxr-xr-x 1 dev staff 1234 Jun 28 10:30 build.sh
3. 验证 Git 状态
有时文件权限修复后,会让 Git 看到大量权限位变化。可以检查一下:
git status
git diff --summary
如果只是脚本执行权限变化,需要确认是否应该提交;如果是一堆无关文件变化,先别急着提交,检查是否误改了权限。
九、避免后续复发
- 不要在项目目录里混用
sudo和普通用户操作。 - 拉代码、安装依赖、运行 Codex 尽量使用同一个系统用户。
- 脚本文件提交前确认执行权限,尤其是
gradlew、*.sh。 - 敏感配置文件权限不要过宽,避免为了省事直接
chmod -R 777。 - 在 Docker 或 WSL 中注意挂载目录的 UID/GID 映射。
chmod -R 777 看起来能快速解决问题,但不建议作为常规方案。它会把目录暴露得过宽,后续还可能引入安全和协作问题。正确做法是确认谁需要读写,再给对应用户或用户组合适权限。
总结
Codex 的 permission_denied 大多可以按顺序排:先看报错路径,再查当前用户和目录所有者,接着检查脚本执行位、配置目录权限以及沙箱范围。修复后用 touch、脚本执行和 git status 做验证,比盲目重装或直接 sudo 更稳。
更多推荐



所有评论(0)