第九章:安全机制
> 🔒 本章详细介绍 MiniClaw 的安全机制,包括命令执行沙箱、数据隐私保护和安全最佳实践。
---
9.1 安全机制概述
9.1.1 安全设计理念
MiniClaw 的安全机制遵循 最小权限原则 和 防御性编程 理念。
┌─────────────────────────────────────────────────────────────────────┐
│ 安全设计理念 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 传统 AI 助手 MiniClaw 安全机制 │
│ ┌───────────────────┐ ┌───────────────────┐ │
│ │ │ │ │ │
│ │ 无限制执行 │ │ 白名单沙箱 │ │
│ │ 数据可能泄露 │ │ 本地存储 │ │
│ │ 无安全边界 │ │ 多层防护 │ │
│ │ │ │ │ │
│ └───────────────────┘ └───────────────────┘ │
│ │
│ ❌ 可能执行危险命令 ✅ 仅允许安全命令 │
│ ❌ 数据上传云端 ✅ 数据本地存储 │
│ ❌ 无访问控制 ✅ 多层安全边界 │
│ │
└─────────────────────────────────────────────────────────────────────┘
9.1.2 安全架构
┌─────────────────────────────────────────────────────────────────────┐
│ 安全架构 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ │
│ │ 用户请求 │ │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ 第一层:输入验证 │ │
│ │ • 参数类型检查 (Zod Schema) │ │
│ │ • 参数长度限制 │ │
│ │ • 特殊字符过滤 │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ 第二层:权限检查 │ │
│ │ • 命令白名单检查 │ │
│ │ • 文件路径验证 │ │
│ │ • 操作类型限制 │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ 第三层:执行沙箱 │ │
│ │ • 超时控制 (10s) │ │
│ │ • 输出截断 (1MB) │ │
│ │ • 工作目录限制 │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
---
9.2 命令执行沙箱
9.2.1 命令白名单
┌─────────────────────────────────────────────────────────────────────┐
│ 命令白名单 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ✅ 允许的命令 │
│ │
│ 文件操作(只读): │
│ • ls, cat, find, grep, head, tail, wc, tree │
│ • file, stat, du, df │
│ │
│ Git 命令(只读): │
│ • git status, git log, git diff, git branch │
│ • git show, git remote, git config (读取) │
│ │
│ 包管理器: │
│ • npm, node, npx, pnpm, yarn │
│ • python, pip, python3, pip3 │
│ │
│ 系统信息: │
│ • echo, date, uname, which, pwd, ps, env │
│ • whoami, hostname, uptime │
│ │
│ ❌ 禁止的命令 │
│ │
│ 破坏性操作:rm, rmdir, del, mv, cp, chmod, chown, dd, shred │
│ 权限提升:sudo, su, doas, pkexec, gksudo │
│ 网络操作:curl, wget, nc, netcat, telnet │
│ 进程管理:kill, pkill, killall, systemctl, service │
│ │
└─────────────────────────────────────────────────────────────────────┘
9.2.2 沙箱实现
// 命令白名单检查
const ALLOWED_COMMANDS = [
'ls', 'cat', 'find', 'grep', 'head', 'tail',
'git', 'npm', 'node', 'npx', 'pnpm',
'echo', 'date', 'uname', 'which', 'pwd'
];
async function execCommand(command: string): Promise<string> {
// 1. 解析命令
const cmd = command.trim().split(' ')[0];
// 2. 白名单检查
if (!ALLOWED_COMMANDS.includes(cmd)) {
throw new Error(`Command not allowed: ${cmd}`);
}
// 3. 执行命令(带超时)
const result = await execWithTimeout(command, 10000);
// 4. 输出截断
if (result.length > 1024 * 1024) {
return result.substring(0, 1024 * 1024) + '\n[Output truncated]';
}
return result;
}
---
9.3 数据隐私保护
9.3.1 本地存储原则
┌─────────────────────────────────────────────────────────────────────┐
│ 本地存储原则 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ✅ 所有数据本地存储 │
│ │
│ 存储位置: │
│ • ~/.miniclaw/ - 主目录 │
│ • ~/.miniclaw/memory/ - 日志 │
│ • ~/.miniclaw/archived/ - 归档 │
│ │
│ 不上传的数据: │
│ • 用户对话记录 │
│ • 用户偏好设置 │
│ • 项目信息 │
│ • 任何个人数据 │
│ │
│ 网络访问限制: │
│ • 无出站网络请求 │
│ • 纯本地文件操作 │
│ • 通过 MCP 协议与客户端通信 │
│ │
└─────────────────────────────────────────────────────────────────────┘
---
本章小结
┌─────────────────────────────────────────────────────────────────────┐
│ 第九章 核心要点 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 🔒 安全设计理念 │
│ • 最小权限原则 │
│ • 防御性编程 │
│ • 多层安全边界 │
│ │
│ 🛡️ 命令执行沙箱 │
│ • 白名单机制 │
│ • 超时控制 (10s) │
│ • 输出截断 (1MB) │
│ │
│ 🔐 数据隐私 │
│ • 纯本地存储 │
│ • 无数据上传 │
│ • 用户完全控制 │
│ │
│ ⚠️ 安全建议 │
│ • 定期检查 DNA 文件 │
│ • 备份重要记忆 │
│ • 及时更新版本 │
│ │
└─────────────────────────────────────────────────────────────────────┘
---
*本文档是《MiniClaw 深度解析》系列的第九章,下一章将详细介绍 MCP 协议实现。*