
字节笔记本
2026年10月6日 · 约 11 分钟读完
Agent 安全第 7 课:最小权限与五条铁律
本文是《Agentic Coding 入门课》工具篇的第 7 课,主题是权限与安全:怎么让 Agent 放开手干活,又不删你的文件、不泄你的密钥、不烧你的账单。
先认清:Agent 能闯什么祸
别小看这件事。Anthropic 在官方报告里特别提到:随着 Agent 能力增强,安全机制的优先级要同步上升。
Agent 能干的危险动作,大致可以按后果分级:
| 危险等级 | 动作 | 后果 |
|---|---|---|
| 高危 | 删除文件或文件夹 | 数据丢失 |
| 高危 | 把密钥提交到 GitHub | 账号被盗、数据泄露 |
| 高危 | 执行 rm -rf 类命令 | 系统崩溃 |
| 中危 | 联网下载或上传数据 | 隐私泄露 |
| 中危 | 修改系统配置 | 开发环境损坏 |
| 低危 | 写入新文件 | 一般无害,但可能把项目弄乱 |
高危动作的共同点是不可逆:文件删了就是删了,密钥泄了就是泄了。所以安全配置的重心,永远是先堵住高危动作。
安全第一原则:最小权限
核心心法一句话:让 Agent 只能做当前这个任务必须做的事,其余一律禁止。
类比很直白:你雇一个实习生帮忙整理文件,不会把保险柜钥匙也交给他。Agent 就是这个能力很强的实习生,权限给到刚好够用,出事时的损失才有上限。

三档权限模式
主流 Agent 都提供三档权限设置:
- 只读模式(read-only):Agent 只能看,不能改。适合让它分析代码、给建议、解释原理。
- 确认模式(ask-first):Agent 每次要改东西,先问你一句可不可以。日常开发最常用,也是最推荐的一档。
- 全自动模式(yolo):不问,直接干。适合在隔离环境里跑测试、做批量操作,新手不要碰。
给新手一句实在话:前 3 个月,永远用确认模式。不要嫌它烦,它每次问「我可以删这个文件吗」,都是在救你。
四个核心安全设置
设置一:给危险命令加二次确认
所有主流 Agent 都支持配置「哪些命令需要二次确认」。下面这几条建议一定要加:
// 示意写法,不同客户端语法略有差异
{
"permissions": {
"deny": [
"rm -rf *",
"git push --force",
"git push *main*",
"chmod 777 *"
],
"ask": [
"rm *",
"git push *",
"npm publish *",
"curl *",
"> /dev/sd*"
]
}
}deny 是绝对禁止,ask 是执行前必须过一道人工确认。具体语法去查你所用客户端文档里的 permissions 章节。
设置二:用 .gitignore 保护敏感文件
如果项目用 Git 管理(新手强烈建议花一个晚上学会基础操作),一定要在项目根目录建一个 .gitignore 文件:
# 敏感信息
.env
*.key
*.pem
credentials.json
secrets/
# 临时文件
node_modules/
__pycache__/
*.log
.DS_Store
# 数据文件
*.csv
data/真实事故:2024 年有公司实习生把 AWS 密钥提交到 GitHub 公开仓库,8 小时被刷掉 20 万美元(案例引自 Truffle Security 2024 年报告)。.gitignore 是你的命根子,建仓库第一步就把它配好。
设置三:密钥放环境变量,不进代码
反例,属于致命错误:
api_key = "sk-ant-xxx-real-key-here"这样写,Agent 一旦把代码提交到 GitHub,密钥就泄露了。正确做法是让代码从环境变量读取:
import os
api_key = os.environ.get("ANTHROPIC_API_KEY")密钥本体放在项目根目录的 .env 文件里,这个文件已经被上面的 .gitignore 保护:
ANTHROPIC_API_KEY=sk-ant-xxx
DATABASE_URL=postgres://...
STRIPE_SECRET=sk_live_xxx设置四:项目隔离,不要在家目录裸奔
反例是让 Agent 在家目录工作,它能访问你所有项目、所有文件。正例是每个项目一个独立文件夹,把 Agent 的活动范围锁死在当前项目里:
# 不要这样
cd ~
claude
# 这样
mkdir ~/projects/my-app
cd ~/projects/my-app
claude真实案例:一次成功的安全拦截
一位学员做电商项目,让 Agent「清理项目里的测试数据」。

