## 问题描述 目前 memo 允许执行 shell 命令,但对于一些高风险操作(如 `rm -rf /`、`rm -rf ~` 等)缺乏有效的拦截机制。虽然已有工具审批系统,但对于 session 级别审批或 `--dangerous` 模式,仍然存在误操作导致数据丢失的风险。 ## 现状 - 已有工具审批机制(once/session/deny) - `--dangerous` 模式会跳过所有审批 - 但某些命令即使在审批后执行,也具有不可逆的高风险 ## 建议方案 ### 1. 敏感命令拦截(黑名单机制) 定义高危命令模式,在执行前强制拦截并额外确认: ``` - rm -rf / - rm -rf ~ - rm -rf /* - > /dev/sda - mkfs.* - dd if=/dev/zero of=/dev/sda - 等等... ``` **特点**: - 即使使用 `--dangerous` 模式也需要额外确认 - 支持配置是否完全禁止(不可覆盖)或仅额外警告 ### 2. 工具沙箱(受限执行环境) 为 shell 命令执行提供可选的沙箱模式: - **文件系统沙箱**: 限制命令只能在当前工作目录(或白名单目录)内操作 - **网络沙箱**: 限制网络访问 - **资源限制**: 限制 CPU/内存使用,防止 fork 炸弹 **实现思路**: - 使用 Linux namespace + cgroups - 或使用容器技术(如 Docker/Podman) - 或集成现有沙箱工具(如 bubblewrap, firejail) ### 3. 敏感路径保护 - 自动识别并保护常见敏感路径(`~/.ssh`, `~/.config`, 系统目录等) - 尝试操作这些路径时需要额外确认 - 支持用户自定义保护路径 ### 4. 操作可恢复性 对于某些操作,提供"软删除"或备份机制: - 删除文件时先移到回收站/临时目录 - 修改文件前自动备份 - 提供 `undo` 命令恢复最近的操作 ## 配置示例 ```toml [security] # 启用敏感命令拦截 block_dangerous_commands = true # 完全禁止(不可覆盖)的命令 forbidden_commands = ["rm -rf /", "mkfs.ext4 /dev/sda"] # 沙箱模式 sandbox_mode = "filesystem" # none | filesystem | container # 保护路径 protected_paths = ["~/.ssh", "~/.memo", "/etc"] ``` ## 优先级 高 - 涉及数据安全,防止误操作导致不可挽回的损失 ## 参考实现 - GitHub Copilot CLI 的危险命令拦截 - AWS CloudShell 的受限环境 - VS Code 终端的链接信任机制
Activity