SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor · 更新于 2026-08-22

如何在 VPS 上安全运行 OpenClaw

OpenClaw 可执行 Shell 命令、控制浏览器并读写文件。本指南介绍非特权用户、防火墙、密钥管理和 systemd 加固方法,并提醒 CVE-2026-32922 评分达 9.9。

OpenClaw 是什么,以及为什么要先加固它

OpenClaw 是一个自行托管的 AI 代理。您可以在自己的服务器上运行它,将其连接到大型语言模型。它可以运行 shell 命令、控制浏览器、读取和写入文件,还可以处理您从聊天应用发送给它的消息。这种操作范围正是该工具的用途,也是其全部风险所在。一个可以运行任意命令的代理,其安全性取决于运行它的主机,以及您为它设置的限制。

有两个事实决定了本指南的基调。首先,OpenClaw 的设计前提是由您负责加固。它的安全模型要求操作员自行设置严格的工具策略、沙箱和细致的权限,而不是依赖安全的默认配置。其次,该项目已经发生过严重的安全事件:2026 年 3 月,在 4 天内披露了 9 个安全问题,其中包括一个严重的权限提升漏洞 CVE-2026-32922,评分为 9.9(满分 10 分)。这两个事实都不意味着您应该避免使用 OpenClaw。它们意味着您不应采用最省事的方式运行它,而本指南介绍的是更谨慎的方式。谨慎运行的一部分,是预先决定代理在不询问您的情况下可以执行多少操作。Claude Code 通过权限模式明确了这一点:对于您无法一直在旁查看的服务器,应使用比您正在监控的笔记本电脑更严格的设置。

好消息是,OpenClaw 已经替您做出了一个安全选择:它的 gateway(控制所有功能的单个进程)默认监听 loopback 地址,因此除非您主动将其暴露出去,否则互联网无法访问它。下面的大部分工作,都是让它保持这种状态,并在发生问题时限制影响范围。

为 OpenClaw 创建专用的非特权用户

绝不要以 root 身份运行代理。如果 OpenClaw 以 root 身份运行,发生任何问题时,无论是程序错误、错误指令,还是类似上文所述的 CVE,造成的损害都没有上限。请创建一个没有登录 shell 且无 sudo 权限的专用系统用户,并以该用户身份运行代理:

sudo useradd --system --home /opt/openclaw --shell /usr/sbin/nologin openclaw

OpenClaw 所有文件都位于 /opt/openclaw 下,并归该账户所有。这是最重要的一步,其原则与以非特权用户身份运行服务相同:代理运行所使用的账户,决定了它最多能够造成多大的破坏。

安装 OpenClaw

OpenClaw 以 npm 软件包形式发布。如果服务器尚未安装 Node.js,请先安装。全局安装该软件包后,openclaw 二进制文件会加入 PATH,所有用户都可以使用。然后执行一次性初始化步骤:

sudo npm install -g openclaw@latest
sudo -u openclaw openclaw onboard

openclaw 用户运行初始化程序后,代理的配置会写入该用户的主目录 /opt/openclaw,而不是 root 的主目录。该项目还提供 curl -fsSL https://openclaw.ai/install.sh | bash 安装程序,可以用一行命令完成相同的安装。初始化时不要使用 --install-daemon 标志:该标志会注册 OpenClaw 自己的服务,而下面创建的加固版 systemd 单元具有更严格的限制。

将网关保持在回环地址上,并置于防火墙之后

网关默认绑定到 127.0.0.1。保持此设置。几乎没有理由将该端口发布到互联网。这样做会让任何发现该端口的人,都能远程进入一个专门执行命令的进程。

在服务器前配置默认拒绝的防火墙,避免意外暴露任何服务:

sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw enable

这里有两个需要避免的陷阱。仅覆盖 IPv4 的防火墙可能会让同一服务在 IPv6 上完全暴露,这正是许多人遇到的 IPv6 防火墙漏洞。如果需要从笔记本电脑访问网关,也不要开放该端口。应通过 VPN 或 SSH 隧道访问,这样 agent 就不会监听公网。

隔离敏感信息

OpenClaw 需要连接的语言模型提供 API 密钥。该密钥可以产生费用,OpenClaw 代理还可以使用它代表您执行操作,因此应将其视为密码。不要将密钥写入 unit 文件或任何代码仓库。将它保存到只有 OpenClaw 用户可以读取的文件中:

