词元广场TOKPUB.COM - 欢迎您,支持一个 Key 调用近 600+ 海内外模型,限时特价模型低至 1 折,欢迎上岸!
课程信息 本篇你将学会: 保护你的 AI 助手不被未授权访问、配置沙箱隔离、管理用户权限 谁需要看这篇? 如果你只是在自己电脑上用、不对外暴露,默认安全配置已经够了。如果你要把 OpenClaw 暴露到公网、或者给多人使用,这篇必看 小白速通: 只看"DM Pairing 配对系统"和"最小安全清单"两节就够了
rm -rf /)⏭️ 小白可跳过 — 这部分面向安全专家和企业用户
┌─────────────────────────────────────────────┐
│ 第 1 层:网络边界安全 │
│ TLS 1.3 / 防火墙 / IP 白名单 │
├─────────────────────────────────────────────┤
│ 第 2 层:认证与授权 │
│ Gateway Token / 配对系统 / 用户权限 │
├─────────────────────────────────────────────┤
│ 第 3 层:输入验证与过滤 │
│ 提示词护栏 / 消息过滤 / 长度限制 │
├─────────────────────────────────────────────┤
│ 第 4 层:执行隔离 │
│ Docker 沙箱 / 文件系统隔离 / 资源限制 │
├─────────────────────────────────────────────┤
│ 第 5 层:审计与监控 │
│ 操作日志 / 异常检测 / 告警通知 │
└─────────────────────────────────────────────┘用户消息 → [消息平台] → [Webhook 验证] → [Gateway Token 认证]
↓
[配对系统检查]
↓
[提示词护栏过滤]
↓
[Agent 权限检查]
↓
[沙箱内执行工具]
↓
[审计日志记录]
↓
返回结果给用户~/.openclaw/.env 文件。rm -rf / 或者读取 /etc/passwd。没有沙箱的话,这些命令会直接在你的机器上执行。mode 字段控制沙箱行为,而非简单的 enabled 开关。最常用的模式是 "non-main",表示非主会话在 Docker 沙箱中运行,主会话保持正常执行:// ~/.openclaw/openclaw.json
{
"agents": {
"defaults": {
"sandbox": {
// "non-main" — 非主会话在 Docker 沙箱中运行(推荐)
// "all" — 所有会话都在沙箱中运行
// "off" — 禁用沙箱(不推荐用于生产)
"mode": "non-main",
}
}
}
}mode 值 | 说明 | 适用场景 |
|---|---|---|
"non-main" | 非主会话在 Docker 沙箱中运行 | 生产环境推荐默认值 |
"all" | 所有会话都在沙箱中运行 | 高安全要求场景 |
"off" | 禁用沙箱 | 仅限开发/调试 |
tools.allow/tools.deny 控制(注意:不是 toolAllowlist/toolDenylist):// ~/.openclaw/openclaw.json
{
"agents": {
"defaults": {
"sandbox": {
"mode": "non-main",
"tools": {
// 沙箱内允许使用的工具
"allow": [
"bash", "process", "read", "write", "edit",
"sessions_list", "sessions_history",
"sessions_send", "sessions_spawn"
],
// 沙箱内禁止使用的工具
"deny": [
"browser", "canvas", "nodes",
"cron", "discord", "gateway"
]
}
}
}
}
}// ~/.openclaw/openclaw.json
{
"agents": {
"defaults": {
"sandbox": {
"mode": "non-main",
}
},
"list": [
// coder Agent 始终在沙箱中运行(更严格)
{
"id": "coder",
"workspace": "~/.openclaw/workspace-coder",
"sandbox": {
"mode": "all",
"tools": {
"allow": ["bash", "read", "write", "edit"]
}
}
},
// researcher Agent 允许更多工具
{
"id": "researcher",
"workspace": "~/.openclaw/workspace-researcher",
"sandbox": {
"mode": "non-main",
"tools": {
"allow": [
"bash", "read", "write", "edit", "browser"
]
}
}
},
// assistant Agent 最小权限
{
"id": "assistant",
"workspace": "~/.openclaw/workspace-assistant",
"sandbox": {
"mode": "all",
"tools": {
"allow": ["read", "sessions_list", "sessions_history"],
"deny": ["bash", "process", "browser", "gateway"]
}
}
}
]
}
}sandbox.docker 下配置):// ~/.openclaw/openclaw.json — Docker 沙箱安全加固
{
"agents": {
"defaults": {
"sandbox": {
"mode": "non-main",
"docker": {
// 移除所有 Linux capabilities(真实字段)
"capDrop": ["ALL"],
// 根文件系统只读(注意:字段名是 readOnlyRoot,不是 readOnlyRootfs)
"readOnlyRoot": true,
// tmpfs 挂载路径数组(用于只读根文件系统时提供可写临时目录)
"tmpfs": ["/tmp", "/run"]
}
}
}
}
}capDrop: ["ALL"] — 移除所有 Linux capabilities,最小权限原则readOnlyRoot: true — 根文件系统只读,防止恶意写入tmpfs — 挂载临时文件系统的路径列表,容器销毁后数据消失注意: securityOpt、noSetuid等字段在 OpenClaw 配置中不存在。如需额外的 Docker 安全选项,应在docker-compose.yml或 Docker 运行命令中直接配置。
OPENCLAW_DISABLE_DOCKER=1 环境变量 禁用 Docker 沙箱。但请注意,禁用沙箱后 Agent 将直接在宿主机上执行工具调用,安全风险显著增加。// ~/.openclaw/openclaw.json
{
"gateway": {
"auth": {
// "password" — 密码认证模式
// "token" — Token 认证模 式
"mode": "password",
}
}
}~/.openclaw/credentials 文件中。确保该文件权限正确:password123、admin)gateway.bind 必须是 loopback 地址(127.0.0.1),除非通过 Tailscale(零配置 VPN 工具,让你安全地远程访问)等安全隧道暴露"pairing":当未知发送者发来消息时,Agent 会回复一个配对码,你需要手动批准。// ~/.openclaw/openclaw.json
{
"channels": {
// "pairing" — 未知发送者收到配对码,需手动批准(默认,推荐)
// "open" — 允许所有人发消息(需配合 allowFrom 使用)
"dmPolicy": "pairing",
}
}// ~/.openclaw/openclaw.json — 公开模式(不推荐用于生产)
{
"channels": {
"dmPolicy": "open",
// "*" 表示允许所有人
"allowFrom": ["*"],
}
}强烈建议:保持默认的 "pairing"策略。公开模式意味着任何人都能控制你的 Agent,仅在受信任的封闭环境中使用。
openclaw doctor 检查配对系统和其他安全配置是否正确:openclaw doctor 会检查:pairing,未知发送者需要输入配对码,操作者审批后才能对话channels 中配置允许的发送者列表// ~/.openclaw/openclaw.json — 通过 channels 控制谁能访问
{
channels: {
whatsapp: {
dmPolicy: "pairing", // 默认:配对码审批
allowFrom: ["+15555550123"],
},
telegram: {
dmPolicy: "pairing", // 配对码审批
allowFrom: ["123456789"], // 允许的用户白名单
},
}
}如果需要多用户隔离,应该为每个信任边界部署独立的 Gateway 实例(独立的 OS 用户/主机),而不是在一个 Gateway 上做角色分级。
sandbox(沙箱)和审批系统实现,而不是通过 tools.permissions 字段。tools 顶层字段用于配置工具本身的参数(如 tools.web.search.apiKey),不包含权限控制结构。// ~/.openclaw/openclaw.json
{
agents: {
defaults: {
sandbox: {
mode: "non-main", // 非主 Agent 在沙箱中运行
// 可选值:"off"(关闭)| "non-main"(非主 Agent)| "all"(所有 Agent)
},
},
},
}// ~/.openclaw/openclaw.json
{
agents: {
defaults: {
sandbox: {
mode: "all", // 所有 Agent 都在沙箱中运行
},
},
},
}// ~/.openclaw/openclaw.json
{
"gateway": {
"tls": {
"enabled": true,
"minVersion": "1.3",
"certPath": "/path/to/cert.pem",
"keyPath": "/path/to/key.pem",
},
}
}自签名证书仅用于开发环境。生产环境请使用 Let's Encrypt 或其他 CA 签发的证书。
127.0.0.1(仅本地访问)。gateway.bind 必须是 loopback 地址,除非你明确知道自己在做什么。// ~/.openclaw/openclaw.json
{
"gateway": {
// 必须是 loopback 地址
"bind": "127.0.0.1",
"port": 18789,
}
}Tailscale Serve/Funnel 的优势:Gateway 仍然绑定 127.0.0.1,Tailscale 在网络层处理加密和认证,无需手动配置 TLS 证书。Funnel 模式会自动提供公网 HTTPS 端点。
gateway.security.ipWhitelist 配置。IP 访问控制通过以下方式实现:127.0.0.1(仅本地访问)。如果需要远程访问,通过防火墙规则控制允许的 IP:// ~/.openclaw/openclaw.json
{
gateway: {
bind: "127.0.0.1", // 仅允许本地访问(最安全)
// bind: "0.0.0.0", // 如需远程访问,配合防火墙使用
port: 18789,
},
}trustedProxies 确保 OpenClaw 能正确获取客户端 IP:// ~/.openclaw/openclaw.json
{
gateway: {
trustedProxies: ["127.0.0.1", "::1"], // 信任的代理 IP(仅用于 IP 检测场景)
},
}注意区分: 上面的 trustedProxies用于 IP 检测场景(告诉 Gateway 信任代理传来的X-Forwarded-For)。如果你使用 trusted-proxy 认证模式(gateway.auth.mode: "trusted-proxy"),则trustedProxies不能填 loopback 地址。详见本文后面的"反向代理 Forwarded Headers 安全模型"章节。
config.apply、config.patch、update.run)上内置了速率限制(每 60 秒 3 次),但这是运行时内置行为,不通过配置文件控制。127.0.0.1 / ::1)到达 Gateway,但携带了 X-Forwarded-For / X-Forwarded-Host / X-Forwarded-Proto 头指向非本地来源,Gateway 会认定该请求来自远程,不再享有 loopback 本地信任。这防止了 same-host loopback 代理"洗白"转发头身份到 trusted-proxy 认证路径的攻击。// ~/.openclaw/openclaw.json
{
"gateway": {
// 信任的代理 IP(不能是 loopback 地址)
"trustedProxies": ["10.0.0.1"],
"auth": {
"mode": "trusted-proxy",
"trustedProxy": {
"userHeader": "x-forwarded-user", // 必填:包含用户身份的头
"requiredHeaders": [], // 可选:额外验证头
"allowUsers": [] // 可选:用户白名单(空=允许所有)
}
}
}
}trustedProxies 只填具体 IP,不要填子网gateway.auth.token 和 trusted-proxy 模式(Gateway 会拒绝启动)/allowlist 命令需要 Owner 授权: /allowlist add 和 /allowlist remove 操作现在要求实际的 Owner 身份验证,不再接受宽松的回退(permissive fallback)。这意味着只有经过身份验证的 Gateway 所有者才能修改工具白名单。gateway 工具 -- 查看/修改持久化配置,拒绝重写执行审批设置cron 工具 -- 创建超出当前会话范围的持久化定时任务// ~/.openclaw/openclaw.json
{
"agents": {
"list": [
{
"id": "public-facing",
"sandbox": {
"tools": {
"deny": ["gateway", "cron", "sessions_spawn", "sessions_send"]
}
}
}
]
}
}config.*、exec.approvals.*、wizard.*、update.*)始终保持 operator.admin 权限级别,即使插件尝试指定更窄的作用域也会被忽略传统云端 AI 助手:
你的消息 → 云端服务器(第三方存储) → AI 处理 → 返回结果
↑ 你的数据在别人的服务器上
OpenClaw:
你的消息 → 你的服务器(本地存储) → AI API 处理 → 返回结果
↑ 你的数据始终在你自己的设备上注意:虽然 OpenClaw 本身不存储数据到云端,但调用 AI API 时,你的消息内容会发送到 AI 提供商(OpenAI、Anthropic 等)。如果对此有顾虑,可以使用本地模型(如 Ollama)。
storage.encryption 配置字段。静态数据加密应通过操作系统级别的磁盘加密实现:| 操作系统 | 加密方案 |
|---|---|
| macOS | FileVault(系统偏好设置 → 安全性与隐私) |
| Linux | LUKS(cryptsetup) |
| Windows | BitLocker |
sessions/*.jsonl)MEMORY.md、memory/*.md)USER.md)openclaw.json)