🔐 OpenClaw工具权限管理指南

安全第一——让Agent在边界之内自由行动

为什么需要权限管理?

想象一下,你的Agent能够删除文件、发送邮件、访问数据库——听起来很强大,但如果它被恶意prompt注入了呢?一个被操控的Agent可能执行rm -rf /或者泄露所有用户数据。这就是权限管理存在的意义:在能力与安全之间划一条红线。

🚨 安全案例:2024年,某AI客服Agent因缺乏权限控制,被prompt注入攻击者诱导执行了系统命令,导致整个生产服务器被清空。教训:永远不要信任LLM的输出。

OpenClaw权限模型

三层权限架构

权限层级
├── Agent级别 (全局限制)
│   ├── 禁止的工具列表
│   ├── 允许的工具列表
│   └── 敏感操作阈值
├── 工具级别 (能力声明)
│   ├── 需要的权限
│   ├── 访问的资源类型
│   └── 危险等级
└── 操作级别 (单次审批)
    ├── 具体操作参数
    ├── 用户确认
    └── 操作审计

权限类型表

权限类型 说明 示例工具
file.read 读取文件 文档查看、数据分析
file.write 写入/创建文件 文档编辑、代码生成
file.delete 删除文件 清理临时文件
network.request 发起网络请求 API调用、网页抓取
shell.execute 执行系统命令 脚本执行、编译
email.send 发送邮件 通知发送
database.access 数据库操作 查询、插入、更新

配置工具权限

声明式权限配置

import { Agent, ToolPermission } from 'openclaw';

const agent = new Agent({
  permissions: {
    // 白名单模式:只允许这些权限
    mode: 'whitelist',
    allowed: [
      'file.read',
      'network.request'
    ],
    
    // 黑名单模式:禁止这些权限(慎用)
    denied: [
      'file.delete',
      'shell.execute'
    ],
    
    // 需要审批的权限
    requiresApproval: [
      'email.send',
      'database.write'
    ]
  }
});

工具级别权限声明

const emailTool = {
  name: 'send_email',
  description: '发送邮件给指定收件人',
  permissions: {
    required: ['email.send'],
    riskLevel: 'high',
    auditRequired: true,
    // 参数级别的权限控制
    parameterConstraints: {
      to: {
        // 只能发送给白名单邮箱
        pattern: /^[\w.-]+@(company\.com|partner\.org)$/
      },
      subject: {
        maxLength: 100
      }
    }
  },
  handler: async (params) => {
    // 执行发送逻辑
  }
};

agent.registerTool(emailTool);

审批流程

人机审批机制

对于高风险操作,OpenClaw支持用户审批流程:

agent.setApprovalHandler({
  // 自动审批规则
  autoApprove: (toolCall) => {
    // 低风险操作自动通过
    if (toolCall.riskLevel === 'low') return true;
    // 已批准过的类似操作
    if (toolCall.isRepeatOfApproved) return true;
    return false;
  },
  
  // 需要人工审批时的处理
  requestApproval: async (toolCall) => {
    // 发送审批请求到用户
    const approval = await sendApprovalRequest({
      tool: toolCall.name,
      params: toolCall.arguments,
      reason: toolCall.reason,
      timeout: 30000 // 30秒内必须响应
    });
    
    return approval.accepted;
  },
  
  // 审批超时处理
  onTimeout: (toolCall) => {
    return 'reject'; // 或 'auto_approve' 根据业务需求
  }
});

审批界面示例

💡 用户视角:当Agent尝试执行敏感操作时,用户会收到类似这样的审批请求:
Agent请求执行以下操作:
工具: send_email
参数: {
  to: "admin@company.com",
  subject: "系统报警通知",
  body: "CPU使用率超过90%"
}

[允许] [拒绝] [总是允许此类操作]

安全沙箱

隔离执行环境

OpenClaw支持在沙箱环境中执行工具,防止意外或恶意操作影响主系统:

agent.setSandbox({
  enabled: true,
  type: 'docker', // 或 'process', 'vm'
  
  // 沙箱配置
  config: {
    // 文件系统隔离
    filesystem: {
      readOnly: ['/etc', '/usr'],
      writeOnly: ['/tmp/agent-work']
    },
    // 网络隔离
    network: {
      allowDomains: ['api.example.com'],
      denyDomains: ['*']
    },
    // 进程隔离
    process: {
      maxProcesses: 5,
      maxMemory: '256MB',
      timeout: 30000
    }
  }
});

最小权限原则

⚠️ 金科玉律:只授予完成任务所需的最小权限。不要因为"可能需要"就授予全部权限。

权限最小化实践

// 错误:授予过多权限
agent.setPermissions(['file.*', 'shell.*']); // ❌

// 正确:只授予需要的权限
agent.setPermissions(['file.read', 'file.write']); // ✅

// 更好:限定具体路径
agent.setPermissions([
  { type: 'file.read', paths: ['/data/input'] },
  { type: 'file.write', paths: ['/data/output'] }
]);

审计与追溯

操作日志

agent.enableAudit({
  logAll: true,
  includeSensitive: false, // 不记录敏感参数值
  
  // 日志存储
  storage: {
    type: 'file',
    path: '/var/log/agent-audit.log',
    retention: 30 // 保留30天
  },
  
  // 审计事件
  events: [
    'tool_call',
    'tool_result',
    'approval_request',
    'approval_response',
    'permission_denied'
  ]
});

审计报告

// 生成审计报告
const report = await agent.generateAuditReport({
  period: 'last_7_days',
  filters: {
    user: 'user123',
    tool: 'send_email'
  }
});

console.log(report.summary);
// {
//   totalCalls: 156,
//   approved: 152,
//   rejected: 4,
//   autoApproved: 140,
//   manualApproved: 12
// }

最佳实践

  1. ✅ 使用白名单而非黑名单
  2. ✅ 为所有工具声明所需权限
  3. ✅ 高风险操作必须审批
  4. ✅ 启用沙箱隔离执行环境
  5. ✅ 记录所有操作审计日志
  6. ✅ 定期审查权限配置
  7. ✅ 敏感数据不在日志中记录
  8. ✅ 用户可随时撤销权限

常见问题

Q: 白名单和黑名单哪个更好?

白名单更安全。黑名单模式可能漏掉新添加的危险权限,而白名单默认拒绝所有未显式允许的操作。

Q: 如何处理权限不足的情况?

Agent会收到权限不足的反馈,可以尝试替代方案或请求用户授权。不要让Agent失败,而是引导它找到安全路径。

Q: 沙箱会降低性能吗?

会有轻微影响(约5-10%),但安全收益远大于性能损失。对于高频调用场景,可以考虑进程隔离而非Docker。

📅 最后更新:2026年5月2日 | 作者:妙趣AI