OpenClaw Node安全与审批机制

5.1 Exec Approvals 设计哲学

5.1.1 核心安全理念

OpenClaw Node 的安全设计基于一个核心认知:AI Agent 是"受信任但需验证"的操作者

设计原则

  1. 最小权限原则

    • 默认拒绝所有命令
    • 仅显式允许的 command 可执行
    • 权限按 Agent 隔离,避免横向扩散
  2. 纵深防御

    • 多层安全检查(网络层、应用层、命令层)
    • 任何一层失败都阻止执行
    • 不依赖单一安全机制
  3. 可追溯性

    • 所有命令执行记录日志
    • 可追溯到具体 Agent、会话、时间
    • 支持事后审计和取证
  4. 人机协作

    • 高风险命令需要人工审批
    • AI 可以建议,人类做最终决定
    • 审批决策可学习、可优化

5.1.2 安全级别定义

Exec Approvals 定义了三个安全级别:

级别 配置 行为 适用场景
deny security: "deny" 拒绝所有命令 高安全环境、测试验证
allowlist security: "allowlist" 仅允许白名单命令 生产环境(推荐)
full security: "full" 允许所有命令 隔离沙箱、完全信任

配置示例

json 复制代码
{
  "version": 1,
  "defaults": {
    "security": "allowlist",
    "ask": "on-miss",
    "askFallback": "deny"
  }
}

各级别详解

1. deny(拒绝所有)

json 复制代码
{
  "security": "deny"
}
  • 所有 system.run 请求都被拒绝
  • 适用于:新部署验证、安全审计期间、高风险操作前

2. allowlist(白名单)

json 复制代码
{
  "security": "allowlist",
  "allowlist": [
    {
      "id": "safe-001",
      "pattern": "/usr/bin/git",
      "args": ["status", "log", "diff"],
      "description": "只读 Git 操作"
    },
    {
      "id": "safe-002",
      "pattern": "/opt/homebrew/bin/npm",
      "args": ["test", "run build"],
      "description": "测试和构建"
    }
  ]
}
  • 仅白名单中的命令可执行
  • 支持参数级别的精细控制
  • 适用于:绝大多数生产场景

3. full(完全开放)

json 复制代码
{
  "security": "full"
}
  • 所有命令都可以执行
  • 极度危险,仅限隔离沙箱使用
  • 适用于:本地开发、完全隔离的测试环境

5.1.3 审批模式

当命令不在白名单时,有三种处理模式:

模式 配置 行为 适用场景
off ask: "off" 直接拒绝,不询问 自动化场景、无人值守
on-miss ask: "on-miss" 仅未命中时询问 平衡安全与效率(推荐)
always ask: "always" 每次都询问 高风险操作、学习阶段

审批流程

复制代码
命令请求
   ↓
检查白名单
   ↓
命中 → 执行
   ↓
未命中 → 检查 ask 模式
   ↓
ask=off → 拒绝,记录日志
ask=on-miss → 发送审批请求 → 等待人工响应
ask=always → 发送审批请求 → 等待人工响应
   ↓
人工批准 → 执行,可选加入白名单
人工拒绝 → 拒绝,记录原因

5.1.4 文件绑定机制

问题场景

复制代码
时间线:
T0: Agent 请求执行 "node script.js"
T1: 用户审查 script.js,确认安全,批准
T2: 攻击者篡改 script.js(注入恶意代码)
T3: Agent 执行被篡改的 script.js → 系统被攻破

文件绑定解决方案

复制代码
T0: Agent 请求执行 "node script.js"
T1: Exec Approvals 计算哈希:sha256("script.js") = "abc123..."
T2: 批准时记录:{ command: "node script.js", hash: "abc123..." }
T3: 执行前重新计算哈希
T4: 哈希匹配 → 执行
    哈希不匹配 → 拒绝,告警

配置示例

