🛡️ 沙箱策略控制

沙箱策略控制(Sandbox Policy Control)是AI Agent安全执行的核心机制,通过精细化的权限控制确保工具在受控环境中运行。

📖 定义

沙箱策略是一组规则,定义了AI Agent在执行过程中可以做什么、不可以做什么:

⚙️ 核心原理

1. 策略模型

沙箱策略 = 默认拒绝 + 白名单放行

策略组成:
├── 全局策略 (Global)
│   └── 适用于所有工具
├── 工具策略 (Tool-specific)
│   └── 特定工具的权限
└── 任务策略 (Task-specific)
    └── 特定任务的权限

优先级: 任务策略 > 工具策略 > 全局策略

2. 策略配置语法

# ~/.openclaw/sandbox.yaml
sandbox:
  # 默认策略: deny-all | allow-all
  default: deny-all
  
  # 文件系统策略
  filesystem:
    read:
      allow:
        - /home/user/**
        - /tmp/**
        - /app/**
      deny:
        - ~/.ssh/**
        - ~/.aws/**
        - /etc/passwd
    
    write:
      allow:
        - /tmp/**
        - /home/user/output/**
      deny:
        - /home/user/.bashrc
  
  # 网络策略
  network:
    allow:
      - "api.openai.com"
      - "github.com"
      - "*.googleapis.com"
    deny:
      - "10.0.0.0/8"      # 内网
      - "192.168.0.0/16"   # 内网
  
  # 资源限制
  resources:
    max_memory: 512MB
    max_cpu_percent: 80
    max_disk_mb: 1024
    max_processes: 10
    max_open_files: 100

3. 策略执行流程

工具调用请求
      ↓
检查任务策略 → 有特殊规则? → 应用
      ↓ (无)
检查工具策略 → 有特殊规则? → 应用
      ↓ (无)
应用全局策略
      ↓
策略决策:
├── ALLOW → 执行工具
├── DENY → 返回权限错误
└── PROMPT → 询问用户确认

🔧 OpenClaw实战应用

场景1: 安全的文件操作

# 只允许读取项目目录
sandbox:
  filesystem:
    read:
      allow: ["/home/user/projects/**"]
    write:
      allow: ["/home/user/projects/output/**"]
      deny: ["/home/user/projects/.env"]

# 测试
$ openclaw read /home/user/projects/README.md  # ✅ 允许
$ openclaw read /etc/passwd                     # ❌ 拒绝
$ openclaw write /home/user/projects/.env "..." # ❌ 拒绝

场景2: 受控的网络访问

# 只允许访问特定API
sandbox:
  network:
    allow:
      - "api.openai.com"
      - "api.anthropic.com"
    deny:
      - "*"  # 拒绝其他所有

# 工具执行
$ openclaw web_fetch "https://api.openai.com/v1/..."  # ✅ 允许
$ openclaw web_fetch "https://evil.com/steal-data"     # ❌ 拒绝

场景3: MCP服务器沙箱

# MCP服务器独立沙箱
mcp:
  servers:
    - name: "database"
      sandbox:
        filesystem:
          read: []  # 禁止文件读取
          write: [] # 禁止文件写入
        network:
          allow: ["db.internal.com"]
        resources:
          max_memory: 256MB
          timeout: 30s

场景4: 临时提升权限

# 用户确认后临时提升权限
$ openclaw exec "deploy.sh" --sandbox-override

# 系统提示:
# ⚠️ 此操作需要额外权限:
# - 写入 /var/www/ 
# - 访问 api.production.com
# 
# 确认临时提升权限? [y/N]

# 会话结束自动恢复原策略

📊 策略模式对比

模式 安全性 灵活性 适用场景
deny-all 🟢 最高 🔴 最低 生产环境
allow-list 🟢 高 🟡 中 推荐默认
deny-list 🟡 中 🟢 高 开发环境
allow-all 🔴 最低 🟢 最高 仅限测试

💡 最佳实践

✅ 推荐做法:
⚠️ 常见陷阱:

🔗 相关概念

📅 最后更新: 2026-06-13 | 🏷️ 标签: 沙箱 安全策略 权限控制 v2026.6.6