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
相关推荐
程xu袁2 分钟前
AI写歌词和AI作曲有什么区别?想做完整歌曲,AI音乐工具怎么选?
人工智能
ACME20444 分钟前
破产财产处置新规落地,管理人如何选聘拍卖机构?
人工智能
AI让世界更懂你7 分钟前
计算机专业研究生核心能力培养(6)——论文写作的表达与打磨
人工智能
风之清扬10 分钟前
Agent学习之四-初识Agent CLI
人工智能·科技·学习
零依赖极客17 分钟前
Day 9·1 KV 也量化——q8 KV 把缓存与 decode 带宽压到一半
c语言·开发语言·arm开发·人工智能·缓存·矩阵
陈童学哦17 分钟前
AI术语大全
人工智能
tuanxiang19 分钟前
用去AI味工具调整大模型生成的技术文档,我踩了检测阈值的坑
人工智能
天辛大师22 分钟前
天辛大师谈AI时代的沉思录,All in AI 持续做事与放大效应
大数据·人工智能·随机森林·重构·启发式算法
不要生病了24 分钟前
Brain-JEPA:用功能梯度定位与时空遮蔽预训练 fMRI 基础模型
人工智能·深度学习
艺杯羹29 分钟前
穿透深度慢思考黑盒:DeepSeek-R1 蒸馏模型量化压缩、vLLM 极限吞吐与私网落地实战
人工智能·大模型·部署