json 复制代码
{
  "version": 1,
  "defaults": {
    "security": "allowlist",
    "fileBinding": {
      "enabled": true,
      "algorithm": "sha256",
      "maxFileSize": "1MB",
      "extensions": [".js", ".py", ".sh", ".rb"]
    }
  }
}

限制与注意事项

  • 仅适用于单个或少量文件
  • 对于复杂项目(如 npm test 依赖 node_modules),无法完全绑定
  • 建议结合沙箱和容器化使用

5.2 安全配置基线

5.2.1 推荐配置模板

生产环境基线

json 复制代码
// ~/.openclaw/exec-approvals.json
{
  "version": 1,
  "defaults": {
    "security": "allowlist",
    "ask": "on-miss",
    "askFallback": "deny",
    "autoAllowSkills": false,
    "fileBinding": {
      "enabled": true,
      "algorithm": "sha256",
      "maxFileSize": "1MB"
    }
  },
  "agents": {
    "main": {
      "security": "allowlist",
      "ask": "on-miss",
      "allowlist": [
        {
          "id": "read-only-001",
          "pattern": "/usr/bin/cat",
          "args": ["*"],
          "description": "读取文件内容"
        },
        {
          "id": "read-only-002",
          "pattern": "/usr/bin/ls",
          "args": ["-la", "*"],
          "description": "列出目录内容"
        },
        {
          "id": "dev-001",
          "pattern": "/opt/homebrew/bin/git",
          "args": ["status", "log", "diff", "pull"],
          "description": "Git 只读操作"
        },
        {
          "id": "dev-002",
          "pattern": "/opt/homebrew/bin/npm",
          "args": ["test", "run build", "run lint"],
          "description": "开发和测试"
        }
      ]
    }
  },
  "audit": {
    "enabled": true,
    "logPath": "~/.openclaw/logs/exec-audit.jsonl",
    "retention": "90d",
    "includeCommandOutput": true,
    "alertOnDeny": true
  }
}

5.2.2 分级配置策略

按环境分级

环境 security ask 说明
生产 allowlist on-miss 严格白名单,未命中时询问
预发布 allowlist off 白名单内自动执行
开发 allowlist off 更宽松的白名单
沙箱 full off 完全开放,隔离环境

按 Agent 分级

json 复制代码
{
  "agents": {
    "production-bot": {
      "security": "allowlist",
      "ask": "always",
      "allowlist": [
        // 仅限最安全的命令
      ]
    },
    "dev-bot": {
      "security": "allowlist",
      "ask": "on-miss",
      "allowlist": [
        // 包含开发相关命令
      ]
    },
    "sandbox-bot": {
      "security": "full",
      "ask": "off"
      // 完全开放,仅限沙箱
    }
  }
}

5.2.3 白名单最佳实践

1. 使用绝对路径

json 复制代码
// ✅ 推荐
{
  "pattern": "/opt/homebrew/bin/npm"
}

// ❌ 避免
{
  "pattern": "npm"
}

2. 限制参数范围

json 复制代码
// ✅ 推荐:明确允许的参数
{
  "pattern": "/usr/bin/docker",
  "args": ["build", "run", "push"],
  "description": "Docker 构建和推送"
}

// ❌ 避免:允许任意参数
{
  "pattern": "/usr/bin/docker",
  "args": ["*"]
}

3. 添加描述和标签

json 复制代码
{
  "id": "cicd-001",
  "pattern": "/opt/homebrew/bin/npm",
  "args": ["ci", "test", "run build"],
  "description": "CI/CD 构建和测试流程",
  "tags": ["cicd", "npm", "safe"],
  "owner": "devops-team",
  "createdAt": "2026-03-27",
  "reviewedBy": "security-team"
}

4. 定期审查和清理

bash 复制代码
# 查看使用频率
openclaw approvals list --usage

# 删除未使用的条目(90 天未使用)
openclaw approvals cleanup --unused-days 90

# 导出审计报告
openclaw approvals export --format json > approvals-audit.json

