解决 OpenAI Codex CLI 在 Linux/VMware 中报错:bubblewrap needs access to create user namespaces
2026/6/30 4:12:51 网站建设 项目流程

环境说明:

  • 宿主机: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”权限。出现上述警告通常是因为:

  1. 系统未启用非特权用户命名空间:许多 Linux 发行版出于安全考虑,默认禁用了此功能。
  2. 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权限问题,核心排查路径为:

  1. 检查工具是否安装 (which bwrap)。
  2. 检查内核参数 (unprivileged_userns_clone)。
  3. 检查 AppArmor 限制 (apparmor_restrict_unprivileged_userns)。
  4. 根据实际环境选择放开限制或禁用沙箱。

希望这篇博客能帮到遇到同样问题的开发者!如果有其他疑问,欢迎在评论区交流。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询