环境说明:
- 宿主机:Windows 11
- 虚拟机:VMware Virtual Platform
- 操作系统:Ubuntu (虚拟机内)
- 工具:OpenAI Codex CLI (v0.142.3)
一、问题现象
在 Linux 虚拟机中安装并运行 OpenAI Codex CLI 时,终端弹出以下警告信息,虽然程序没有直接崩溃,但沙箱功能未能正常初始化:
virtual-machine@VMware-Virtual-Platform:~/NetSentry$ codex ⚠ Codex's Linux sandbox uses bubblewrap and needs access to create user namespaces. ╭──────────────────────────────────────────────╮ │ >_ OpenAI Codex (v0.142.3) │ ...同时,如果在后台使用ps aux | grep bwrap查看进程,会发现根本没有bwrap相关进程在运行,这说明 Codex 的安全沙箱并没有成功启动。
二、原因分析
Codex CLI 在 Linux 系统上默认使用bubblewrap(bwrap) 来创建沙箱,以隔离文件系统和网络,防止 AI 生成的代码意外破坏系统或泄露数据。
bubblewrap的核心机制是利用 Linux 内核的用户命名空间,允许无特权用户在隔离环境中拥有“伪 root”权限。出现上述警告通常是因为:
- 系统未启用非特权用户命名空间:许多 Linux 发行版出于安全考虑,默认禁用了此功能。
- AppArmor 安全模块拦截:特别是在 Ubuntu 23.10 及更高版本中,即使内核允许创建用户命名空间,AppArmor 依然会拦截
bwrap的网络等高级权限。
三、排查与解决步骤
步骤 1:确认 bubblewrap 已安装
首先检查系统是否安装了bubblewrap并且在环境变量中:
which bwrap || echo "bwrap not in PATH"输出结果:
/usr/bin/bwrap*结论:bwrap 已正常安装,问题出在权限限制上。*
步骤 2:启用内核参数允许用户命名空间
修改内核参数,允许非特权用户创建命名空间。
临时生效(重启后失效):
sudo sysctl -w kernel.unprivileged_userns_clone=1永久生效:
echo "kernel.unprivileged_userns_clone=1" | sudo tee /etc/sysctl.d/99-userns.conf sudo sysctl -p /etc/sysctl.d/99-userns.conf步骤 3:测试 Bubblewrap 沙箱是否生效
执行完上述操作后,运行以下无害的测试命令,检查bwrap是否能真正创建沙箱:
bwrap --ro-bind /usr /usr --ro-bind /lib /lib --ro-bind /lib64 /lib64 --unshare-all echo "Sandbox works!"遇到新报错:
bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted分析:这个错误非常关键。它说明bwrap尝试创建网络命名空间时失败了。这通常是因为系统底层的 AppArmor 依然在拦截网络权限。
步骤 4:解除 AppArmor 对用户命名空间的限制(核心解决方案)
针对上述Operation not permitted错误,我们需要关闭 AppArmor 对非特权用户命名空间的限制。
临时关闭测试:
sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0再次运行测试命令:
bwrap --ro-bind /usr /usr --ro-bind /lib /lib --ro-bind /lib64 /lib64 --unshare-all echo "Sandbox works!"输出Sandbox works!,说明系统层面的沙箱机制已经完全畅通!
永久关闭限制:
为了在系统重启后依然生效,将其写入配置文件:
echo "kernel.apparmor_restrict_unprivileged_userns=0" | sudo tee /etc/sysctl.d/60-apparmor-namespace.conf sudo sysctl -p /etc/sysctl.d/60-apparmor-namespace.conf此时,重新启动codex,之前的黄色警告就会消失,沙箱功能正常工作。
四、备用方案:直接禁用沙箱(适合虚拟机环境)
如果你是在 VMware 虚拟机中进行开发测试,虚拟机本身已经提供了一层物理隔离。如果你不想修改系统的安全策略,可以直接让 Codex 在无沙箱模式下运行。
方法 1:启动时指定参数
codex --sandbox danger-full-access方法 2:修改配置文件设为默认
打开或创建 Codex 的配置文件:
nano ~/.codex/config.toml添加以下内容:
sandbox_mode = "danger-full-access"保存退出后,直接输入codex即可正常运行。
⚠️ 注意:
danger-full-access模式会让 Codex 拥有当前用户的完整权限,可以读写任何文件、执行任何命令。请仅在你完全了解风险并在隔离环境中使用此选项。
五、总结
在使用 OpenAI Codex CLI 等 AI 辅助编程工具时,由于它们需要执行代码,Linux 系统的安全机制(如 AppArmor、用户命名空间限制)经常会发生拦截。
遇到类似bubblewrap权限问题,核心排查路径为:
- 检查工具是否安装 (
which bwrap)。 - 检查内核参数 (
unprivileged_userns_clone)。 - 检查 AppArmor 限制 (
apparmor_restrict_unprivileged_userns)。 - 根据实际环境选择放开限制或禁用沙箱。
希望这篇博客能帮到遇到同样问题的开发者!如果有其他疑问,欢迎在评论区交流。