5.2.4 环境变量安全

危险环境变量过滤

json 复制代码
{
  "envFilter": {
    "blocked": [
      "AWS_SECRET_ACCESS_KEY",
      "GCP_PRIVATE_KEY",
      "AZURE_CLIENT_SECRET",
      "DATABASE_PASSWORD",
      "API_KEY",
      "PRIVATE_KEY"
    ],
    "allowed": [
      "NODE_ENV",
      "CI",
      "PATH"
    ]
  }
}

推荐做法

  • 使用密钥管理工具(1Password、Vault)
  • 通过环境变量注入,不硬编码
  • 定期轮换密钥
  • 审计密钥访问日志

5.3 沙箱隔离机制

5.3.1 沙箱层级

OpenClaw 支持多层沙箱隔离:

复制代码
┌─────────────────────────────────────────────────────────────┐
│ Level 1: 进程沙箱                                           │
│ - 独立用户权限                                              │
│ - 资源限制(CPU、内存)                                     │
│ - 文件系统隔离                                              │
└─────────────────────────────────────────────────────────────┘
           ↓
┌─────────────────────────────────────────────────────────────┐
│ Level 2: 容器沙箱 (Docker)                                  │
│ - 完整容器隔离                                              │
│ - 网络策略                                                  │
│ - 卷挂载控制                                                │
└─────────────────────────────────────────────────────────────┘
           ↓
┌─────────────────────────────────────────────────────────────┐
│ Level 3: 虚拟机沙箱                                         │
│ - 完全隔离的 OS                                             │
│ - 硬件级隔离                                                │
│ - 快照和回滚                                                │
└─────────────────────────────────────────────────────────────┘

5.3.2 进程沙箱配置

用户权限隔离

bash 复制代码
# 创建专用用户
sudo useradd -r -s /bin/false openclaw-sandbox

# 限制 sudo 权限
sudo visudo
# 添加:
openclaw-sandbox ALL=(ALL) NOPASSWD: /usr/bin/docker, /usr/bin/git

资源限制

bash 复制代码
# /etc/security/limits.conf
openclaw-sandbox  soft  cpu     3600
openclaw-sandbox  hard  cpu     7200
openclaw-sandbox  soft  nofile  1024
openclaw-sandbox  hard  nofile  4096
openclaw-sandbox  soft  memlock 512000
openclaw-sandbox  hard  memlock 512000

5.3.3 Docker 容器沙箱

Docker 配置示例

dockerfile 复制代码
# Dockerfile.sandbox
FROM node:22-alpine

# 创建非 root 用户
RUN addgroup -g 1001 -S openclaw && \
    adduser -u 1001 -S openclaw -G openclaw

# 设置工作目录
WORKDIR /workspace

# 限制权限
USER openclaw

# 只读文件系统
READONLY true

# 资源限制
# docker run --memory="512m" --cpus="1.0"

运行配置

yaml 复制代码
# docker-compose.sandbox.yml
version: '3.8'
services:
  openclaw-sandbox:
    image: openclaw-sandbox:latest
    container_name: openclaw-execution
    user: "1001:1001"
    read_only: true
    tmpfs:
      - /tmp
    cap_drop:
      - ALL
    security_opt:
      - no-new-privileges:true
    networks:
      - sandbox-net
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 512M
        reservations:
          cpus: '0.25'
          memory: 128M

networks:
  sandbox-net:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/24
          gateway: 172.20.0.1

5.3.4 文件系统隔离

挂载策略

json 复制代码
{
  "filesystem": {
    "readOnlyPaths": [
      "/usr",
      "/bin",
      "/opt"
    ],
    "writablePaths": [
      "/workspace/project"
    ],
    "blockedPaths": [
      "/etc/passwd",
      "/etc/shadow",
      "/root",
      "/home"
    ],
    "tmpfsPaths": [
      "/tmp",
      "/var/tmp"
    ]
  }
}

