#OpenClaw #NAS #SMART #最小权限

最小权限不是把功能永久停在“只能看容量”。更实用的目标是最大安全权限包络:尽量增加诊断能力,但把身份、对象、路径、副作用、回执和回滚全部冻结。

基础快照隔离架构见 《N100 只读 NAS Observer:从高权限 Skill 到快照隔离》。本文只记录后续能力扩展。

一、从五个查询扩展到十七个工具

扩展后的能力分为三组:

  • 九个只读投影:宿主资源、存储、磁盘、SMART 脱敏摘要、共享、Docker 状态、定时任务、统一风险和综合诊断;

  • 固定诊断动作:即时刷新、受控临时写探针、脱敏诊断包、SMART short 计划/启动/状态、配置 preview;

  • 服务恢复 preview:生成对象哈希、身份绑定、十分钟 TTL、单次使用、前后置检查和自动回滚方案,但不开放生产执行。

OpenClaw 仍然没有 Docker socket、root、通用命令、任意路径、凭据或第三方网络。容器日志也不是任意查询,只在宿主端按固定窗口归约为 error、timeout、OOM、storage 等计数,原文不进入快照。

二、为什么 SMART 需要独立 root helper

普通用户无法可靠读取块设备 SMART。把用户加入 disk 组或授予通用 sudo 会扩大到所有磁盘原始访问,因此没有采用。

最终使用独立 root oneshot:

1
2
3
4
5
6
OpenClaw family-owner
-> 普通用户 Unix worker
-> 单一 SMART 请求槽
-> root systemd timer
-> 固定 smartctl 参数 + 冻结设备身份
-> 脱敏摘要与 receipt

helper 内部根据既有存储治理配置校验型号、序列号和容量,但输出只保留 system、两个 Btrfs 槽位和 smb 四个逻辑标签。SMART short 只允许 systemsmb;两块 Btrfs 盘只有摘要权限,不允许测试、scrub、repair 或写入。

root service 使用只读 home、严格保护系统目录、无网络地址族、禁止新增权限和可执行内存。可写路径只包含固定 public/private state 目录。

三、一次真实故障如何补强协议

第一次生产 short test 暴露了一个测试夹具未模拟的差异:smartctl -t short -j 的启动响应不包含完整设备身份字段。旧 helper 已在启动前完成身份校验,但又错误地校验启动响应,于是失败关闭。

请求文件被隔离保留,没有在下一个周期重放。磁盘实际测试结果随后显示 Completed without error

修复后的协议变为:

  1. 启动前读取完整摘要并校验冻结身份;

  2. 先持久化 dispatching receipt;

  3. 只执行固定 short 命令;

  4. 启动后重新读取完整摘要并校验;

  5. ETA 后必须看到时间晚于本次 ETA 的新快照,才能把状态升级为 completed

这同时封闭了两个问题:命令发出后进程崩溃不会自动重放;上一次测试的 Completed 也不能冒充本次结果。

第二次生产测试重复提交返回同一 receipt,ETA 后旧快照负向控制仍为 started,新摘要到达后才变为 completed,结果为 Completed without error

四、可靠性不是单一绿灯

最终门禁覆盖:

  • stale/future、符号链接、超限 JSON 与字段缺失;

  • 原始日志、序列号、设备路径、凭据标记泄漏;

  • 命令、路径、参数和磁盘目标注入;

  • 并发幂等、request ID 重用、超时与写探针残留;

  • SMART 身份错配、Btrfs 启动请求、伪造结果和历史结果复用;

  • 验收器、worker envelope 与 SMART 对象范围的 mutation test;

  • 插件注册工具与 manifest contract 的精确一致性。

测试在 Mac 与 N100 staging 运行,生产再复算同一候选 SHA。真实 family-owner Agent 也调用了 SMART 计划工具,确认只有 system 与 smb 可启动。

最终 qB、执行器和 family-exec-worker 的身份、PID、restart 都没有变化;两个 NAS 挂载点使用量逐字节不变,临时写探针无残留,部署窗口没有新增内核存储错误。

五、仍然不应该开放什么

以下能力继续关闭:fnOS 二进制/API/session、SMART 原始 JSON 或任意设备、Btrfs 写入/scrub/repair、mount/umount/格式化、共享 ACL 写入、容器恢复的生产执行、Docker socket、qB/媒体写入、凭据读取和通用命令。

它们确实能提高维修自动化和实时性,但代价是把故障域扩大到存储破坏、宿主 root、跨服务写入或敏感信息泄漏。未来如采用,应逐项建立对象冻结、一次性授权、备份、postflight、receipt 和自动回滚,不能重新聚合成一个“万能 NAS 管理工具”。

OpenClaw 整体能力规划见 《OpenClaw 后续功能规划与待办任务》