如何通过沙箱内核强制机制阻止Codex CLI读取特定私有目录?
以下是几种基于内核强制机制的可行方案,从易用性和安全性不同维度覆盖需求:
方法1:AppArmor(Debian/Ubuntu系优先)
AppArmor是Linux内核内置的强制访问控制(MAC)机制,可精准限制进程的文件访问权限。
定位Codex可执行文件
用命令确认路径:which codex假设输出为
/opt/codex/bin/codex。编写AppArmor规则文件
创建配置文件/etc/apparmor.d/opt.codex.bin.codex,内容如下(替换/home/yourname/private为你的真实私有目录绝对路径):/opt/codex/bin/codex { # 允许Codex正常运行的必要权限 /opt/codex/** r, /lib/** r, /usr/lib/** r, /dev/null rw, /tmp/** rw, # 明确禁止访问私有目录 deny /home/yourname/private/** rwx, deny /home/yourname/private/ rwx, # 默认禁止其他写入操作 deny /** w, }加载并启用规则
sudo apparmor_parser -r /etc/apparmor.d/opt.codex.bin.codex验证效果
启动Codex后尝试读取~/private下的文件,操作会被内核直接拒绝,可通过/var/log/syslog或dmesg查看拒绝日志。
方法2:SELinux(RHEL/CentOS/Fedora系优先)
SELinux是另一款内核级MAC机制,安全性更强,适合企业级场景。
确认SELinux状态
确保处于强制模式:getenforce若输出为
Permissive,临时切换为强制模式:sudo setenforce 1如需永久开启,修改
/etc/selinux/config文件,设置SELINUX=enforcing后重启系统。生成并编辑SELinux策略
- 生成基础策略模板:
sudo sepolicy generate --init /opt/codex/bin/codex - 编辑生成的
codex.te文件,添加禁止访问私有目录的规则(默认用户目录的SELinux上下文为user_home_t):deny codex_t user_home_t:dir { read write execute add_name remove_name }; deny codex_t user_home_t:file { read write execute };
- 生成基础策略模板:
编译并加载策略
sudo make -f /usr/share/selinux/devel/Makefile codex.pp sudo semodule -i codex.pp验证效果
启动Codex后尝试访问私有目录,操作会被阻断,可通过ausearch -m avc查看详细的拒绝日志。
方法3:Mount Namespace + 绑定挂载(轻量隔离)
利用Linux命名空间机制,为Codex创建独立的挂载视图,将私有目录替换为空目录,从内核层面隐藏真实内容。
准备空占位目录
mkdir -p ~/empty_private启动Codex并挂载隔离
使用unshare创建独立挂载命名空间,绑定空目录覆盖私有目录:sudo unshare -m bash -c "mount --bind ~/empty_private ~/private && exec /opt/codex/bin/codex"若需无sudo运行,可给
unshare设置SUID权限(注意安全风险):sudo chmod u+s /usr/bin/unshare之后直接运行:
unshare -m bash -c "mount --bind ~/empty_private ~/private && exec /opt/codex/bin/codex"此方法仅对当前命名空间内的Codex进程生效,主机系统的私有目录不受影响。
方法4:chroot(极简沙箱)
通过chroot切换Codex的根目录,使其完全无法访问私有目录所在的文件系统分支。
构建chroot环境
- 创建基础目录结构:
mkdir -p ~/codex_chroot/opt/codex/bin ~/codex_chroot/dev - 复制Codex可执行文件:
cp /opt/codex/bin/codex ~/codex_chroot/opt/codex/bin/ - 复制依赖库(用
ldd查看依赖):ldd /opt/codex/bin/codex | grep -o '/lib.*\.so.*' | xargs -I {} cp -v {} ~/codex_chroot/{} - 创建必要的设备文件:
sudo mknod ~/codex_chroot/dev/null c 1 3 sudo mknod ~/codex_chroot/dev/zero c 1 5 sudo mknod ~/codex_chroot/dev/random c 1 8 sudo mknod ~/codex_chroot/dev/urandom c 1 9 sudo chmod 666 ~/codex_chroot/dev/*
- 创建基础目录结构:
启动chroot环境内的Codex
sudo chroot ~/codex_chroot /opt/codex/bin/codex缺点是需要手动维护chroot环境的依赖,适合临时测试或简单场景。
内容的提问来源于stack exchange,提问作者Ciro Santilli OurBigBook.com

