学习进度 · 登录后可记录
手把手教你保护你的 OpenClaw,防止被黑客攻击
一个真实的故事
小明在云服务器上部署了 OpenClaw,用了觉得很方便。但有一天,他发现:
后来才发现,他安装的某个 Skill 有恶意代码,黑客通过这个 Skill 控制了他的 OpenClaw,用他的 API Key 跑模型,还窃取了他的聊天记录。
这个故事告诉我们:OpenClaw 默认安装是不够安全的,必须做加固。
学完本文后,你将能够:
✅ 理解 OpenClaw 的安全模型
✅ 配置 Gateway 鉴权,防止未授权访问
✅ 设置工具权限,限制 Agent 的能力
✅ 配置 Docker 沙箱,隔离潜在威胁
✅ 管理密钥,避免泄露
✅ 运行安全审计,检查配置
OpenClaw 的安全模型可以简化为:
[你] ← 可信操作者
|
↓
[Gateway] ← 唯一入口,像小区大门
|
↓
[Agent] ← 执行任务的"员工" 
如果你只想做一件事,就做这一步。这是投入产出比最高的操作。
在终端中输入:
ls ~/.openclaw/你会看到:
openclaw.json # 主配置文件
secrets.json # 密钥文件(可能不存在)
agents/ # Agent 配置目录 如果 openclaw.json 不存在,创建一个:
touch ~/.openclaw/openclaw.json用 nano(最简单)打开:
nano ~/.openclaw/openclaw.json复制以下内容,粘贴进去:
{
"gateway": {
"mode": "local",
"bind": "loopback",
"auth": {
"mode": "token",
"token": "请替换为你的随机token"
}
},
"session": {
"dmScope": "per-channel-peer"
},
"tools": {
"profile": "messaging",
"deny": [
"group:automation",
"group:runtime",
"group:fs",
"sessions_spawn",
"sessions_send"
],
"fs": {
"workspaceOnly": true
},
"exec": {
"security": "deny",
"ask": "always"
},
"elevated": {
"enabled": false
}
},
"channels": {
"whatsapp": {
"dmPolicy": "pairing",
"groups": {
"*": {
"requireMention": true
}
}
}
}
}按 Ctrl + X,然后按 Y,再按 Enter 保存。
在终端运行:
openclaw doctor --generate-gateway-token你会看到输出:
✅ Generated gateway token: a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6复制这个 token,替换配置文件中的 "请替换为你的随机token"。
再次编辑配置文件:
nano ~/.openclaw/openclaw.json找到这一行:
"token": "请替换为你的随机token"替换为:
"token": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6"保存并退出(Ctrl+X → Y → Enter)。
配置更改后需要重启才能生效:
# 如果是 systemd 服务
sudo systemctl restart openclaw
# 如果是直接运行
pkill openclaw
openclaw &检查是否运行成功:
ps aux | grep openclaw上面的快速配置已经能提供基本保护,但如果你想更安全,需要理解每个配置项。
本地部署(在家用电脑):
"gateway": {
"mode": "local",
"bind": "loopback"
}mode: "local":只允许本机访问bind: "loopback":绑定到 127.0.0.1(本地回环)云端部署(云服务器):
"gateway": {
"mode": "gateway",
"bind": "0.0.0.0"
}mode: "gateway":允许外部访问bind: "0.0.0.0":监听所有网络接口⚠️ 重要:云端部署必须设置 auth.token,否则任何人都能控制你的 OpenClaw!
"auth": {
"mode": "token",
"token": "你的随机token"
}三种模式:
token:请求需携带 token(推荐)password:使用密码(已弃用)none:无鉴权(危险!)Agent 通过"工具"与外部交互。我们需要限制它能做什么。
"tools": {
"profile": "messaging"
}可选值:
minimal:最小权限,只有最基本的工具messaging:消息相关(推荐)default:默认配置full:全部工具(危险!)建议:从 messaging 开始,需要时再添加具体工具。
"deny": [
"group:automation",
"group:runtime",
"group:fs",
"sessions_spawn",
"sessions_send"
]这些工具组为什么危险?
group:automation:自动化操作,可能被用来循环执行恶意代码group:runtime:运行时操作,可以启动/停止 Agentgroup:fs:文件系统操作,可以读写任意文件"fs": {
"workspaceOnly": true
}作用:限制文件访问只在你的工作区目录。Agent 无法读取 /etc/passwd、~/.ssh/id_rsa 等敏感文件!
"exec": {
"security": "deny",
"ask": "always"
}security 选项:
deny:禁止执行命令(最安全)ask:执行前需确认allow:允许执行(危险!)即使工具权限设置好了,恶意代码仍可能逃逸。Docker 沙箱提供第二层保护:
"agents": {
"defaults": {
"sandbox": {
"mode": "all",
"docker": {
"image": "openclaw-sandbox:bookworm-slim",
"readOnlyRoot": true,
"network": "none",
"user": "1000:1000",
"capDrop": ["ALL"]
}
}
}
}关键配置:
network: "none":禁止容器访问网络,防止数据外泄readOnlyRoot: true:防止篡改文件系统capDrop: ["ALL"]:移除所有 Linux 能力,防止提权{
"secrets": {
"providers": {
"default": {
"source": "env"
}
}
},
"models": {
"providers": {
"openai": {
"apiKey": {
"source": "env",
"provider": "default",
"id": "OPENAI_API_KEY"
}
}
}
}
}这段配置的意思是:从环境变量 OPENAI_API_KEY 读取 API Key,配置文件中不存储实际的 key。
永久设置:
echo 'export OPENAI_API_KEY="sk-你的key"' >> ~/.bashrc
source ~/.bashrc运行:
openclaw secrets audit --check如果输出 ✅ No plaintext secrets found,说明配置正确。
{
"channels": {
"whatsapp": {
"dmPolicy": "pairing",
"groups": {
"*": {
"requireMention": true
}
}
}
}
}dmPolicy: "pairing":需要配对确认(推荐)requireMention: true:在群组中,必须 @ 提及你的 OpenClaw 才会响应。{
"logging": {
"redactSensitive": "tools",
"redactPatterns": ["api_key=.*", "secret=.*"]
}
}自动遮盖工具调用中的敏感字段,如 API Key、密码等。
{
"browser": {
"ssrfPolicy": {
"dangerouslyAllowPrivateNetwork": false
}
}
}禁止访问私有网络地址(127.0.0.1、192.168.x.x 等),防止 SSRF 攻击。
# 限制 ~/.openclaw 目录只有你能访问
chmod 700 ~/.openclaw
# 主配置文件只有你能读写
chmod 600 ~/.openclaw/openclaw.json数字含义:
7 = rwx(读、写、执行)6 = rw-(读、写)0 = ---(无权限)# 基础审计
openclaw security audit
# 深度审计
openclaw security audit --deep不带 token 测试:
curl http://localhost:18789/health应该返回 401 Unauthorized。
带 token 测试:
curl -H "Authorization: Bearer 你的token" http://localhost:18789/health应该返回 200 OK。
Q1:重启后配置不生效?
原因:配置文件格式错误。
解决:
python3 -m json.tool ~/.openclaw/openclaw.jsonQ2:openclaw: command not found
原因:OpenClaw 不在 PATH 中。
解决:
export PATH="$HOME/.npm-global/bin:$PATH"Q3:Docker 沙箱不工作?
原因:Docker 未安装或用户无权限。
检查:
docker psQ4:配置后 OpenClaw 无法启动?
解决:
# 检查配置文件语法
openclaw config validateQ5:如何恢复默认配置?
# 备份当前配置
cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.backup
# 删除配置
rm ~/.openclaw/openclaw.json本地开发环境(最安全):
{
"gateway": {
"mode": "local",
"bind": "loopback",
"auth": {
"mode": "token",
"token": "请用 openclaw doctor --generate-gateway-token 生成"
}
},
"session": { "dmScope": "per-channel-peer" },
"tools": {
"profile": "messaging",
"deny": [
"group:automation",
"group:runtime",
"group:fs",
"sessions_spawn",
"sessions_send"
],
"fs": { "workspaceOnly": true },
"exec": { "security": "deny", "ask": "always" },
"elevated": { "enabled": false }
},
"channels": {
"whatsapp": {
"dmPolicy": "pairing",
"groups": { "*": { "requireMention": true } }
}
},
"agents": {
"defaults": {
"sandbox": {
"mode": "all",
"docker": {
"image": "openclaw-sandbox:bookworm-slim",
"readOnlyRoot": true,
"network": "none",
"user": "1000:1000",
"capDrop": ["ALL"]
}
}
}
},
"secrets": {
"providers": { "default": { "source": "env" } }
},
"logging": {
"redactSensitive": "tools"
},
"browser": {
"ssrfPolicy": { "dangerouslyAllowPrivateNetwork": false }
}
}~/.openclaw/openclaw.jsonopenclaw doctor --generate-gateway-token 生成 tokencurl 测试)chmod 600 ~/.openclaw/openclaw.jsonopenclaw secrets audit --check 检查密钥openclaw security audit --deep| 层次 | 配置项 | 重要性 |
|---|---|---|
| 第一层 | Gateway 鉴权 | ⭐⭐⭐⭐⭐ |
| 第二层 | 工具权限控制 | ⭐⭐⭐⭐⭐ |
| 第三层 | Docker 沙箱 | ⭐⭐⭐⭐ |
| 第四层 | 密钥管理 | ⭐⭐⭐⭐ |
| 第五层 | 消息策略 | ⭐⭐⭐ |
deny 列表优先于 allow登录后即可查看完整教程内容、运行代码和参
与学习互动
还没有账号?