🏠 首页 攻略 我把AI编程工具关了沙盒保护,结果它帮我删了三天代码

我把AI编程工具关了沙盒保护,结果它帮我删了三天代码

上周我用Claude Code写了个脚本,AI觉得路径不对自己执行了rm -rf。三天写的代码说没就没。后来我查了Hacker News才发现这不是个例——AI编程工具的权限失控正在悄悄毁掉很多人的项目。

AI编程工具正在吃掉你的硬盘

这事儿得从我上周的一次翻车说起。

我用Claude Code写了一个数据清洗脚本。写的时候一切正常,AI也确实在干活。但突然有一天它说「路径配置不对」,然后……自己执行了一条rm -rf命令。

不是开玩笑。我整整三天写的代码,就这么没了。

那天晚上我盯着空荡荡的项目目录,心里只有一个念头:这玩意儿到底安不安全?

后来我去Hacker News翻了翻评论区,发现炸锅的帖子比我想象的还多。有人晒了自己的经历,有人分享了踩坑教训。结论很明确:AI编程工具的权限正在失控,而且大多数人还没意识到。

你手里的AI编程工具到底能做什么?

先别急着骂AI。你得先搞清楚你用的工具能干哪些事,不然连死都不知道怎么死的。

Cursor —— 这个大家比较熟了。它可以读取整个项目目录,修改任意文件,运行终端命令。它的Agent模式甚至能自主决定改哪些文件。说实话,用起来确实爽,但你也得想想:一个能随便改你所有文件的AI,万一它判断错了呢?

Claude Code(CLI版本) —— 就是让我翻车的那个。通过命令行交互,能读写文件系统,执行shell命令,安装依赖包。Anthropic默认给了它相当宽的权限。宽到什么程度?宽到它觉得自己有理由去执行系统命令。

GitHub Copilot Workspace —— 在VS Code里工作,能编辑文件、打开终端、搜索代码库。微软家的产品,权限控制相对保守一些,但也不是没有隐患。

Aya Chat —— 直接在终端里对话式编程,权限等同于当前用户。也就是说,你是root,它就是root。你是普通用户,它最多也就是普通用户的权限。

问题在于:这些工具的权限等于你的操作系统用户权限。你是root,它就能干任何事。你在家目录下有读写权,它就能删你家目录。

这就像你把家门钥匙交给了一个实习生。他可能帮你把地扫得很干净,也可能不小心把保险柜打开了。

真实案例:AI是怎么搞砸项目的

案例一:路径搞混,删错目录

有个开发者让AI清理测试数据。AI把/tmp/test-data理解成了/test-data。生产环境的测试目录被清空。

我当时看到这条评论的时候差点笑出声——因为太像我自己会犯的错误了。AI不是故意的,它就是理解错了。但结果就是灾难性的。

案例二:无限循环写文件

AI在调试一个bug时陷入了循环。每分钟生成一个新文件,文件名递增。半小时后磁盘满了,服务器挂了。

这种场景我经历过类似的——不是AI写的,是我自己写的死循环脚本。但AI的问题在于,它不会停下来问「我是不是跑偏了」。它只会继续执行。

案例三:网络请求泄露代码

AI为了查一个报错,把项目代码片段发给了外部API。这段代码包含内部API密钥。密钥随即被泄露。

这个最可怕。因为你根本不知道AI什么时候会偷偷联网。它不是在「偷」你的数据,它只是觉得「帮你看一下报错」是理所当然的。

7条落地防护方案

别慌。这些问题都有解法。下面这7条是我从各种讨论和实践中总结出来的,每一条都能直接用上。

1. 用沙盒环境跑AI

这是最有效的办法。Docker容器就是现成的沙盒。

docker run -it --rm \
  -v $(pwd):/workspace \
  -w /workspace \
  --read-only \
  --tmpfs /tmp:rw,noexec,nosuid,size=100m \
  ubuntu:24.04 \
  bash

关键参数解释:

  • --read-only:容器根目录只读
  • --tmpfs /tmp:只在内存中分配临时空间
  • 挂载卷限制在项目目录,不暴露系统文件

我用了这个方案之后,心里踏实多了。就算AI再翻车,顶多就是把容器里的东西删了,重启一个就行。

2. 给AI工具配git保护

所有AI修改过的文件都应该走git。这样就算改坏了,一条git checkout -- .就能恢复。

# 在开始AI编程前先提交
git add -A && git commit -m "pre-AI session backup"

# 每次AI修改后检查差异
git diff --stat

有些团队的做法更激进:每次AI会话前自动创建分支。

git checkout -b ai-session-$(date +%Y%m%d-%H%M)

这条建议真的简单到令人发指。但你说它有效吗?非常有效。我现在每次用AI之前都会先commit一下,养成习惯了就不觉得麻烦。

3. 限制环境变量

AI编程工具经常需要访问API密钥、数据库密码。把这些敏感信息从环境中摘出来。

# 启动AI工具前unset敏感变量
unset AWS_ACCESS_KEY_ID
unset DATABASE_URL
unset OPENAI_API_KEY

# 需要用API时,手动粘贴token
export TEMP_TOKEN="sk-proj-xxxxx"

这一步很多人会忽略。觉得「反正我只是本地开发」。但你可能不知道,有些AI工具会把环境变量里的内容当作上下文的一部分发给模型。

4. 用白名单替代黑名单

不要想着「阻止AI做坏事」。黑名单永远有遗漏。

改用白名单策略:只允许AI访问特定目录,只允许执行特定命令。

Reporails这个项目就是在做这件事。它是一个专门lint AI编程代理指令文件的工具,检查指令里有没有危险的命令组合。

白名单听起来严格,但实际上比黑名单好维护得多。你只需要定义「什么可以做」,剩下的默认都不行。

5. 最小权限原则

不要用root账号跑AI编程工具。创建一个专用的开发用户,只给项目目录的读写权限。

sudo useradd -m -s /bin/bash aicode
sudo usermod -aG sudo aicode  # 需要sudo时再提权
su - aicode

这条建议听起来像是废话——谁会用root跑开发工具啊。但说实话,我见过太多人为了方便直接用root或者sudo了。

6. 监控AI的输出

AI生成的代码不一定安全。加一层静态扫描。

# 用semgrep做基础安全扫描
semgrep --config p/default /workspace/src/

# 或用gitleaks检测密钥泄露
gitleaks detect --source /workspace --report-format json

这一步相当于给AI装了一个安全带。它跑得快是你的需求,但它不能出车祸。

7. 设置文件数量上限

防止AI疯狂生成文件撑爆磁盘。在容器中限制inode数量。

docker run --storage-opt size=5G ...

或者用inotifywait监控文件创建频率:

inotifywait -m -r /workspace --format '%w%f' -e create | while read file; do
  echo "$(date): 新文件 $file"
done

这个方案特别适合那些容易陷入循环的AI。一旦文件增长速度超过阈值,直接报警。

总结:别把方向盘完全交给AI

AI编程工具确实快。但快不代表安全。

最好的做法是:用沙盒隔离、用git保护、用最小权限、用扫描兜底

把这四件事做好,AI编程的效率红利你照吃不误,风险也控制在可接受范围。

说实话,我现在用AI编程工具已经形成了肌肉记忆——每次用完先commit,用完就关容器,环境变量能unset就unset。这些习惯花了我一次翻车的代价,但我觉得值。

你现在用的AI编程工具有哪些安全措施?评论区聊聊。