AI 代理删除 Home 文件夹?在 Firejail 中运行你的代理,确保安全

发布: (2025年12月15日 GMT+8 17:58)
8 min read
原文: Dev.to

Source: Dev.to

引言:AI 代理的双刃剑

作为开发者,我一直在寻找能够提升生产力的工具。在构建 Tunnelmole(一款开源隧道工具,也是 ngrok 的热门替代品)时,我越来越多地使用 AI 代理来完成各种编码和业务相关的任务。只要使用得当并有人类监督,这些代理的威力是惊人的。然而,给它们对开发机器的无限制访问,就像把密码交给一个不可预测的实习生——强大但可能导致灾难性后果。如果出现灾难,你不能怪实习生;你必须为代理提供一个安全的运行环境。

让代理读取文件、执行命令、直接在机器上写代码的便利性不容否认,但它伴随的风险巨大且常被忽视。当 AI 误解提示时会怎样?更糟的是,代理逻辑中的 bug 导致它执行破坏性命令会怎样?

这并非理论问题。最近一篇 Reddit 帖子报告称 Claude CLI 删除了整个主目录,相当于抹掉了一台 Mac:

“Claude CLI 删除了我的整个主目录——所有东西都被抹掉了。”

罪魁祸首是一条由 AI 生成的单行恐怖命令:

rm -rf tests/ patches/ plan/ ~/

大部分路径指向项目特定目录,但最后的 ~/ 会展开为当前用户的主目录。结果是递归、强制删除 所有 文档、照片、点文件以及多年的工作成果。

此事件是一次严峻警示。我们必须构建防护栏。解决方案是沙箱化:在受限、受控的环境中运行 AI 代理,严格限制其能力。

在本指南中,我将展示如何使用强大的工具 Firejail 为基于 VS Code 的 AI 代理创建安全沙箱。虽然我个人使用 Kilo Code,但这些说明同样适用于 GitHub Copilot、Windsurf 或任何在 VS Code 中运行的工具。

注意: Firejail 依赖 Linux 内核特性(如命名空间),因此本指南适用于 Linux(主机或虚拟机)。在 Windows Subsystem for Linux 上运行带 GUI 的 VS Code 时可能会或可能不会工作。

什么是 Firejail,为什么它有效?

Firejail 是一个针对 Linux 的 SUID(Set owner User ID)安全沙箱程序。通俗来说,它让你可以在受严格控制的环境中运行任意应用。它利用内核级安全特性——命名空间seccomp‑bpf——将应用与系统隔离。

为什么这种方式有效

  • 内核级强制 – 限制由操作系统内核执行。如果沙箱中的应用(例如 VS Code 及其 AI 代理)尝试访问文件或执行不被允许的命令,内核会阻止。
  • 默认拒绝哲学 – 一个配置良好的沙箱从“拒绝所有”开始,然后显式允许最小必要的操作。这比尝试列举应用不能做的所有事情更安全。
  • 轻量且透明 – Firejail 不是虚拟机,而是一个轻量包装器,性能开销极小。配置好后,只需使用 firejail 启动应用,它就会在安全气泡中运行。

你可以通过发行版的包管理器安装 Firejail。例如,在 Debian 或 Ubuntu 上:

sudo apt-get update && sudo apt-get install firejail

为 VS Code 打造安全的 Firejail 配置文件

Firejail 默认已经为许多常用应用(包括 code)提供了配置文件。为了防止主目录被删除的特定风险,我们将创建一个自定义的、更严格的配置文件,限制 VS Code(以及任何扩展)只能访问指定的项目文件夹。

步骤 1:创建自定义配置目录

mkdir -p ~/.config/firejail

步骤 2:为 VS Code 创建新配置文件

touch ~/.config/firejail/code.profile

步骤 3:填充配置文件

在你喜欢的编辑器中打开 ~/.config/firejail/code.profile,粘贴以下内容。根据你存放项目的路径自行调整。

# Firejail profile for Visual Studio Code
# Highly restrictive for running AI agents safely.

# Persistent local customizations
include code.local
include globals.local

# Disable potentially unsafe includes
ignore include disable-devel.inc
ignore include disable-exec.inc
ignore include disable-interpreters.inc
ignore include disable-xdg.inc
ignore whitelist ${DOWNLOADS}
ignore whitelist ${HOME}/.config/Electron
ignore whitelist ${HOME}/.config/electron*-flag*.conf
ignore include whitelist-common.inc
ignore include whitelist-runuser-common.inc
ignore include whitelist-usr-share-common.inc
ignore include whitelist-var-common.inc
ignore apparmor
ignore disable-mnt

# Block D‑Bus to prevent inter‑process communication
ignore dbus-user none
ignore dbus-system none

# Allow files commonly used by IDEs, then override with a strict whitelist
include allow-common-devel.inc

# --- WHITELISTING ---
# Deny everything by default; only allow the paths listed below.

# VS Code configuration directories
whitelist ${HOME}/.config/Code
whitelist ${HOME}/.config/Code - OSS
whitelist ${HOME}/.vscode
whitelist ${HOME}/.vscode-oss

# IMPORTANT: Change this to point to where you keep your coding projects!
whitelist ${HOME}/projects

# Shell configuration for the integrated terminal
whitelist ${HOME}/.zshrc
whitelist ${HOME}/.bashrc
whitelist ${HOME}/.oh-my-zsh
whitelist ${HOME}/.profile

# Create the Code config directory structure if it doesn't exist (VS Code crashes without it)
mkdir ${HOME}/.config/Code
mkdir ${HOME}/.config/Code/logs

# Security hardening
nosound          # disable sound
noexec /tmp      # prevent execution of files in /tmp

# Load common Electron settings
include electron-common.profile

步骤 4:在沙箱中启动 VS Code

firejail code

现在,VS Code 实例将在配置文件中定义的限制下运行,防止意外或恶意访问白名单之外的文件。

解析安全配置文件

该配置文件看起来可能比较复杂,但其策略很直接:

  • ignore 指令 用于关闭默认的允许项,防止授予超出预期的访问权限。
  • whitelist 条目 明确只为必要的配置文件和代码目录提供读写权限。
  • nosoundnoexec /tmp 通过禁用不必要的子系统进一步加固安全。
  • include 语句 引入最小的、适用于 Electron 应用(如 VS Code)的通用设置,而不打开额外的攻击面。

通过默认拒绝一切,然后有选择地仅允许 IDE 真正需要的资源,你可以大幅降低 AI 代理(或任何受损的扩展)执行诸如 rm -rf ~/ 之类破坏性命令的风险。

Back to Blog

相关文章

阅读更多 »

构建可信的 AI 代理

个人 AI 助手的前景建立在一个危险的假设之上:我们可以信任那些我们尚未使之可信的系统。我们做不到。而当今的版本则是……

AI Agents 密集课程写作挑战

这是针对 Google AI Agents Writing Challenge 学习反思的提交,涉及与 Google 和 Kaggle 合作的 5 天 AI Agents 密集课程学习反思。