5.4 审计与合规

5.4.1 审计日志格式

日志条目示例

json 复制代码
{
  "timestamp": "2026-03-27T10:30:00.000Z",
  "sessionId": "session-abc123",
  "agentId": "main",
  "nodeId": "node-prod-01",
  "command": {
    "cmd": "npm",
    "args": ["test"],
    "cwd": "/workspace/project",
    "env": {
      "NODE_ENV": "test"
    }
  },
  "approval": {
    "type": "allowlist",
    "ruleId": "dev-002",
    "approvedBy": "system",
    "approvedAt": "2026-03-27T10:29:59.000Z"
  },
  "execution": {
    "status": "success",
    "exitCode": 0,
    "duration": 12345,
    "outputLength": 5678
  },
  "fileBinding": {
    "checked": true,
    "files": [
      {
        "path": "package.json",
        "hash": "sha256:abc123...",
        "matched": true
      }
    ]
  },
  "risk": {
    "score": 0.1,
    "level": "low",
    "factors": ["allowlist_match", "known_command"]
  }
}

5.4.2 实时告警

告警规则配置

yaml 复制代码
# alerting-rules.yaml
rules:
  - name: "高风险命令执行"
    condition: "risk.score > 0.8"
    action: "slack_alert"
    channel: "#security-alerts"
    
  - name: "审批拒绝"
    condition: "approval.status == 'denied'"
    action: "email_alert"
    recipients: ["security@company.com"]
    
  - name: "异常执行频率"
    condition: "execution.count > 100 in 5 minutes"
    action: "pagerduty_alert"
    severity: "warning"
    
  - name: "文件哈希不匹配"
    condition: "fileBinding.matched == false"
    action: "slack_alert + block_session"
    channel: "#security-alerts"

5.4.3 合规报告

自动生成合规报告

bash 复制代码
# 生成月度合规报告
openclaw audit report \
  --from 2026-02-01 \
  --to 2026-02-29 \
  --format pdf \
  --output compliance-report-2026-02.pdf

报告内容

  • 命令执行统计(总数、成功率、平均耗时)
  • 审批统计(自动批准、人工批准、拒绝)
  • 高风险操作清单
  • 异常事件汇总
  • 合规性评分

5.5 应急响应流程

5.5.1 事件分级

级别 定义 响应时间 示例
P0 严重安全事件 <5 分钟 未授权命令执行、数据泄露
P1 高影响事件 <15 分钟 大规模服务中断、配置错误
P2 中等影响事件 <1 小时 单点故障、性能下降
P3 低影响事件 <24 小时 小错误、文档问题

5.5.2 应急响应流程

复制代码
┌─────────────────────────────────────────────────────────────┐
│ P0/P1 事件应急响应流程                                       │
└─────────────────────────────────────────────────────────────┘

1. 检测与告警
   └─> 监控系统检测到异常
   └─> 自动发送告警(Slack + PagerDuty + 邮件)
   └─> 创建事件工单

2. 初步评估(5 分钟内)
   └─> 值班工程师确认事件
   └─> 评估影响范围和严重程度
   └─> 确定事件级别(P0/P1)
   └─> 启动应急响应群

3. 遏制(15 分钟内)
   └─> 隔离受影响的 Node
   └─> 暂停相关 Agent
   └─> 撤销可疑会话
   └─> 保存现场证据

4. 根除(1 小时内)
   └─> 分析根本原因
   └─> 修复安全漏洞
   └─> 更新安全策略
   └─> 验证修复效果

5. 恢复(2 小时内)
   └─> 逐步恢复服务
   └─> 监控关键指标
   └─> 确认服务正常

6. 事后总结(24 小时内)
   └─> 编写事件报告
   └─> 召开复盘会议
   └─> 制定改进措施
   └─> 更新应急预案

5.5.3 紧急禁用机制

一键禁用所有 Node

bash 复制代码
# 禁用所有 Hooks
openclaw hooks disable --all

