Cplt:在内核级沙箱中运行AI编码代理或普通Shell
Cplt 是一个沙箱包装器,用于运行 AI 编码代理(如 GitHub Copilot CLI、OpenCode、Google Gemini CLI)或普通 shell,在内核级别隔离文件系统和环境变量,保护用户机密。支持 macOS(Apple Seatbelt)和 Linux(Landlock LSM + seccomp-BPF)。提供细粒度的权限控制,包括文件读写、网络端口、环境变量等。
文章情报
要点
- Cplt 为 AI 编码代理提供内核级沙箱,防止访问用户机密。
- 支持 macOS 和 Linux,通过 sandbox-exec 或 Landlock/seccomp 实现隔离。
- 默认阻止对 .env、密钥文件、SSH 密钥、云凭证等的访问,仅允许项目目录和少量必需路径。
- 提供环境变量白名单、网络端口控制、生命周期脚本阻止等安全强化功能。
为什么重要
这条新闻值得关注,因为Cplt 为 AI 编码代理提供内核级沙箱,防止访问用户机密。
技术影响
可能影响模型选型、推理成本、产品能力和评测基准。
Cplt 是一个专门为 AI 编码代理设计的沙箱包装器,它允许用户在内核级隔离环境中安全运行 GitHub Copilot CLI、OpenCode、Google Gemini CLI 等代理,或仅运行一个普通 shell。该项目由挪威劳工和福利管理局(NAV)开发,旨在解决 AI 编码代理可能带来的安全风险,特别是保护敏感凭据和机密文件不被泄露。
Cplt 利用操作系统内核的安全机制来实现隔离。在 macOS 上,它使用 Apple Seatbelt/SBPL 通过 sandbox-exec 命令实现;在 Linux 上,它使用 Landlock LSM 和 seccomp-BPF 组合(要求内核 5.13+,完整网络过滤需 6.7+)。这种内核级别的沙箱确保了即使代理或子进程尝试访问受限资源也会被内核直接阻止。
Cplt 的核心功能是文件系统隔离。它默认允许代理读写项目目录,但内核级阻止对以下文件的访问:
- 以 .env 开头的文件、.pem、.key 等密钥文件。
- .git/hooks、.git/config、.gitmodules 等 Git 配置,防止持久化攻击(如恶意 Git 钩子、submodule 劫持)。
- /tmp、/var/folders 等临时目录的执行权限,防止写入后执行攻击。
- ~/Library/Caches 中的可执行文件(除非特别豁免)。
- ~/.ssh、~/.gnupg、~/.aws、~/.azure 等常用机密目录。
- 云服务凭据文件,如 ~/.kube、~/.docker、~/.config/gcloud 等。
- 包管理器凭据,如 ~/.npmrc、~/.pypirc、~/.gem/credentials 等。
除了文件系统,Cplt 还强化了环境变量。它通过白名单机制只传递安全的环境变量,同时注入安全强化变量,例如阻止 npm/yarn/pnpm 生命周期脚本(postinstall 钩子),这是软件供应链攻击的主要途径。默认情况下,所有以 AWS_、AZURE_、NPM_TOKEN、DATABASE_URL 等开头的变量以及 SSH 相关变量都会被过滤掉。用户可以通过 --pass-env 标志显式添加所需变量。
网络控制方面,Cplt 默认只允许出站 TCP 端口 443,其他端口全部阻止。用户可以使用 --allow-port 添加额外端口。值得注意的是,默认情况下禁止访问 localhost(出站),以防止代理访问本地服务(如正在运行的数据库、Web 服务器等)。如果某些构建工具需要访问 localhost(如 Turbopack、Vite),可用 --allow-localhost-any 全部放行。
安装 Cplt 非常简单。推荐使用 Homebrew:brew install navikt/tap/cplt,也可以通过 curl 脚本或 GitHub Releases 下载二进制文件。安装后,运行 cplt --shell-install 即可设置 shell 别名,让 copilot 命令自动使用沙箱版本。Cplt 还内置了递归保护:如果检测到已经在沙箱内运行,它会拒绝再次启动。
Cplt 还提供了丰富的配置选项,包括指定项目目录(-d)、允许读写外部路径(--allow-read/--allow-write)、阻止特定路径(--deny-path)、允许本地回环连接(--allow-localhost)等。对于高级用户,可以通过 --allow-lifecycle-scripts 允许 npm 生命周期脚本运行,或通过 --allow-gpg-signing 允许 Git 签名(仅公钥访问)。
该项目已在 GitHub 上开源,并提供了详细的安全模型文档(SECURITY.md)。Cplt 的目标是让 AI 编码代理在享受自动化便利的同时,不牺牲用户的安全性。对于使用 Copilot、OpenCode 等工具的开发者来说,Cplt 是一个值得关注的安全加固工具。