敢给 AI 写代码的权限吗?Reasonix 教你守住底线

前两篇发完后,收到最多的私信是同一句话:"让 AI 直接在终端里跑命令,你不怕它把你服务器删了?"
>
怕,当然怕。但 Reasonix 的设计者比你更怕——所以做了整整三层防护。
>
今天就把这三层防护拆开看明白。

一、先讲个恐怖故事

一个真实的事故(不是 Reasonix,是另一个工具):

开发者让 AI "帮我清理一下磁盘空间",AI 理解了需求,执行了 rm -rf /——根目录全删了。服务器直接宕机。

这个事故的本质不是 AI 太笨,是权限没设好

你把一把电钻交给 AI,它当然能帮你钻孔,但也可能把墙打穿。Reasonix 解决这个问题的方法不是"不给 AI 工具"——而是给工具,但设定明确的边界

这三层边界是:

第一层:Plan Mode → 复杂任务先出计划,你批准了再动手(上一篇文章提到过)
第二层:Permission Rules → 谁可以干什么,精确到命令级别
第三层:Sandbox → 物理隔离,就算规则漏了也逃不出去


🔴 先说结论:默认配置下,Reasonix 比 Cursor 和 Claude Code 都安全。


二、第一层:Plan Mode(计划模式)

在之前的文章里提过,这里快速过一下。

reasonix.toml 中开启:

[agent]
auto_plan = "on"

开启后,复杂任务会先进入只读模式

1. AI 先读文件、分析代码结构 2. AI 输出一份书面计划 3. 你审核计划 4. 你点头,AI 才开始改代码

这相当于给 AI 加了一道"先写方案,领导审批"的流程。改之前先告诉我你要改什么。


三、第二层:Permission Rules(权限规则)— 核心

这是最常用、也最灵活的一层。它不是简单的"开/关",而是一套规则引擎

默认行为

安装完 Reasonix,默认配置是这样的:

[permissions]
mode = "ask"   # 兜底策略:问用户

什么意思呢?

对于只读操作(读文件、搜索代码、查看目录):一律放行,不需要问你。

对于写入操作(写文件、修改文件、执行命令):先问你。

实操演示:Chat 模式下的权限对话

当你在 reasonix chat 里让 AI 写代码时,你会看到这样的画面:

你:帮我修改 nginx.conf,把超时时间改成 60 秒

AI thinking...
  → read_file /etc/nginx/nginx.conf   ← 读文件,自动放行

  → write_file /etc/nginx/nginx.conf   ← 写文件,触发权限检查!

? 允许 AI 写入 /etc/nginx/nginx.conf?
  [1] 允许本次     [2] 本会话都允许     [3] 拒绝

三个选项很清晰:

  • 1(y):这次放行,下次还问
  • 2(a):这个会话里不再问了,信任 AI
  • 3(n):拒绝,AI 会收到"被拒绝"的消息,自己想办法适应

Run 模式下的权限行为

reasonix run一次性的、非交互的,它不会弹对话框问你。所以它的行为是:

  • Ask 级别的调用 → 自动放行(假设你在场监督)
  • Deny 级别的调用 → 硬阻断,AI 收到一条"被阻止"的消息

自定义规则:精确到命令级别

默认的 ask 模式已经够安全了。但如果你想更精细地控制,可以写规则:

[permissions]
mode = "ask"                                # 没有规则匹配时的兜底行为
deny  = ["bash(rm -rf*)", "bash(git push*)"]  # 硬阻断:这些操作在任何模式下都不允许
allow = ["bash(go test*)", "bash(git status*)", "bash(ls*)"]  # 放行:安全操作永不询问
ask   = ["write_file(/etc/*)"]              # 强制询问:写入 /etc 下的文件必须问我

规则语法

  • ToolName — 匹配该工具的所有调用,比如 write_file
  • ToolName(glob) — 匹配该工具调用中的操作对象,比如 bash(rm -rf*) 匹配所有以 rm -rf 开头的 bash 命令
  • 支持的通配符:* 匹配任意字符,? 匹配单个字符

规则的优先级

deny(硬阻断) > ask(询问) > allow(放行) > 兜底(mode)

这个优先级意味着:

# 即使你把模式设为 allow,deny 规则仍然生效
mode  = "allow"
deny  = ["bash(rm -rf*)"]   # rm -rf 仍然被硬阻断

# 即使你放行了所有 bash 命令,仍然可以针对特定命令要求询问
allow = ["bash"]
ask   = ["bash(docker*)"]   # docker 命令还是要问我

三种常用配置模板

配置一:新人模式(最安全)

[permissions]
mode = "ask"
deny = ["bash(rm -rf*)", "bash(shutdown*)", "bash(reboot*)", "bash(sudo*)", "bash(docker rm*)"]

适合:刚接触、还在熟悉阶段、在重要服务器上使用。

配置二:日常开发模式(平衡)