# 暂停所有 Agent
openclaw agents pause --all

# 撤销所有活跃会话
openclaw sessions revoke --all

紧急联系人

json 复制代码
{
  "emergencyContacts": [
    {
      "name": "安全负责人",
      "role": "security-lead",
      "phone": "+1-xxx-xxx-xxxx",
      "email": "security@company.com",
      "slack": "@security-lead"
    },
    {
      "name": "运维负责人",
      "role": "ops-lead",
      "phone": "+1-xxx-xxx-xxxx",
      "email": "ops@company.com",
      "slack": "@ops-lead"
    }
  ]
}

本章小结

本章详细介绍了 OpenClaw Node 的安全与审批机制:

  1. Exec Approvals 设计哲学:基于"受信任但需验证"理念,采用最小权限、纵深防御、可追溯性、人机协作四大原则。

  2. 安全配置基线:提供了生产环境推荐配置模板,支持按环境和 Agent 分级配置,白名单最佳实践包括绝对路径、参数限制、描述标签、定期审查。

  3. 沙箱隔离机制:三层沙箱(进程、容器、虚拟机),配合文件系统隔离和资源限制,确保即使命令执行失败也不会影响主机安全。

  4. 审计与合规:详细的审计日志格式、实时告警规则、自动合规报告,满足企业审计和合规要求。

  5. 应急响应流程:明确的事件分级、标准化的响应流程、一键禁用机制,确保安全事件能够快速有效处置。

安全配置检查清单

  • 生产环境使用 security: "allowlist"
  • 配置 ask: "on-miss" 平衡安全与效率
  • 启用文件绑定机制
  • 配置审计日志,保留 90 天+
  • 设置实时告警规则
  • 定期审查白名单(每季度)
  • 制定应急响应流程并演练
  • 配置紧急联系人

参考文献

  1. OpenClaw Official Documentation. "Exec Approvals." https://docs.openclaw.ai/tools/exec-approvals/
  2. OpenClaw Official Documentation. "Security Best Practices." https://docs.openclaw.ai/gateway/security/
  3. LinkedIn. "OpenClaw Security Best Practices." https://www.linkedin.com/posts/sunilpaul_openclaw-aisecurity-agenticai-activity-7435129003344269312-2tsx
  4. LumaDock VPS. "OpenClaw Security Best Practices Guide." https://lumadock.com/tutorials/openclaw-security-best-practices-guide
  5. SpaceO. "6 OpenClaw Security Best Practices for Workflow Automation." https://www.spaceo.ai/blog/openclaw-security-best-practices/
  6. GitHub Issue #22176. "Headless node host to execute system.run commands." https://github.com/openclaw/openclaw/issues/22176
相关推荐
SamLai 效率研习社2 小时前
大多数人在省 token,高手在把它当学费花
人工智能
浔川python社2 小时前
《浔川 AI 翻译 v6.2.0 即将上线:修复漏洞,功能全面升级》
人工智能
Dylan~~~2 小时前
深度解析:AI Agent的底层原理
人工智能
每天吃的很好的Ruby2 小时前
报错ValueError: sampler option is mutually exclusive with shuffle
人工智能·pytorch·python
研知有术一站式科研平台2 小时前
研知有术论文辅导丨文献综述的三种类型和写法(附直接能用的写作模板)
人工智能·经验分享·机器学习·数据挖掘·论文笔记
羽翼安全2 小时前
华为机密是如何防止拍照泄密的?公司防止员工拍摄电脑屏幕的深度选型指南
人工智能
空空潍2 小时前
Spring AI 实战系列(四):Prompt工程深度实战
java·人工智能·spring·prompt
高洁012 小时前
【无标题】如何利用知识图谱实现推理和计算
人工智能·机器学习·数据挖掘·transformer·知识图谱
AI袋鼠帝2 小时前
终于找到免费的本地Agent了!量大管饱,真干活~
人工智能·aigc