kneo
V2EX  ›  OpenAI

Codex 把我电脑文件都删了

  •  
  •   kneo · 20h 25m ago · 4784 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 就翻船了……

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

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

    实际上绝大多数误删文件都是命令行引号和转义导致的。毕竟,Bash is all you need !
    heywitt
        5
    heywitt  
       20h 0m 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  
       19h 57m ago
    @kneo 这和 Windows 命令行,PowerShell 并没有直接关系,Bash 不能直接避免这个问题。
    PowerShell 拼接 bash -lc 确实是有风险的,但这次事故应该集中在 WSL 挂载盘符导致向上搜索、find -delete 高危命令、非隔离执行、非隔离删除这几件事情上。
    sskycn
        7
    sskycn  
       19h 55m ago
    我这出现过把我手机上的 app 删掉的情况,它认为这个 app 干扰了它的分析,直接删掉了。
    kneo
        8
    kneo  
    OP
       19h 53m 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  
       19h 48m ago via iPhone
    我 mac 一直用的 full access 看来以后得改改了。
    heywitt
        10
    heywitt  
       19h 33m 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  
       19h 33m ago via Android
    我一直开的是替我审批。

    然后,我的 windows 已经沦为游戏机。
    testsb
        12
    testsb  
       19h 31m ago
    vibe coding → wild coding😁
    bbbblue
        13
    bbbblue  
       19h 23m ago
    感觉是每个头铁不听劝 隔离不做好就在那 yolo/full access 的最终结局了
    每隔一段时间就能看到一个
    likuku
        14
    likuku  
       18h 10m ago
    各种硬件加速虚拟化技术挺普及了,虚拟机性能真很好,创建个本地虚拟机,只能被单向访问,把 aiagent 关起来用
    watzds
        15
    watzds  
       17h 43m ago
    可怕,这种情况不开 full access 能避免吗,如果是双引号,转义什么的,会不会我自己也看不出来
    hefmt137
        16
    hefmt137  
       17h 39m ago
    万事加备份
    msg7086
        17
    msg7086  
       17h 39m ago
    所以我是开个 VM 专门给 codex ,代码都用 syncthing 同步,炸了就炸了。
    techmale
        18
    techmale  
       17h 21m 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  
       16h 59m ago via iPhone
    我一般给他个虚拟机,删掉就删了,pve 提前打个快照🥲
    Admstor
        20
    Admstor  
       16h 52m ago
    GPT 自己都建议我在 ubuntu 这样的系统里使用它
    cskeleton
        21
    cskeleton  
       16h 1m ago
    我的所有 agent 都是 full access ,算了我还是不立 flag ,我觉得我这习惯得改改。
    dfly0603
        22
    dfly0603  
       15h 57m ago
    自带的 powershell 害人不浅(
    mmdsun
        23
    mmdsun  
       15h 55m ago
    claude code 我也是最大权限,windows 感觉是 codex 非要在 wsl 执行命令的问题。
    lianyue
        24
    lianyue  
       15h 48m ago
    为什么要开 full 啊 自动审批就好了
    几乎每天我都会遇见越权问题


    AGENTS.override.md 是这样的

    ........

    ## 脚本和命令范围

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

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

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

    .........
    john1024
        25
    john1024  
       15h 28m ago
    太吓人了。我后面装了个钩子,叫 dcg ,删除前都会让我确认
    xubeiyou
        26
    xubeiyou  
       13h 39m ago
    全靠 ai 肯定不行的除非是新的东西 我觉得很适合 纯 vibe coding
    cellsyx
        27
    cellsyx  
       13h 32m ago
    开个虚拟机, full access + 及时提交 + 定期快照
    Ryanzlab
        28
    Ryanzlab  
       13h 20m ago
    换 claude 就好了,听到最多被删文件 删盘的,一看都在用 GPT 模型,口碑就是如此
    fanhed
        29
    fanhed  
       13h 5m ago
    @Ryanzlab claude 一样有删了别人文件的案例, 自己不设防中招是迟早的
    kneo
        30
    kneo  
    OP
       12h 56m ago via Android
    @john1024 >太吓人了。我后面装了个钩子,叫 dcg ,删除前都会让我确认

    其实确认也很难避免这类问题。

    现在 AI 执行的命令都超级长,人很难看出来这是在干嘛。我执行一次长任务经常会半个小时就让我确认几十个命令执行。鬼能看出来是干嘛的。毕竟 AI 都看不出来问题,更别说人了。光看这几十个命令,半个小时都不够你看的。

    另外像这个 find "$d",他这个命令让你确认前好像是有引号的,但他真正执行的时候引号在哪一步就掉了。
    taotaodaddy
        31
    taotaodaddy  
       12h 53m ago
    不管是 claude 还是 codex 都有删文件删盘发生的
    关键是不要 yolo ,不要给 full
    如果非要 Yolo ,非要给 full->虚拟机
    否则->为我审批
    还可以加个 Hook 来人工阻拦高危操作
    signal
        32
    signal  
       12h 21m ago
    所以我 windows 下都是自己用的自己修改过打包的 codex cli 哪个 EXE,强制让它默认就用 git bash 然后 AGENTS.md 里带上这一句:
    # 终端只能使用 git bash,我的工具环境已经是 Bash 不要用 PowerShell 包裹命令
    aloxaf
        33
    aloxaf  
       12h 13m ago
    这种问题确实防不胜防,就算人来 review 也未必能发现问题,只能说做好备份/快照

    不过说起来,我觉得对于 vibe coding 来说,set -ue 应该是执行 shell 命令时的默认值……
    wesker1999
        34
    wesker1999  
       12h 13m ago
    备份是唯一后悔药。这钱省不得。
    xuejianxianzun
        35
    xuejianxianzun  
       11h 28m ago
    我是指定 codex 使用 PS7 ,这样误删文件的可能性会小一些吧(心虚
    john1024
        36
    john1024  
       11h 6m ago
    @kneo #30 唉,只能说尽人事吧,我把重要东西都做备份
    syh2
        37
    syh2  
       11h 0m ago
    想问下到底是执行什么命令。。
    我现在都是让 AI 先备份,再执行操作,确保操作可恢复
    我试过一次用阶跃星辰的 API ,让他帮我移动文件,结果告诉我东西删了没办法恢复,气死我
    davidqw
        38
    davidqw  
       10h 46m ago
    windows 下 vibe coding 经常出这种符号问题
    kneo
        39
    kneo  
    OP
       10h 12m ago via Android
    @syh2 >想问下到底是执行什么命令。。

    原帖有啊。

    cd /; find "$d" -depth -delete; # ← 这一句

    >我现在都是让 AI 先备份,再执行操作

    我觉得让 AI 备份没啥用……它要真知道备份啥就不会删错了……除非是沙盒或者 time machine 那种全局备份。
    tiezlk443
        40
    tiezlk443  
       9h 36m ago via Android
    甲级战犯 powershell
    lefer
        41
    lefer  
       8h 32m ago
    感觉最好还是用虚拟机,只放项目用得到的文件。

    再删也不会太过分。

    直接在本地环境下太冒险了...
    otakustay
        42
    otakustay  
       8h 28m ago
    Power!!Shell!!!
    deplives
        43
    deplives  
       8h 27m ago
    以前我都是嘲讽: "谁家好人用 powershell"
    现在 powershell 的含金量更高了,
    "powershell 不仅不是给人用的,也不是给 ai 用的"
    以后要是能见到有人说精通 powershell 我高低得给站起来敬他一杯
    wclebb
        44
    wclebb  
       7h 52m ago
    我好几次看到因为 Windows 误删了。
    PolarBears
        45
    PolarBears  
       7h 50m ago
    一直不敢尝试在 Windows 上使用 AI 来帮我运行命令,毕竟不管是 cmd 还是 powershell 肯定远远不如 bash 训练充足,等什么时候 LLM 的能力提升到我敢相信的时候才会使用吧
    badreamm
        46
    badreamm  
       7h 8m ago
    windows 上的 codex 用过几次,一直出现 powershell 的转码问题
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   996 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 121ms · UTC 23:21 · PVG 07:21 · LAX 16:21 · JFK 19:21
    ♥ Do have faith in what you're doing.