Skip to content

[Grok/dsh 11] 文件系统沙箱真实执行 #143

Closed

Description

@Blackman99

Parent

#132

Ticket: 11

Status: ready-for-agent

User Stories: 26, 27(见父规格)

What to build

用户启用文件限制配置后,内置文件工具与子进程只能访问声明允许的路径,界面如实显示生效范围。

Acceptance criteria

  • 通过适配、可复用操作系统机制或上游接口实际实施已声明的读写/重命名边界,不 fork dsh。
  • 用受控样本验证工作区外路径、符号链接、重命名绕过、配置/Hook 保护和 glob 的平台差异。
  • 请求保护无法实施时拒绝启用;不能以 UI 报错或单个文件工具检查冒充全执行范围约束。
  • 在已交付平台记录内核级效果证据、限制和错误路径;后续平台票必须复验,不把未测平台标为支持。

Blocked by

Delivery contract

用户于2026-09-20批准当前测试与任务拆分。按父规格的已安装产物/真实终端和公开协议测试验收;实际实现须带适用的文档、Changeset及必要检查。ready-for-agent表示任务已定义,不表示前置任务已完成,也不授权自动开始本轮实施、购买付费资源或发布软件版本。

Activity

  1. self-assigned this
    on Sep 23, 2026
  2. Blackman99 commented on Sep 23, 2026

    @Blackman99
    OwnerAuthor

    按用户2026-09-20的实施授权领取 Ticket11 / #143;本次只记录领取,未启动实施工作者,也不表示已实现。已重新读取 #132 及全部80票正文/评论和实际 blocked-by(native 177 边,无截断,无第二页)。#142/#150/#152/#153 已在 rewrite/grok-dsh-20260920 集成并关闭;当前独立就绪且无人领取的票为 #143、#145、#147、#151、#156、#158、#159、#163、#171。本波并行领取前四张(#143、#145、#147、#151),未领取任何被阻塞后继(含 #144/#146/#148/#155/#157/#164/#169/#170/#175/#179),也未领取本波未选的其他就绪票(#156/#158/#159/#163/#171)。

    实施必须从独立集成树精确基线 065170b46c44491f53abd6f21ed8ac438ba9906a 开始。前置 #142 已关闭,同一提交已保留在 rewrite/grok-dsh-20260920;集成证据见 #142 (comment) 。#153/#152/#150/#192/#193/#189/#165/#154/#160/#141/#161/#140/#139/#138/#137/#136/#135/#134/#133 仍为已集成关闭基线。

    范围按原验收:通过适配、可复用操作系统机制或上游接口实际实施已声明的读写/重命名边界,不 fork dsh;用受控样本验证工作区外路径、符号链接、重命名绕过、配置/Hook 保护和 glob 的平台差异;请求保护无法实施时拒绝启用,不能以 UI 报错或单个文件工具检查冒充全执行范围约束;在已交付平台记录内核级效果证据、限制和错误路径,后续平台票必须复验,不把未测平台标为支持。后续实施/审查子代理使用 My CPA - Grok 4.7 Fast(grk-4.7-build-fast,effort xhigh)。仅在实施、独立审查和集成验收通过后关闭。main、现有未跟踪文件及其他工作树不改动;不授权付费资源,#212仍须新的明确最终发布/默认切换批准。

  3. Blackman99 commented on Sep 23, 2026

    @Blackman99
    OwnerAuthor

    Ticket 11 / #143 未集成。隔离集成树 rewrite/grok-dsh-20260920 仍是 065170b46c44491f53abd6f21ed8ac438ba9906a。worker 工作树 /Users/zhaodongsheng/.grok/worktrees/my-projects-codsh/subagent-01a0ce48-f379-71e2-98d3-f22af6741795 的 HEAD a835f24832dba32bd30c39751f7b9855bdf575c1 是该基线的后代(4a55bf0、886bab9、65ef111、a835f24)。未 cherry-pick,未推送,未关闭。工作树保留。

    四轮独立审查都没有双批准。最后一轮审的就是 a835f24,两名审查者均为 approved: false(base_is_ancestor: true)。前一轮 65ef111 是一否一过,不能当作批准。

    仍须在同一工作树修复后再审:

    1. 相对 deny glob 不是工作区边界。classify_deny 把相对模式接到 workspace 上,glob_to_regex 把 ** 译成 .*,于是 **/.env 变成 ^<workspace>/.*\.env$,certs/**/*.pem 变成 ^<workspace>/certs/.*[^/]*\.pem$。审查探针因此拒绝了工作区外的 outside/.env 和 outside/certs/a.pem。** 不能跨出工作区。
    2. 否定字符类方向反了。glob_to_regex 原样拷贝 [!a] 和 [^a],Seatbelt 把 ! 和 ^ 当字面量。file[!a].txt 拒绝了 filea.txt 却允许 fileb.txt;note[^b].txt 拒绝了 notec.txt 却允许 noteb.txt。两种否定都要译成 Seatbelt 形式;POSIX 类、空段和尾斜杠应拒绝而不是接受。
    3. fail_closed 下受信任项目的 [sandbox] 无法启动。config.rs 的 KNOWN_POLICY_KEYS 没有 sandbox,diagnose_unknown_security 拒绝 .grok/config.toml。已签名的 fail_closed inspect 以该错误退出 1,尽管 strict 配置已经套上。把 sandbox 加入已知策略键,并同时覆盖用户文件和项目文件。

    本控制器在 a835f24 上核对了源码:glob_to_regex(rust/src/filesystem_sandbox.rs 约 1220 行)仍把 ** 译成 .* 并原样拷贝 [];KNOWN_POLICY_KEYS(rust/src/config.rs 约 2463 行)仍没有 sandbox。deny_subpath 在非 macOS 上已经改为拒绝,不再静默返回 Ok。Linux 与 Windows 仍未执行,不能标为支持。未跑组合树测试。main 未改。#132 与 #212 不关闭。

  4. Blackman99 commented on Sep 24, 2026

    @Blackman99
    OwnerAuthor

    Ticket 11 / #143 已合入 rewrite/grok-dsh-20260920 的 dcfa48c。

    沙箱在 macOS Seatbelt 上于 dsh 启动前施加到本进程,子进程继承。拒绝规则按解析后的路径生效。相对 glob(**/.env、certs/**/*.pem)不会匹配工作区外的同名路径。/tmp、/var、/etc 的符号链接前缀会先解析。无法解析的拒绝项拒绝启动。glob 尾部目录(包括启动后新建的)不能改名挪到另一个可写根;工作区根上的 **/.env 不会把 /tmp 本身钉住。inspect --json 在配置了沙箱时仍打印全部诊断,并且不施加策略。launchctl submit / bootstrap 在策略下不能把内容送出去,探测会自行清理。

    验证:scripts/rust-filesystem-sandbox-test.py 与 scripts/rust-sandbox-pty-test.py 在合并后的树上通过。pnpm run typecheck、pnpm test(2288)、cargo fmt --check、cargo clippy -D warnings、cargo test --locked --workspace 通过。Linux 与 Windows 未在本机验证,不记为已支持。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions