OpenClaw 这类 AI Agent 工具部署到 VPS 上,如果只图跑起来就完事,API Key 和 Webhook 端点基本等于裸奔。主机选之前遇到好几个用户因为权限没隔离、Webhook 没验证签名,导致 API Key 被扫、Agent 被第三方调用。本文直接给三块加固方案:权限隔离、Webhook 安全、防止 API Key 泄露,每步都有命令和配置示例。

权限隔离:别用 root 跑 OpenClaw
很多教程直接让你 `sudo pip install openclaw` 然后 root 启动,这是最大的安全隐患。AI Agent 一旦被利用,攻击者直接拿到服务器最高权限。
创建专用系统用户
sudo useradd -r -s /usr/sbin/nologin openclaw
sudo chown -R openclaw:openclaw /opt/openclaw
用 systemd 管理服务,以非 root 身份运行
创建 `/etc/systemd/system/openclaw.service`:
ini
[Unit]
Description=OpenClaw AI Agent
After=network.target
[Service]
User=openclaw
Group=openclaw
WorkingDirectory=/opt/openclaw
ExecStart=/usr/bin/python3 /opt/openclaw/main.py
Restart=on-failure
RestartSec=10
MemoryMax=512M
CPUQuota=80%
[Install]
WantedBy=multi-user.target
然后执行:
sudo systemctl daemon-reload
sudo systemctl enable openclaw
sudo systemctl start openclaw
检查是否以 openclaw 用户运行:
ps aux | grep openclaw
目录权限收紧
配置文件、日志目录只给 openclaw 用户读写,其他人不可读:
sudo chmod 750 /opt/openclaw/config
sudo chmod 640 /opt/openclaw/config/*.env
Webhook 安全:别让任何人都能触发你的 Agent
OpenClaw 通常通过 Webhook 接收外部请求(比如来自 Claude Code、n8n 的调用)。如果 Webhook 端口直接裸露公网没任何验证,等于开了一个后门。
使用签名验证
在 OpenClaw 配置中开启 Webhook 签名。一般支持 HMAC-SHA256,你需要设置一个 Secret:
yaml
webhook:
enabled: true
port: 8080
secret: “你的随机字符串,至少32位”
verify_signature: true
如果 OpenClaw 不支持内置验证,可以在前面加一层 Nginx 反向代理,用 ngx_http_auth_request_module 做自定义验证,或者用 OpenResty 的 Lua 脚本校验签名。
只允许信任来源
Nginx 层做 IP 白名单(如果调用方 IP 固定),或者使用 JWT 令牌:
nginx
location /webhook {
allow 192.168.1.100;
deny all;
proxy_pass http://127.0.0.1:8080;
}
如果调用方是公网服务(如 GitHub Webhook),必须用签名验证,IP 白名单做辅助。
限制请求频率
防止暴力调用或 DDoS:
nginx
limit_req_zone $binary_remote_addr zone=webhook:10m rate=10r/s;
location /webhook {
limit_req zone=webhook burst=20 nodelay;
proxy_pass http://127.0.0.1:8080;
}
强制 HTTPS
用 Certbot 申请证书,Nginx 配置 443 端口并重定向 HTTP:
nginx
server {
listen 443 ssl;
server_name your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
}
防止 API Key 泄露:从环境变量到日志清理
OpenClaw 需要调用 OpenAI、Claude 等 API,API Key 一旦泄露,账单炸裂。
绝不硬编码,使用环境变量
在 `.env` 文件中写 Key,然后设置权限:
echo “OPENAI_API_KEY=sk-xxxx” >> /opt/openclaw/.env
echo “CLAUDE_API_KEY=sk-ant-xxxx” >> /opt/openclaw/.env
sudo chown openclaw:openclaw /opt/openclaw/.env
sudo chmod 600 /opt/openclaw/.env
在 OpenClaw 的启动脚本中加载 `.env`,或用 `python-dotenv` 读取。
检查日志是否打印 Key
很多 Agent 在 debug 模式下会打印请求头或 payload,里面可能包含 API Key。用 grep 检查:
grep -r “sk-” /var/log/openclaw/ # 替换你的日志路径
也可以在 systemd 服务中设置 `Environment=PYTHONUNBUFFERED=1`,但更关键的是应用层不要输出 Key。
使用密钥管理服务(可选)
如果 VPS 上跑多个 Agent,可以考虑用 HashiCorp Vault 或 AWS Secrets Manager,但小型部署用 `.env` + 权限隔离已经够用。注意不要把这个 `.env` 文件提交到 Git。
老鸟叮嘱
•不要用 root 跑任何 AI Agent,包括 OpenClaw、Claude Code、Codex。建一个独立用户,权限最小化。
•Webhook 端口不要直接暴露,前面必须套 Nginx 或 Caddy 做反向代理,加上签名验证和 HTTPS。
•API Key 泄露后立即轮换,在 OpenAI/Claude 后台删除旧 Key,生成新 Key,然后更新 `.env`。
•定期检查日志,看有没有异常请求,比如 Webhook 被频繁调用、返回 403 或 500 增多。
•防火墙只开放必要端口,比如 443(HTTPS),Webhook 内网监听 127.0.0.1 即可,通过 Nginx 代理出去。
FAQ
Q:OpenClaw 可以用普通用户运行吗?
A:完全可以,建议创建专用系统用户(无登录权限),通过 systemd 以该用户身份启动,不要用 root。
Q:API Key 泄露了怎么办?
A:立即在 API 提供商后台删除泄露的 Key,生成新 Key 并更新 `.env` 文件,同时检查是否有异常调用记录。
Q:Webhook 必须暴露公网吗?
A:不一定。如果调用方和 OpenClaw 在同一内网(比如同一台 VPS 上的 n8n),Webhook 监听 127.0.0.1 即可。如果需要公网调用,必须加签名验证和 HTTPS。
Q:Nginx 反代 Webhook 时,签名验证怎么做?
A:可以在 Nginx 用 Lua 脚本或 `auth_request` 模块自定义校验,但更推荐在 OpenClaw 应用层做签名验证,Nginx 只负责转发和 HTTPS 终结。
Q:日志里不小心打印了 API Key,怎么清理?
A:用 `sed -i ‘s/sk-[a-zA-Z0-9]*/REDACTED/g’ /var/log/openclaw/*.log` 替换,然后调整日志级别,避免再次输出。
Q:权限隔离后 OpenClaw 无法读取某些文件怎么办?
A:检查文件所有者和权限,确保 openclaw 用户对配置文件有读权限,对日志目录有写权限。不要用 `chmod 777`,用 `chown` 和 `chmod 750/640` 解决。
OpenClaw 安全加固不是一次性工作,建议每次更新 Agent 版本后都检查一下权限和 Webhook 配置。先把 root 权限卸掉,再给 Webhook 加上锁,最后管好 API Key,这三步做完,AI Agent 在 VPS 上才算基本安全。
转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9785.html 商家投稿邮箱:zhujixuanblog@qq.com
