构建一个基于 OpenClaw 的免费(安全)、始终在线的本地 AI 代理
Davi Ottenheimer

OpenClaw骗不了我。我还记得MS-DOS。
DOS时代的悲惨日子。任何程序都可以窥探内核、干扰中断、写入磁盘的任何位置。毫无安全保障可言。
解决方案并非简单的封装或不同的 shell,而是完全不同的方法。世界早已拥有环、虚拟内存、访问控制列表 (ACL) 和独立的地址空间。Unix 从一开始就拥有的三十年隔离机制却被忽视,最终它不得不面对 DOS 时代的困境。
我不是说DOS不流行。我的天哪。我记得在芝加哥一家酒吧里,一个醉醺醺的瑞典IT顾问跳到桌子上,大喊:“都给我听好了!”他一边挥舞着啤酒杯,晃晃悠悠地晃来晃去,一边说他是来这儿给沃尔玛的POS机(运行MS-DOS系统)做维护的。他为什么这么激动?他高兴极了,非常非常高兴。他想让我们知道他热爱这份工作,大概是这样的:“你们能相信吗?沃尔玛有成千上万台DOS机器,里面存着你们所有的支付卡数据!哈哈哈哈!而且所有机器都共用一个密码!想要吗?我这儿有!自由万岁,美国万岁,爽爆了!”
这是真事。那家伙和沃尔玛都把所有顾客信息都放在了MSDOS系统上,完全没有任何安全措施。
NCR公司刚刚发布了一款基于MS-DOS的新型PC……我们决定为沃尔玛打造一套定制解决方案。我成功地将收银机和POS打印机连接到这台新PC上,并用编译后的MS Basic语言编写了一个专用的分期付款应用程序。沃尔玛首次实现了将顾客信息存储在磁盘上。店员只需几秒钟就能按姓名搜索到顾客信息,更重要的是,该系统能够精确追踪商品在仓库中的存放位置。这极大地提高了效率,最终NCR公司将其推广到所有沃尔玛门店。
个人身份信息泄露的速度从未如此之快!效率真是惊人。沃尔玛在2006年遭遇数据泄露时,自然要等上整整三年才通知公众。真是效率爆表。
代理网关感觉就像我们在倒退回MS-DOS时代。我随时都可能在酒吧里看到一个喝醉的瑞典IT顾问站在桌子上挥舞着他的龙虾,吹嘘他那适用于所有代理的单一令牌。因为,说实话,看看现在的网关,它们只要给模型一个执行工具就万事大吉了。一个流程,一个令牌,LLM 负责把关。
NVIDIA 显然已经看到了这场风暴的酝酿,因此发布了一篇深思熟虑的教程,详细介绍了如何在 DGX Spark 上设置“NemoClaw”自托管代理。
使用 NVIDIA DGX Spark 实现 OpenClaw 和 NemoClaw 的端到端部署,从模型服务到 Telegram 连接,并完全控制您的运行时环境。
我很欣赏这份努力。这才是真正的工程设计,一丝不苟。我学习了这份教程,并在我正在搭建的网关 Wirken 中按照教程操作,记录了每个步骤的具体操作。
教程要求你将 Ollama 绑定到 0.0.0.0,以便沙盒代理可以通过网络命名空间访问它。然后,它通过聊天频道发送代码来配对 Telegram 机器人。接下来,它会在单独的主机端 TUI 中批准被阻止的出站连接。这些步骤似乎都是为了解决一个实际问题,即如何为那些即使有安全措施也无法正常工作的系统添加安全措施。当沙盒覆盖整个代理时,这种架构就必须如此。
或许我有些老派,但我早在 Wirken 中就预料到了这些问题,通过缩小边界来提高代理的安全性。每个通道都是一个独立的进程,拥有自己的 Ed25519 标识。保险库会因进程溢出而停止运行。由于代理位于主机上,推理过程始终在回环地址上进行。Shell 执行操作在一个工具层配置的加固容器中运行,而不是试图包裹整个代理。每次调用都会提示 16 个高风险命令前缀;其他前缀则仅限首次使用,并保留 30 天的记忆。
以下是我逐步发现的情况。
| 步 | NemoClaw | Wirken.AI |
|---|---|---|
| 1. 运行时 | 将 NVIDIA 容器运行时注册到 Docker,并将 cgroup 命名空间模式设置为 host。这是基础设置,因为代理程序运行在容器内。 | 没有等效步骤。网关作为主机进程运行。Docker 仅作为每个工具调用的 shell 执行沙箱出现,并且是延迟配置的。 |
| 2. 奥拉玛 | 将 OLLAMA_HOST 覆盖为 0.0.0.0,以便沙盒代理可以通过其自身的网络命名空间进行推理。 | Ollama 运行在 127.0.0.1 上。该代理是主机进程,因此回环地址就足够了。 |
| 3. 安装 | 从 NVIDIA URL 使用 curl-pipe-bash。 | curl-pipe-sh 也支持此功能。安装程序会使用 ssh-keygen 验证发布签名是否与嵌入式密钥匹配,并对所有失败路径进行错误处理。安装程序自身的 SHA 值已固定在 README 文件中,供希望在管道传输前检查脚本的读者参考。 |
| 4. 模型 | ollama 拉取模型,然后 ollama run 将权重预加载到 GPU 内存中。 | 模式相同。两者都将推理委托给 Ollama。 |
| 5. 引导流程 | Wizard 生成一个内置策略和推理的沙盒镜像,作为可重建的命名单元。 | 向导会写入提供程序配置和通道注册信息。权限模型存在于二进制文件中;运行时状态记录了哪些操作键已被批准。 |
| 6. Telegram | 配对码通过聊天频道发送;用户在沙盒内确认。首次接触时,平台用户与代理绑定。 | 机器人令牌已存入加密库,适配器使用全新的 Ed25519 密钥对,无需在聊天中配对。审批粒度按操作和代理划分,而非按频道用户划分。 |
| 7. Web用户界面 | 片段中包含功能令牌的本地主机 URL,不再显示。 | 本地主机 URL,回环绑定,无需令牌。 |
| 8. 远程访问 | 主机端端口转发首先通过 OpenShell 启动,然后通过 SSH 隧道进行。多出的这一步是因为用户界面位于一个网络空间 (netns) 内。 | 仅限 SSH 隧道。WebChat 监听器已在主机回环上。 |
| 9. 政策 | 在网络边界强制执行。出站连接会在 TUI 中显示主机、端口和发起连接的二进制文件。允许批准会话或保持连接。 | 在工具分发层强制执行。16 个高风险命令前缀始终会发出提示;其他命令前缀仅在首次使用时发出提示,并保留 30 天。已批准的命令在经过加固的 Docker 容器内运行,该容器具有以下特性:cap_drop ALL、no-new-privileges、只读根文件系统、/tmp 目录下 64MB 的 tmpfs 文件系统,并且禁用网络连接。 |
查看我的审计日志
以上架构声明已记录在教程工作的日志中。Wirken 使用基于哈希链的 Web 聊天会话审计数据库,以下是 0.7.5 版本中的日志内容。
首先,curl 的三级拒绝请求:
[4] 助手工具调用 调用:exec({"命令":"curl https://httpbin.org/get"})
[5] 权限被拒绝 action_key='shell:curl' tier=tier3
[6] 工具结果 工具=执行成功=False 输出:权限被拒绝:'exec' 需要三级审批。
[10] 证明 链头序列=9 链头哈希=ff57c574ab503a74fa942ddb164def0df5bfbff05e5d5d6ecadcf127bce7e021
工具调用从未到达沙箱环境。拒绝操作已作为类型化事件记录在审计链中,并由逐轮验证覆盖。
其次,在 sh 上的强化沙箱中,经过shell:sh二级预先批准,同一代理运行一个复合命令,探测三个位置:
[14] assistant_tool_calls 调用:exec({"command":"sh -c \"touch /cannot_write_here 2>&1; ...\""})
[15] 工具结果 工具=执行成功=真 输出: touch:无法访问“/cannot_write_here”:只读文件系统 ws_ok=1 tmp_ok=1
[19] 证明 链头序列=18 链头哈希=6bf35f22df02b496244091e54b4dbf9b3ffdcf6a03485413f0522b84e2eb08a8
Read-only file system内核拒绝在只读挂载点上打开新文件。这不是 DAC 检查,而是根文件系统本身的问题。ws_ok=1确认工作区绑定挂载点保持可写状态。tmp_ok=1确认 /tmp 目录下的 tmpfs 文件系统也保持可写状态。
两张收据是同一会话中的连续行,通过哈希链一直追溯到序列 9 和序列 18 的证明签名。wirken sessions verify重放该链,并确认每个叶子哈希与其有效载荷匹配,并且每个链哈希都匹配SHA-256(prev_hash || leaf_hash)。
你的界限有多大?
教程中的变通方案试图在现有基础上尽可能地发挥其优势,因为现有基础架构并没有像工程师通常希望的那样进行关注点分离。例如,绑定到 0.0.0.0 是因为沙箱无法访问回环地址;通过聊天通道进行配对是因为没有独立的身份平面;将整个代理封装在一个容器中是因为代理本身尚未被信任;在网络边界进行批准是因为工具层没有权限的概念。
这些都是一种妥协,是对某种限制的回应。这种限制值得我们重新审视,就像回到了1985年,我们或许能够阻止比尔·盖茨一样。

1973 年,Unix 引入了进程分离、用户分离、文件权限以及小型程序间的管道通信。到了 1995 年,我完全投入到 Linux 的怀抱,开始手动编译内核,并创建了名为 flyingpenguin 的博客,因为 Linux 继承了这些特性并将其设为默认特性。
2020年,微软终于承认Linux才是他们更好的未来,这一点如今人尽皆知。
早在2001年,微软前CEO史蒂夫·鲍尔默就曾公开称Linux是“癌症”……在2020年麻省理工学院的一次活动中,微软总裁布拉德·史密斯表示:“微软站在了历史的错误一边”。
代理领域仍处于发展初期,有些人似乎永远无法吸取历史教训。Wirken 就是一个例子,它展现了人们在回顾过往时所看到的景象。比如,你还记得在 DOS 系统下保护数据有多么困难吗?还记得 2006 年沃尔玛数据泄露事件吗?该事件直到 2009 年才被报道。
问题在于,我们是否应该将计算机发展史上已有的经验应用到如何确保智能体在日常使用中的安全性上。目前已有数十个团队在开发各自版本的Wirken架构,我真心希望能够听到其他研究同一问题的团队的意见;这些架构的融合方式可能不止一种。
flyingpenguin.com
夜雨聆风