"全民养虾"成了2026年开春最热的技术话题,在热潮背后,安全问题正在被大规模忽视。国家互联网应急中心(CNCERT)3月10日发布风险提示,工信部此前也两次预警,全球已有超过23万个OpenClaw实例暴露在公网上,其中中国以7.52万例居首。
大多数安全问题并非出在OpenClaw本身,而是出在部署和配置环节。本文基于对一个实际运行在Mac上的OpenClaw实例的完整安全审计,覆盖代码层面的硬编码密钥扫描、部署层面的文件权限与网络暴露面、以及运维层面的日志泄露和监控缺失,总结出8个最容易被忽视的安全盲区和对应的修复方案。
如果你已经在本地部署了OpenClaw,或者正打算部署,请逐项对照检查。
一、凭证管理:硬编码是头号敌人
本地部署时最常见的安全隐患,就是把API Key直接写在代码里。审计中发现了以下典型场景:React前端组件里直接写Authorization: "Bearer sk-xxxx",Python脚本顶部定义GATEWAY_TOKEN = "xxx",JSON配置文件里明文存储数据库root密码,.env.example文件里用了真实密钥而不是占位符。
这些密钥一旦被Git跟踪并推送到远程仓库,等于完全公开。即使是纯前端代码,只要在浏览器里运行,任何人打开开发者工具就能看到。
正确的做法是统一使用~/.openclaw/.env文件管理所有凭证,包括模型 API Key、OpenClaw Gateway Token、MySQL连接信息、OpenRouter和Serper等第三方服务的密钥。在Python脚本中添加一个通用的加载函数,启动时自动读取.env文件中的变量,且不覆盖已有环境变量以支持手动override。这样凭证只存在一个地方,方便统一轮换,同时.env文件本身已在.gitignore中排除。
需要特别注意的是openclaw.json这个例外。OpenClaw的核心配置文件必须包含飞书appSecret、模型 API Key、Gateway Token等凭证,因为这是OpenClaw网关自身读取的格式,无法迁移到.env。缓解措施是确保文件权限为600(仅所有者可读写)、不将~/.openclaw/目录纳入Git、并定期轮换密钥(建议每90天一次)。
二、文件权限:别让其他用户偷看你的密钥
macOS是多用户系统。即使你是唯一用户,很多文件默认创建为644(所有人可读)或目录755(所有人可进入),这意味着同一台机器上的其他账户、或通过SSH登录的用户,都能读取你的密钥。
审计中梳理了需要收紧权限的完整清单。~/.openclaw/.env和openclaw.json应设为600,所有shell脚本(包括openclaw-wrapper.sh和openclaw-secure.sh)应设为700,敏感目录如agents会话目录、credentials凭证存储、identity设备认证、memory SQLite数据库、browser浏览器profile和passkey等均应设为700,各技能目录中的.env和config.json也应设为600。
快速修复只需几行命令:对核心配置执行chmod 600,对所有shell脚本执行chmod 700,对敏感目录执行chmod 700,并对会话日志目录递归移除group和other的所有权限。
一个容易被忽略的风险点是会话日志中的密钥残留。OpenClaw的Agent会话以JSONL格式记录了每次工具调用的完整输入输出。如果Agent曾经读取过openclaw.json,API Key和飞书凭证会原样保存在会话文件中。审计中发现10个会话文件包含Moonshot API Key和飞书appSecret。防范措施是收紧sessions目录权限、定期清理旧会话、以及避免让Agent直接读取含密钥的配置文件。
三、网络隔离:Gateway绑定地址是生命线
OpenClaw Gateway是整个系统的入口。如果它绑定到0.0.0.0,任何能访问你网络的设备都可以控制你的AI Agent。
检查方法很简单,执行lsof -nP -iTCP:18789 -sTCP:LISTEN查看监听地址。安全的输出应该显示127.0.0.1:18789和[::1]:18789。如果看到0.0.0.0:18789或[::]:18789,说明Gateway已经暴露给了外部网络,这是最高优先级的危险信号。
修复方式是在openclaw.json中将gateway的bind字段设为"loopback"、mode设为"local",确保Gateway只监听本地回环地址。永远不要改成"0.0.0.0"或删除此配置。
如果确实需要从其他设备访问本地OpenClaw,不要配置路由器端口转发。正确的方式是使用Tailscale(OpenClaw原生支持,零配置VPN)或SSH隧道(ssh -L 18789:127.0.0.1:18789 your-mac)。
四、密码管理:启动保护别形同虚设
OpenClaw支持通过openclaw-wrapper.sh和openclaw-secure.sh为Gateway启停添加密码保护。但审计中发现三个常见问题:密码明文写在脚本里(这是目前的实现方式,无法避免,但必须确保脚本权限为700)、密码太弱(不要用用户名变体、生日或简单数字组合)、两个脚本的密码不同步(各有一份密码,修改时容易遗漏)。
生成强密码可以使用openssl rand -base64 24 | tr -d '/+=' | head -c 20。更好的方案是迁移到macOS Keychain,通过security add-generic-password命令存储密码,脚本启动时通过security find-generic-password命令读取,避免密码以明文形式存在于文件系统中。
五、.gitignore:防止意外提交的最后一道防线
工作区的.gitignore必须排除所有敏感文件:.env和.env.local环境变量文件、包含敏感数据的config.json(但保留config.example.json作为模板)、credentials和identity目录、.key/.pem/.crt等证书和密钥文件、以及会话数据文件。
特别需要警惕.env.example。这个文件通常会被提交到Git用于告诉其他开发者需要哪些环境变量,但绝对不能在里面放真实密钥,只用占位符如OPENROUTER_API_KEY=your_api_key_here。
六、安全监控:别等出事才看日志
部署完成不代表安全工作结束。审计建议配置三个定时任务:每5分钟运行一次监控脚本检查异常连接、每天凌晨3点执行完整安全扫描、每周日凌晨4点清理日志防止撑满磁盘(保留最近1000行)。
更进一步,可以使用macOS的launchd机制实现网络防护守护进程的开机自启和崩溃自动重启。创建一个plist文件放在~/Library/LaunchAgents/目录下,配置RunAtLoad和KeepAlive为true,然后通过launchctl load命令加载即可。
日常运维中,通过tail -f实时查看安全警报日志、查看每日扫描结果、以及用launchctl list确认守护进程状态,应该成为习惯性操作。
七、飞书集成的安全考量
如果你的OpenClaw通过飞书机器人接收指令,有三个额外的安全要点。首先是在openclaw.json中配置allowFrom白名单,限制只接受特定用户ID的消息。其次是在飞书开发者后台开启消息加密,设置Encrypt Key并填入配置的encryptKey字段,防止消息被中间人截获。最后是定期轮换appSecret,在飞书开发者后台重置后更新配置并重启Gateway。
八、部署完成后的安全检查清单
每次部署或配置变更后,逐项确认以下内容:.env文件权限为600、openclaw.json文件权限为600、所有shell脚本权限为700、敏感目录权限为700、Gateway仅绑定127.0.0.1和::1、代码中无硬编码的API Key或密码、.gitignore已排除所有敏感文件、.env.example只包含占位符、安全监控定时任务已配置、网络防护守护进程已启动、飞书allowFrom已配置白名单。
写在最后
OpenClaw的强大之处——自主决策、调用系统资源、持续运行——恰恰也是它的安全风险所在。一个配置不当的OpenClaw实例,本质上就是一个拥有你电脑完整访问权限的、不设防的远程控制后门。
本文列出的所有安全措施都不复杂,大部分可以在30分钟内完成配置。投入这30分钟,远好过事后花30天处理数据泄露的后果。