[permissions]
mode = "ask"
deny  = ["bash(rm -rf*)", "bash(git push*)", "bash(> /dev/*)"]
allow = ["bash(go test*)", "bash(git status*)", "bash(git diff*)", "bash(ls*)", "bash(cat*)", "bash(python3 *)"]

适合:日常写代码,放行安全操作,对敏感操作保持警惕。

配置三:信任模式(高效)

[permissions]
mode = "allow"
deny = ["bash(rm -rf /)", "bash(sudo rm*)"]

适合:你在旁边盯着,想让 AI 全速干活。


四、第三层:Sandbox(沙盒)— 最后的防线

如果说权限规则是"法律",那沙盒就是"监狱"——即使法律被绕过了,人也逃不出监狱

文件写入沙盒

默认情况下,AI 只能在当前工作目录里写文件:

[sandbox]
# workspace_root = ""    # 留空 = 当前目录,文件只能写在这里
# allow_write = ["/tmp"]   # 额外允许写的目录

这意味着:

  • 你在 /home/user/my-project 启动 Reasonix
  • AI 想写文件,只能写在 /home/user/my-project/* 下面
  • 哪怕 AI 试图用 ../../etc/nginx.conf 越界,符号链接和 .. 都会被解析拦截
举个具体的例子:

你让 AI 写一个脚本到 /tmp/test.sh

AI 调用 write_file,目标路径:/tmp/test.sh
沙盒检查:/tmp/test.sh 不在 /home/user/my-project 下
结果:❌ 拒绝写入,错误信息返回给 AI
AI 收到错误,自己想办法适配

bash 命令沙盒(macOS)

在 macOS 上,不光是文件写入被限制,连 bash 命令都在沙盒里跑

[sandbox]
bash = "enforce"    # macOS 默认开启,用 Seatbelt 技术实现
network = true      # 是否允许 AI 联网

受沙盒保护的 bash 命令:

  • 只能写项目目录 + 临时目录 + 工具链缓存
  • 网络访问受 network 开关控制
  • 想越界?沙盒直接拒绝,然后权限层会问你"要不要放行一次"
💡 Linux 用户:bubblewrap 支持已经在路上了。目前 Linux 上 bash 沙盒暂退化为不限制,但文件写入沙盒和权限规则始终生效


五、三层防护全开是什么效果?

我模拟了一个真实场景来测试:

任务:让 Reasonix 帮我"优化服务器配置"

第一关:Plan Mode
  → AI 先读文件,写计划
  → 我看到计划里有修改 /etc/nginx.conf
  → 我决定"计划通过"

第二关:Permission Rules
  → AI 试图 write_file /etc/nginx.conf
  → 命中规则 ask = ["write_file(/etc/*)"]
  → 弹窗问: "允许写入 /etc/nginx.conf?"
  → 我按 1(允许本次)

第三关:Sandbox
  → 假设我没有放行,AI 硬写
  → 沙盒检查:/etc/nginx.conf 不在工作目录下
  → ❌ 拒绝写入,AI 收到错误

三关全过,AI 才能碰到你的文件。漏一关还有下一关兜底。


六、对比一下竞品

安全特性ReasonixCursorClaude Code
写入前询问✅ 默认开启部分
自定义权限规则✅ 精确到命令级别❌ 只能全局开/关❌ 只能环境变量控制
deny 硬阻断✅ deny > 一切
文件沙盒隔离✅ 符号链接安全
bash 沙盒✅ macOS(Linux 开发中)
计划模式前置审核✅ 可选的 auto_plan部分
开源可审计✅ MIT 开源❌ 闭源❌ 闭源
Reasonix 是唯一一个把权限做到"三层纵深防御"的 AI 编程工具。 这不是吹,是架构决定的。


写在最后

这一篇的内容比较多,我帮你总结一下:

层级作用比喻
Plan Mode先写方案,你审批开工前先交方案
Permission Rules精确控制每个命令门禁系统,按权限刷卡
Sandbox物理隔离,跑不出去监狱围墙
三层的设计哲学:每一层都不假设上一层完美。

  • 计划模式漏了 → 权限规则兜底
  • 权限规则漏了 → 沙盒隔离兜底
  • 沙盒也漏了 → ……那只能说明攻击者太强了,但至少你已经比 99% 的人安全
建议你刚上手时保持默认配置mode = "ask"),用一段时间后,根据你的使用习惯逐步自定义规则。先用熟了再放开,别一上来就全放行。


🔜 下一篇预告:从零读懂 reasonix.toml

前三篇装好了、会用模式了、知道怎么设权限了——但那个 reasonix.toml 文件里还有好多配置项没讲过。provider 怎么配多个模型?statusline 怎么自定义?多模型协同要改哪一行?下一篇一次性讲清楚。
>
关注我,带你用最少的钱,薅最狠的 AI 羊毛。

📌 互动话题:你用过 AI 编程工具出过安全事故吗?或者你做过什么奇怪的权限设置?评论区聊聊。