You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过沙箱内核强制机制阻止Codex CLI读取特定私有目录?

阻止Codex读取~/private目录的内核级沙箱实现方案

以下是几种基于内核强制机制的可行方案,从易用性和安全性不同维度覆盖需求:

方法1:AppArmor(Debian/Ubuntu系优先)

AppArmor是Linux内核内置的强制访问控制(MAC)机制,可精准限制进程的文件访问权限。

  1. 定位Codex可执行文件
    用命令确认路径:

    which codex
    

    假设输出为/opt/codex/bin/codex。

  2. 编写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,
    }
    
  3. 加载并启用规则

    sudo apparmor_parser -r /etc/apparmor.d/opt.codex.bin.codex
    
  4. 验证效果
    启动Codex后尝试读取~/private下的文件,操作会被内核直接拒绝,可通过/var/log/syslog或dmesg查看拒绝日志。

方法2:SELinux(RHEL/CentOS/Fedora系优先)

SELinux是另一款内核级MAC机制,安全性更强,适合企业级场景。

  1. 确认SELinux状态
    确保处于强制模式:

    getenforce
    

    若输出为Permissive,临时切换为强制模式:

    sudo setenforce 1
    

    如需永久开启,修改/etc/selinux/config文件,设置SELINUX=enforcing后重启系统。

  2. 生成并编辑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 };
      
  3. 编译并加载策略

    sudo make -f /usr/share/selinux/devel/Makefile codex.pp
    sudo semodule -i codex.pp
    
  4. 验证效果
    启动Codex后尝试访问私有目录,操作会被阻断,可通过ausearch -m avc查看详细的拒绝日志。

方法3:Mount Namespace + 绑定挂载(轻量隔离)

利用Linux命名空间机制,为Codex创建独立的挂载视图,将私有目录替换为空目录,从内核层面隐藏真实内容。

  1. 准备空占位目录

    mkdir -p ~/empty_private
    
  2. 启动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的根目录,使其完全无法访问私有目录所在的文件系统分支。

  1. 构建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/*
      
  2. 启动chroot环境内的Codex

    sudo chroot ~/codex_chroot /opt/codex/bin/codex
    

    缺点是需要手动维护chroot环境的依赖,适合临时测试或简单场景。

内容的提问来源于stack exchange,提问作者Ciro Santilli OurBigBook.com

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 10:52:46