大家好,我是R哥。

这几天真不消停啊,《Grok 偷偷上传整个代码库》事件闹得沸沸扬扬,现在又发现几起 GPT-5.6 Sol 删除数据库、Mac 所有文件的事件

Grok 在偷你的代码,Codex 在删除你的所有文件。。。

有人被删除整个生产数据库,有人被清空 Mac 所有文件,太 TM 恐怖了。。

为了方便,我相信大家一直都是「完全访问」模式的,包括我自己也是,以前觉得没所谓,觉得这类先进的 AI 工具不可能乱搞。

但看完这几个案例,真是让人心惊胆战,让我意识到不能再这样下去了!!!

电脑里面重要资料太多了,权限不能再由 AI 自行决定了,必须要有一个自定义的权限机制,一旦 AI 出现问题乱删文件,后果不堪设想。

Codex 自定义权限指南

其实 Codex 是支持自定义权限的:

官方提供了 forbidden 规则,可以直接禁止指定危险命令,方法如下。

1、启用执行策略

~/.codex/config.toml 中启用执行策略:

[rules]
user_rules = [
  "~/.codex/rules/default.rules"
]

指定了一个默认的规则文件 ~/.codex/rules/default.rules,指定自定义权限,下面我们会创建这个规则文件。

2、创建规则文件

然后创建 ~/.codex/rules/default.rules 默认规则文件:

prefix_rule(
    pattern = ["rm", "-rf"],
    decision = "prompt",
    justification = "禁止执行 rm -rf。"
)

decision 支持三种模式:

  • allow:在沙箱外部运行命令,无需提示。
  • prompt:每次匹配调用前的提示。
  • forbidden:阻止请求,不进行提示。

这样下面的删除操作都会要提示授权:

rm -rf /
rm -rf *
rm -rf test

也可以添加更多的 prefix_rule 规则来把危险命令都禁用掉,然后再添加允许的一些常规操作。

3、开启安全沙盒模式

Codex 支持 3 种沙盒模式:

  • read-only(只读)
  • workspace-write(工作区写入)
  • danger-full-access(危险完全访问)

~/.codex/config.toml 中启用执行策略:

sandbox_mode = "workspace-write"
approval_policy = "on-request"

这里主要指定了 sandbox_mode 沙盒模式为 workspace-write工作区写入模式(默认)允许:

  • 随时随地读取文件;
  • 将文件写入工作目录(cwd);
  • 写入指定的其他目录 --add-dir
  • 保护 .git/ 目录为只读状态;
  • 网络访问(如果已启用)。

Codex 支持 3 种授权模式:

  • on-request(逃离沙箱时发出提示批准)
  • untrusted(非信任的提示批准)
  • never(从不提示批准)

设置 approval_policy 策略设置为 on-request,表示当代理需要逃离沙箱时发出提示,但会自动批准在沙盒边界内进行的操作,兼顾安全性和生产力。

使用 codex 终端时可以通过命令行指定:

codex –ask-for-approval on-request –sandbox workspace-write

不要再使用完全访问模式了:

sandbox_mode = "danger-full-access"

否则 Codex 将拥有完整的文件系统访问和写入能力,存大巨大风险。

4、效果测试

配置成功后,重新使用 codex 进入终端,尝试执行删除操作:

如图,已经弹出授权操作了。

我再尝试使用「完全访问」模式测试下:

如图,在没有任何批准提示的情况下,Codex 直接删除了我的 test 文件夹,说明我们的自定义权限生效了。

在终端测试下:

终端也生效了,成功弹出了批准提示。

5、漏网之鱼

虽然我已经设置了自定义权限和安全沙盒模式,但测试下来还是会出现目录被删除的情况:

原因就是,如果 Codex 发现 rm -rf 命令不可用,它还会尝试其他命令,比如 rmdirrm -r 等等类似命令,如果执行了这些命令,还是会删除整个目录。

所以我们需要在规则文件中添加更多的规则,禁止这些危险命令。

我已经总结了一些与「删除目录」有关的危险命令:

# 禁止 rm 的递归删除、强制递归删除以及空目录删除参数。
# 普通的 rm 文件名、rm -f 文件名仍然允许执行。
prefix_rule(
    pattern = [
        "rm",
        [
            "-r",
            "-R",
            "-rf",
            "-fr",
            "-Rf",
            "-fR",
            "--recursive",
            "-d",
            "--dir",
        ],
    ],
    decision = "prompt",
    justification = "禁止使用 rm 删除目录。"
)

# 禁止把强制参数和递归参数分开传入。
prefix_rule(
    pattern = [
        "rm",
        ["-f", "--force"],
        ["-r", "-R", "--recursive", "-d", "--dir"],
    ],
    decision = "prompt",
    justification = "禁止使用 rm 删除目录。"
)

# rmdir 只能用于删除目录,所以全部禁止。
prefix_rule(
    pattern = ["rmdir"],
    decision = "prompt",
    justification = "禁止执行 rmdir。"
)

大家可以直接复制到 ~/.codex/rules/default.rules 中,根据自己的需求修改、增强即可。

总结

给 Codex 加了自定义权限,一下让我安心多了,想想这几起案例,真让人后怕。

虽然麻烦一点,但为了安全起见,还是建议大家都开启自定义权限和安全沙盒模式,避免出现删除数据库、清空 Mac 文件的悲剧。

最后,大家千万不要抱有侥幸心理,安全第一,不要等到悲剧发生了才后悔莫及。

未完待续,Claude Code 也有类似的权限控制,等我配置再测试下,再分享给大家,我们下期见。

R哥会继续分享更多 Claude Code、Codex、AI 编程的实战干货,关注「AI技术宅」公众号和我一起学 AI。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注