安全加固
安全是运行 AI 代理系统时最不能忽视的问题。OpenClaw 提供了多层安全机制,从 DM 访问控制到工具沙箱,帮助你构建安全可靠的部署。本文将系统性地介绍各项安全功能的配置与最佳实践。
openclaw security audit 命令
OpenClaw 提供了内置的安全审计工具,帮助你发现配置中的潜在风险。
运行安全审计
# 执行完整安全审计openclaw security audit # 输出示例# 🔍 OpenClaw Security Audit# ================================# [WARN] DM policy is set to "open" - anyone can DM your bot# [WARN] No tool restrictions configured - all tools are available# [PASS] API keys are stored in environment variables# [PASS] Workspace permissions are correctly set# [WARN] 3 skills have network access without explicit approval# [FAIL] Sensitive data found in openclaw.yaml (API key hardcoded)## Summary: 1 FAIL, 3 WARN, 2 PASS
审计检查项
审计命令会检查以下方面:
- DM 策略:是否设置了访问控制
- API Key 存储:是否有硬编码的凭证
- 工具权限:是否有过于宽泛的工具授权
- 技能安全:已安装技能的权限需求
- 文件权限:配置文件和数据目录的系统权限
- 网络暴露:Gateway 是否暴露在公网
# 只检查特定类别openclaw security audit --category credentialsopenclaw security audit --category permissions # 输出为 JSON 格式(便于自动化)openclaw security audit --format json
DM 策略
DM(私聊)策略控制 谁可以与你的 AI 私聊。这是多用户部署中最重要的安全设置之一。
三种策略模式
# openclaw.yamlsecurity: dm: policy: "pairing" # pairing | allowlist | open
pairing(配对模式)— 推荐
用户需要通过配对流程才能与 AI 对话:
security: dm: policy: "pairing" pairing: # 配对码有效时间(秒) codeExpiry: 300 # 是否需要管理员批准 requireApproval: true
配对流程:
- 用户向 Bot 发送消息
- Bot 回复”请输入配对码”
- 管理员生成配对码并发给用户
- 用户输入配对码完成配对
- 后续对话无需重复配对
# 管理员生成配对码openclaw pairing create --user "alice#1234" # 查看待配对请求openclaw pairing pending # 批准/拒绝配对请求openclaw pairing approve <request-id>openclaw pairing reject <request-id>
allowlist(白名单模式)
只允许列表中的用户与 AI 对话:
security: dm: policy: "allowlist" allowlist: # 按平台+用户ID指定 - platform: "discord" userId: "123456789" - platform: "telegram" userId: "987654321" # 也支持用户名匹配 - platform: "discord" username: "alice#1234"
open(开放模式)
任何人都可以与 AI 对话。仅推荐用于测试或个人使用:
security: dm: policy: "open" # ⚠️ 警告:任何人都可以与你的 Bot 对话 # 这可能导致 API 费用失控
硬化基线配置示例
以下是一个面向生产环境的安全硬化配置:
# openclaw.yaml — 安全硬化基线配置 security: # DM 访问控制 dm: policy: "pairing" pairing: requireApproval: true codeExpiry: 300 # 速率限制 rateLimit: # 每用户每分钟最大消息数 messagesPerMinute: 20 # 每用户每天最大消息数 messagesPerDay: 500 # 超限后的行为 onExceeded: "reject" # reject | queue | warn # 工具安全tools: profile: "restricted" deny: - "exec" # 禁止执行系统命令 - "file_delete" # 禁止删除文件 - "network_raw" # 禁止原始网络访问 # 模型限制(控制成本)agents: defaults: models: primary: "anthropic/claude-sonnet-4-20250514" denied: - "anthropic/claude-opus-4-20250514" - "openai/o3" # 会话安全 dmScope: "per-peer" session: idleResetMinutes: 60 dailyResetHour: 4
工具策略(tools.profile, allow/deny)
工具策略控制 AI 可以使用哪些工具,是防止 AI 执行危险操作的关键机制。
tools.profile 预设
tools: # 预设安全配置文件 profile: "default" # default | restricted | minimal | custom
各预设的能力范围:
- default:允许大部分工具,禁止高危操作(如系统命令执行)
- restricted:只允许读取类操作和安全的写入操作
- minimal:只允许最基本的对话工具,几乎不使用外部工具
- custom:完全自定义 allow/deny 列表
allow/deny 列表
tools: profile: "custom" # 允许使用的工具(白名单) allow: - "read" # 读取文件 - "web_search" # 搜索网页 - "web_fetch" # 获取网页内容 - "memory_search" # 搜索记忆 - "memory_get" # 获取记忆 - "send_email" # 发送邮件 # 明确禁止的工具(黑名单,优先级高于 allow) deny: - "exec" # 执行系统命令 - "write" # 写入文件(如果不需要) - "file_delete" # 删除文件 - "browser" # 浏览器控制
策略优先级
deny 列表 > allow 列表 > profile 预设
即使工具在 allow 中出现,如果它也在 deny 中,则 始终被禁止。
针对不同场景的工具策略
# 场景一:只读助手(信息查询类)tools: profile: "custom" allow: - "read" - "web_search" - "web_fetch" - "memory_search" deny: - "write" - "edit" - "exec" # 场景二:开发助手(需要文件操作)tools: profile: "default" deny: - "exec" # 仍然禁止系统命令 - "browser" # 不需要浏览器 # 场景三:全能助手(信任用户)tools: profile: "default" # 不额外限制
沙箱简介
OpenClaw 支持在 沙箱环境 中运行工具,为工具执行提供额外的隔离层。
沙箱的作用
AI 请求执行工具 ↓OpenClaw 工具路由 ↓ 沙箱启用在隔离环境中执行 - 独立文件系统 - 网络访问受限 - 无法访问宿主敏感文件 ↓返回结果给 AI
沙箱配置
# openclaw.yamlsandbox: enabled: true # 沙箱类型 type: "container" # container | nsjail | bubblewrap # 允许沙箱访问的目录 mounts: - source: "~/.openclaw/workspace" target: "/workspace" readOnly: false - source: "~/.openclaw/skills" target: "/skills" readOnly: true # 网络限制 network: enabled: true # 允许的外部域名 allowedDomains: - "api.openai.com" - "api.anthropic.com" - "*.googleapis.com" # 资源限制 resources: maxMemory: "512m" maxCpu: "1.0" maxDisk: "1g" timeout: 30 # 秒
何时使用沙箱
- 运行不可信代码:用户要求 AI 执行任意代码时
- 测试第三方技能:首次使用新技能时
- 多租户环境:多个用户共享同一个 OpenClaw 实例时
- 合规要求:企业环境中需要工具执行隔离
凭证存储位置
了解 OpenClaw 在哪里存储敏感信息,有助于你正确保护它们。
凭证存储路径
~/.openclaw/├── .env # 环境变量(API Keys 等)├── openclaw.yaml # 主配置文件(不应包含明文凭证)├── auth/│ ├── oauth-tokens.json # OAuth 令牌│ └── pairing-codes.json # 配对码├── sessions/│ └── *.json # 会话数据(可能包含对话内容)└── credentials/ └── *.enc # 加密存储的凭证
保护建议
# 确保配置目录权限正确chmod 700 ~/.openclawchmod 600 ~/.openclaw/.envchmod 600 ~/.openclaw/auth/* # 检查是否有明文凭证泄露grep -r "sk-" ~/.openclaw/openclaw.yamlgrep -r "password" ~/.openclaw/openclaw.yaml # 确保 .env 不被 Git 追踪echo ".env" >> ~/.openclaw/.gitignore
凭证轮换
# 定期轮换 API Key# 1. 在提供商控制台生成新 Key# 2. 更新 .env 文件# 3. 重启 Gateway 使其生效openclaw gateway restart
安全检查清单
部署 OpenClaw 到生产环境前,请逐项检查以下清单:
访问控制
- DM 策略已设置为
pairing或allowlist(非open) - 配对/白名单已正确配置
- 速率限制已启用
- 会话隔离级别
dmScope已设置为per-peer或更细
工具与技能
- 已配置工具策略(
tools.profile或 allow/deny) - 危险工具已被禁用(exec, file_delete 等)
- 已审查所有已安装的第三方技能
- 不需要的技能已被禁用
凭证管理
- 所有 API Key 存储在环境变量或
.env文件中 -
openclaw.yaml中没有硬编码凭证 -
.env文件权限设为 600 - OAuth 令牌文件权限正确
-
.env已添加到.gitignore
网络安全
- Gateway 不直接暴露在公网(或有防火墙规则)
- 如使用沙箱,网络白名单已配置
- HTTPS/TLS 已启用(如果 Gateway 对外服务)
监控与审计
- 定期运行
openclaw security audit - 日志记录已启用
- 异常行为告警已配置
- 定期审查对话日志中的异常模式
成本控制
- 模型白名单已配置(防止使用昂贵模型)
- 速率限制防止 API 费用爆发
- 设置了每日/每月费用告警
# 一键执行安全审计openclaw security audit # 查看详细报告openclaw security audit --verbose # 修复已知问题后重新审计openclaw security audit --fix # 自动修复安全配置
安全没有终点,只有持续改进。建议每次更新 OpenClaw 或添加新技能后,都重新运行安全审计,确保你的部署始终处于安全状态。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...