Agent 请求执行 rm -rf data/ test_data/ *.csv,确认模式的弹窗提示:这个操作会删除整个 data 目录和所有 CSV 文件,是否允许。学员检查后发现 data/ 里是真实订单数据,真正的测试数据在 tests/fixtures/,于是选择拒绝,并重新下达精准指令:不要用 rm,只删除 tests/fixtures/ 目录下的所有 .json 文件,先列出文件清单供确认,再逐个执行。
教训:模糊指令加删除操作等于灾难。涉及删除时,永远让 Agent 先列清单。
安全五铁律
把这五条贴在屏幕边上,每次开新项目前看一眼:
- 永远开确认模式,至少坚持前 3 个月。
- 永远不要把密钥写进代码,统一放 .env。
- 涉及删除,先列清单再动手。
- 每个项目一个独立文件夹,不要在家目录裸奔。
- 重要项目一定开 Git,相当于装了后悔药。
一份可直接抄走的安全配置模板
把下面这个文件存到项目根目录 .claude/settings.json,或你所用客户端的等价位置:
{
"permissions": {
"deny": [
"rm -rf /",
"rm -rf ~",
"rm -rf *",
"git push --force",
"git push -f",
"curl http://* | sh",
"curl https://* | sh",
"wget * | sh",
":(){ :|:& };:"
],
"ask": [
"rm *",
"git push *",
"git commit *",
"npm publish *",
"pip install *",
"curl *",
"wget *",
"scp *",
"> /etc/*",
"> /usr/*"
]
},
"model": "standard",
"max_tokens_per_turn": 8192
}不同 Agent 的配置语法略有差异,但结构一致:deny 负责绝对禁止,ask 负责人工确认。
真出了事怎么办
场景一:Agent 删错了文件
第一时间按 Ctrl+C 停下 Agent,Mac 用户先翻废纸篓。项目开了 Git 的,可以精确找回:
# 看最近发生了什么
git status
# 恢复某个被删文件
git checkout -- 文件名
# 整个项目回滚到上一个提交
git reset --hard HEAD没开 Git,就赶紧打开系统自带的备份工具:Mac 用时间机器,Windows 用文件历史。
场景二:密钥泄露
黄金 1 小时内做完五件事:立刻去服务商后台吊销那个 key;生成新 key;更新所有用到它的地方;检查账单有没有异常消耗;如果代码已经推上公开仓库,用 BFG 工具清理整个仓库历史。
不要心存侥幸:GitHub 上有爬虫专扫公开仓库里的密钥,几分钟内就会被抓走。
场景三:Agent 跑飞了,账单在烧
按 Esc 或 Ctrl+C 强制中断,去服务后台看用量,把月度上限调低,然后清空上下文或重启 Agent。
动手练习
- 必做:在项目根目录建 .gitignore,至少包含 .env、*.key、node_modules、pycache。
- 必做:检查之前写过的代码,把写死的 API key 改成环境变量,并立刻轮换(重新生成)那个 key。
- 推荐:在自己的 Agent 客户端里配置危险命令二次确认,至少把 rm 和 git push 加进确认列表。
- 思考:「帮我清理一下项目,把没用的都删了」这条指令有什么隐患?风险在于「没用的」定义模糊,可能误删真实数据;更安全的下法是让 Agent 先列出未被引用的文件清单,逐个确认后再删,删除前先做一次 Git 提交备份。
本课要点
- Agent 能闯祸,最小权限是核心心法。
- 三档权限:只读、确认(推荐)、全自动(新手别碰)。
- 四个设置:危险命令确认、.gitignore、环境变量、项目隔离。
- 五条铁律贴在屏幕边上,重要项目必开 Git。
- 密钥泄露的黄金 1 小时,核心动作是立刻吊销。
到这里,工具基础就算补齐了:装环境、选模型、管上下文、上安全带,四件事都能自己搞定。下一阶段的关键能力,是把脑子里的想法翻译成 Agent 能精准执行的需求描述,那才是从「会用工具」到「会指挥 Agent」的分水岭。
参考来源:
- 安全配置综合自 Claude Code、Cursor、Codex CLI 官方文档
- 最小权限原则(Principle of Least Privilege)是经典信息安全原则
- 密钥泄露案例参考 Truffle Security 2024 年报告