sudo install -o openclaw -g openclaw -m 600 /dev/null /opt/openclaw/openclaw.env
sudoedit /opt/openclaw/openclaw.env      # add ANTHROPIC_API_KEY=... or your model provider's key

systemd unit 使用 EnvironmentFile 加载该文件,因此密钥不会出现在命令行、日志或 shell 历史记录中。这种方式适用于服务器上的所有敏感信息:对自托管 Vaultwarden 进行加固检查时,重点是其管理员令牌和备份文件,而不是加密机制,因为真正决定谁能读取静态敏感信息的是文件权限。

将其作为强化的 systemd 服务运行

在 systemd 下运行该代理可实现自动重启,并通过 journalctl 统一管理日志。更重要的是,systemd 提供一组内核级沙箱选项,即使进程已被入侵,也能限制它可访问的资源。对于代理,最重要的选项包括 NoNewPrivileges,确保它无法获得新的权限;ProtectSystem=strict,使文件系统默认为只读,仅允许指定位置写入;PrivateTmp,为其提供独立的临时目录;以及 ProtectHome,防止它读取用户主目录。

在此生成完整的强化服务单元,然后将其复制到 /etc/systemd/system/openclaw.service

ToolGenerate a hardened systemd unit for the agent

该单元会启动 openclaw gateway,即负责控制代理的长期运行进程。如果 which openclaw 在您的服务器上显示其他路径,请调整 ExecStart 以匹配该路径。将程序作为 systemd 服务运行中详细介绍了这些指令,以及 daemon-reloadenable --now 的用法。粘贴服务单元后,可按以下简要步骤操作:

sudo systemctl daemon-reload
sudo systemctl enable --now openclaw

同时加固入口

代理服务器的安全性取决于其所在服务器的整体安全性。再增加两层防护即可完成加固。按照 VPS 上的 SSH 加固,将 SSH 设置为仅使用密钥认证并禁用 root 登录,避免攻击者暴力破解您用于管理服务器的账户。然后添加 Fail2ban,阻止反复扫描所有公网端口的扫描器。它们都不会直接修改 OpenClaw,但可以切断攻击者用来访问 OpenClaw 的路径。

有计划地及时更新

2026年3月披露的漏洞最清楚地说明了保持最新状态的重要性。代理中的权限提升漏洞比普通 Web 应用中的同类漏洞严重得多,因为代理本身已经能够执行命令。关注项目的发行版本,及时应用安全更新,并将 OpenClaw 升级视为例行维护,而不是可以推迟的工作。

要了解实际需要加固的部分,请参阅OpenClaw 类代理的架构,其中介绍了各个组成部分;在 VPS 上构建自己的 AI 代理介绍了所有代理通常采用的基本结构。如果最终在旁边运行第二个代理,请记住,同一台 VPS 上的两个 Claude Code 会话可以相互传递工作,因此每个代理都需要使用自己的账户并设置独立的限制,而不是继承您的账户和限制。

FAQ

运行 OpenClaw 的公共 VPS 是否安全?

只要完成加固,就可以安全运行。OpenClaw 的设计功能很强:它可以执行 shell 命令并控制浏览器,因此配置不当会带来实际的安全风险。该项目此前已经出现过严重的 CVE(2026 年 3 月的 CVE-2026-32922)。其安全模型要求您自行添加限制。使用非特权用户运行,将其网关保持在回环地址上,并置于默认拒绝的防火墙之后;隔离其 API 密钥,并将其作为经过加固的 systemd 服务运行。

是否应将 OpenClaw 网关暴露到互联网?

不应。网关默认绑定到回环地址,您应保持这一设置。它是控制代理的唯一进程,因此暴露网关等于为一个会持续执行命令的组件提供远程入口。如果需要远程访问,请使用 VPN 或 SSH 隧道,而不要开放该端口。

OpenClaw 应以哪个用户运行?

应使用专用系统用户运行。该用户不得具有登录 shell 或 sudo 权限,绝不能使用 root。如果代理遭到入侵,其用户账户权限决定了损害上限。因此,该账户只能拥有类似 /opt/openclaw 目录下属于自身的文件,不能拥有其他文件。

如何保护 OpenClaw 的 API 密钥?

将密钥存储在只有 OpenClaw 用户可读取的文件中(权限为 600),并使用 systemd 的 EnvironmentFile 将其加载到服务中。不要将密钥写入 unit 文件、shell 历史记录或任何 git 仓库。如果怀疑密钥已经泄露,应立即轮换。