kneo
V2EX  ›  OpenAI

Codex 把我电脑文件都删了

  •  
  •   kneo · 5h 4m ago · 1897 views

    昨天为了赶在额度重置前把额度用完,出门前交代 codex 自己去远程验证整个项目脚本和文档的正确性,开了 full access ,回来一看悲剧了,把我 C 盘和 D 盘文件全删了……估计删了我两三百 G 的数据,上百万个文件……

    用的模型是 gpt-5.6-sol xhigh fast 。真他妈快啊,除了少数被进程占用的文件,全给我删了。

    让 Claude Code 分析了下 codex 的记录:

      wsl.exe bash -lc 'set -e; d=$(mktemp -d); cd "$d";
        apt-get download sshpass >/dev/null;
        dpkg-deb -x sshpass_*.deb extracted;
        cp extracted/usr/bin/sshpass /tmp/xxx-semantic-bin/sshpass;
        chmod 700 /tmp/xxx-semantic-bin/sshpass;
        cd /; find "$d" -depth -delete;          # ← 这一句
        /tmp/xxx-semantic-bin/sshpass -V'
    

    它的本意只是:下个 sshpass 二进制,然后把 mktemp -d 建的临时目录删掉。目标本该是 /tmp/tmp.XXXXXX 。

    关键证据在 file:4249 —— Win32_Process 记录的操作系统层面真实命令行里,$d 两侧的双引号已经没了( PowerShell 把参数传给原生 exe 时没有转义内层的 ")。

    我极少在 Windows 上原生执行 claude/codex ,更从来没给过 full access ,没想到第一次给它 full access 就翻船了……

    太倒霉了。有一万个如果可以让这件事不要发生。如果不是我有云备份,我大概已经去自首了。

    25 replies    2026-08-09 15:53:05 +08:00
    noahliaszn
        1
    noahliaszn  
       4h 59m ago
    正常我用 Claude 也这样狗屎哈
    zjvbqla
        2
    zjvbqla  
       4h 50m ago via Android   ❤️ 1
    是不是可以理解为在 Windows 下,这种可能性会更大一些?
    Solix
        3
    Solix  
       4h 44m ago
    windows 上 vibe coding 软件很容易删硬盘,有很多案例哈哈
    kneo
        4
    kneo  
    OP
       4h 40m ago
    @zjvbqla Windows 命令行老坑了。虽然 Linux 和 Mac 上也有这种问题,但是 Windows 出这种问题的概率应该是其他平台的十倍以上……

    实际上绝大多数误删文件都是命令行引号和转义导致的。毕竟,Bash is all you need !
    heywitt
        5
    heywitt  
       4h 40m ago
    > 我极少在 Windows 上原生执行 claude/codex

    我猜测你使用的是 WSL 的沙盒隔离方式,codex 支持使用 windows 原生沙盒,你这个问题与 WSL 沙盒运行方式也有关系。

    - SL 默认把固定盘挂到 /mnt/c 、/mnt/d 之类的,你的 find 没有使用 -xdev/-mount ,从 / 遍历时会进入这些挂载点,这是导致其他盘受影响的主要原因
    - 跨 PowerShell + 原生 exe + WSL + Bash ,这类转移引号错误非常常见
    - Windows + WSL 本身可能存在 "路径拼装错误" 的风险,我在多个 Agent 中都遇到过

    给你的几个建议:

    - 避免再次犯同样的错误:find ... -delete 本身就是高危命令,建议你后续最好对这类行为做一个 skill 限制,find 缺少参数或者参数错误时有默认行为
    - 我建议禁止 bash -lc 的拼装,用 wsl.exe --exec bash ... 的方式进行执行,这会去磁盘绕一圈,但是更安全
    - 不要使用 WSL:改为 Windows 的原生隔离方式,在 Codex 的设置里面可以选择,这会让 Codex 在你的系统创建 2 个特殊用户,并且隔离执行代码,这可以避免大多数的 WSL 路径拼装或路径寻找错误
    - 作为全权限自动值守任务,我建议你使用一个独立的 Windows 账户 (或是在独立的容器)里执行
    - 我自己有一个 skill 是硬要求全局禁止删除,并且将新增、修改最后在任务完成后列出来展示,无人值守为了确保安全性推荐这样,你可以让 Agent 引导做一个类似的 skill ,即便是 cleanup 也应当使用指定的脚本进行安全确认路径后再删除
    heywitt
        6
    heywitt  
       4h 36m ago
    @kneo 这和 Windows 命令行,PowerShell 并没有直接关系,Bash 不能直接避免这个问题。
    PowerShell 拼接 bash -lc 确实是有风险的,但这次事故应该集中在 WSL 挂载盘符导致向上搜索、find -delete 高危命令、非隔离执行、非隔离删除这几件事情上。
    sskycn
        7
    sskycn  
       4h 35m ago
    我这出现过把我手机上的 app 删掉的情况,它认为这个 app 干扰了它的分析,直接删掉了。
    kneo
        8
    kneo  
    OP
       4h 32m ago
    @heywitt >我猜测你使用的是 WSL 的沙盒隔离方式,codex 支持使用 windows 原生沙盒,你这个问题与 WSL 沙盒运行方式也有关系。

    用的原生 codex.exe ,在 powershell 里执行的。说实话我不知道它有什么必要调用 wsl.exe 运行 bash 。可能它训练数据就是习惯用 bash ,所以哪怕 powershell 可以完成的大多数任务它也要用 wsl 执行 bash ,中间多一层调用就多一层转义的问题。

    我这次是因为要外出,又急着想在重置前把 token 用光,不想让它卡住等我确认,就给了 full access 。应该是没有沙盒的。即使有沙盒,我怀疑它也会尝试调用 wsl.exe 之类的绕过。不太了解,纯猜测。

    主要这也不是我平常的开发环境,这次就是临时起意,真是自杀式 vibe 。
    liuzhihang
        9
    liuzhihang  
       4h 27m ago via iPhone
    我 mac 一直用的 full access 看来以后得改改了。
    heywitt
        10
    heywitt  
       4h 13m ago
    @kneo 不是,Codex 有两种运行方式,一种是 WSL 沙盒,一种是 Windows 原生沙盒,看你的情况应该是默认的 WSL 沙盒模式。我所说的原生指的是 Native Sandbox.

    另外你说的有道理,大部分 Agent 训练数据就是 Unix 生态,一旦你的机器上有 WSL 很有可能会优先使用,此外如果你的工作、下载的包里面包含 `/tmp` 这种 Unix 生态常见路径,也会引导 Agent 转向 WSL 。除非后续手动指示优先级。

    把 PowerShell / ssh.exe 等等原生方案声明为默认处理器或者全程只在 WSL 内部处理是有必要的,每次绕 wsl.exe bash -lc 这种是有风险的。
    keenkiller
        11
    keenkiller  
       4h 12m ago via Android
    我一直开的是替我审批。

    然后,我的 windows 已经沦为游戏机。
    testsb
        12
    testsb  
       4h 11m ago
    vibe coding → wild coding😁
    bbbblue
        13
    bbbblue  
       4h 2m ago
    感觉是每个头铁不听劝 隔离不做好就在那 yolo/full access 的最终结局了
    每隔一段时间就能看到一个
    likuku
        14
    likuku  
       2h 49m ago
    各种硬件加速虚拟化技术挺普及了,虚拟机性能真很好,创建个本地虚拟机,只能被单向访问,把 aiagent 关起来用
    watzds
        15
    watzds  
       2h 22m ago
    可怕,这种情况不开 full access 能避免吗,如果是双引号,转义什么的,会不会我自己也看不出来
    hefmt137
        16
    hefmt137  
       2h 19m ago
    万事加备份
    msg7086
        17
    msg7086  
       2h 18m ago
    所以我是开个 VM 专门给 codex ,代码都用 syncthing 同步,炸了就炸了。
    techmale
        18
    techmale  
       2h 1m ago
    + Time Machine
    + SOP (trash instead of rm (take macOS for example))
    + SOP (move things to somewhere instead of direct removal)
    + pack important dirs and files into zip files and copy/sync to a cloud drive
    cz5424
        19
    cz5424  
       1h 38m ago via iPhone
    我一般给他个虚拟机,删掉就删了,pve 提前打个快照🥲
    Admstor
        20
    Admstor  
       1h 31m ago
    GPT 自己都建议我在 ubuntu 这样的系统里使用它
    cskeleton
        21
    cskeleton  
       40 mins ago
    我的所有 agent 都是 full access ,算了我还是不立 flag ,我觉得我这习惯得改改。
    dfly0603
        22
    dfly0603  
       36 mins ago
    自带的 powershell 害人不浅(
    mmdsun
        23
    mmdsun  
       34 mins ago
    claude code 我也是最大权限,windows 感觉是 codex 非要在 wsl 执行命令的问题。
    lianyue
        24
    lianyue  
       27 mins ago
    为什么要开 full 啊 自动审批就好了
    几乎每天我都会遇见越权问题


    AGENTS.override.md 是这样的

    ........

    ## 脚本和命令范围

    - 修改项目文件必须直接编辑目标文件本身,每处改动可见、可逐条核对、可回溯。
    - 禁止用临时脚本、heredoc 、解释器内联代码、`sed`/`awk`/`perl` 就地改写、重定向覆盖或批量替换命令间接修改项目文件;多文件同类修改也逐个直接编辑。
    - 命令行只用于读取、检查、构建、测试等不改写项目文件的用途。代码生成、格式化等本来就会写入项目文件的既有流程按目标目录已有约定执行,并说明产物范围。
    - 确有无法直接编辑的场景时,先说明原因、影响范围和验证方式并取得用户确认,不得先执行再补充说明。
    - 执行脚本、解释器或 shell 命令前,必须检查脚本内容、最终参数、工作目录和所有路径展开范围。
    - 搜索内容、文档文本或用户原话包含 shell 元字符时,必须使用固定字符串、正确引用、参数化或文件输入,禁止让展示文本进入可执行位置。
    - 默认读写范围限于当前任务相关目录以及系统、用户或项目的临时目录和常规缓存;工具链、可执行文件和依赖缓存可按需读取。范围外访问必须先取得用户明确确认。
    - 禁止列出或递归扫描与任务无关的宽泛系统路径或用户目录。
    - 优先使用工具默认缓存和项目既有约定;只有出现权限、污染或隔离需求时才指定任务内稳定缓存,并说明原因。
    - 路径、通配符、符号链接、环境变量或相对路径可能越界时,必须先停止并等待确认。

    ## 额外问题和高风险修改

    - 发现可能影响安全、权限、隐私、数据完整性、可用性、资源、并发或线上兼容的问题时,先说明证据和影响。
    - 判断并发问题前必须确认公开并发契约和真实可达调用路径;没有实际并发入口或证据时只能记录为待验证假设。
    - 与当前任务直接相关的问题,说明原因后再一起修;与当前任务无关的问题,不要擅自修复,只说明位置、影响和建议。
    - 安全、资产、数据删除或迁移、存储或通信契约、加密与凭据、并发与事务、外部服务和生产环境相关修改属于高风险;必须明确影响范围,补充相称验证,不做无关重构,不擅自改变默认安全或兼容语义。

    .........
    john1024
        25
    john1024  
       7 mins ago
    太吓人了。我后面装了个钩子,叫 dcg ,删除前都会让我确认
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2895 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 08:01 · PVG 16:01 · LAX 01:01 · JFK 04:01
    ♥ Do have faith in what you're doing.