np6126/tank-agent-os
GitHub: np6126/tank-agent-os
这是一个基于 Fedora bootc 的安全加固操作系统镜像,用于在受控环境中运行自治 AI 编码代理,解决代理运行时的安全与审计问题。
Stars: 3 | Forks: 0
独立项目 · 单一维护者 · MIT 许可证 · 自 2026 年初以来作为维护者的日常主力使用。
在一个它无法禁用的控制下运行一个自治 AI 编码代理。一个自治代理在运行时决定 调用哪些服务以及读取哪些文件,因此隔离必须成为 *整个技术栈*的一个属性,而不是单一控制。每一个出站数据包都被强制通过一个 经过审计的出口代理,操作系统层面的 [nftables](https://wiki.nftables.org/)(Linux 内核防火墙)限制 代理的 UID,一个由 root 所有的指令文件强化了对提示注入的防御——所有这些都由 操作系统强制执行,而非依赖于代理的配合。威胁模型是*致命三合一*:一个代理 读取不可信输入,能调用外部服务,并且可能被诱骗将两者结合。 **tank-agent-os** 是一个 Fedora [bootc](https://bootc-dev.github.io/bootc/) 镜像——一个不可变的、 原子化更新的容器即操作系统——它在一个加固的、无 root 权限的 Podman 应用装置内 搭载一个自治编码代理(**opencode**、**claw-code** 或 **Claude Code**):代理以 非特权容器形式运行,永远不是主机上的 root。每个镜像只搭载一个代理运行时, 在构建时通过 `AGENT_KIND` 选定——没有运行时切换,没有运行时更新。将代理 放在一个安全箱里运行——受审计、有边界、可观测。 **目标用户:** - 在家庭实验室 24/7 运行代理的独立开发者,他们希望有一个严格的网络边界,而不是“但愿没什么能逃出容器”。 - 正在试点代理式编码的安全团队,他们无法信任自己无法检查的供应商沙箱。 - 希望拥有一个审计人员能接受的、记录每个代理出口请求的审计日志的操作员。 **非目标用户:** 任何寻找托管代理服务或一键桌面工具的人。tank-agent-os 提供的是*运行时*,而非一个代理产品。 ## 架构  ## 功能特性 | 功能 | 作用 | 文档 | |---|---|---| | 三个固定的代理运行时 | opencode(默认)、claw-code 或 Claude Code——每个镜像一个,没有运行时切换或更新 | [build.md](docs/build.md) | | 受审计的出口代理 | 每个出站数据包都强制通过独立主机上的、允许列表制的、带日志的代理——一个进程外出口防火墙 | [security.md](docs/security.md) | | 操作系统级网络锁定 | nftables 将代理 UID 限制在代理上,作为内核强制沙箱;即使没有配置代理,也会应用默认全部拒绝的基线 | [security.md](docs/security.md) | | 提示注入强化 | 一个 root 所有、只读的指令文件设置了数据而非命令的信任层级——一个操作系统级的提示注入缓解措施 | [security.md](docs/security.md) | | 受控的外部访问 | service-gator 通过每个仓库的 `scopes.json` 允许列表来控制外部 API 调用 | [service-gator.md](docs/service-gator.md) | | 自托管网络搜索 | SearXNG + mcp-searxng 组合——无需云 API 密钥,无外部搜索供应商信任锚 | [web-search.md](docs/web-search.md) | | 文档查询 MCP | 抓取并索引开发者文档,通过 MCP(代理的插件协议)提供给代理 | [docs-lookup.md](docs/docs-lookup.md) | | LLM-Wiki MCP | 一个由代理策划的知识库——代理将来源提炼成链接笔记,并在会话间增长和复用;作为 RAG 的补充 | [llm-wiki.md](docs/llm-wiki.md) | | 技能模块 | 在主机目录中放入一个 `SKILL.md` 文件夹——下次会话即生效,无需重建镜像 | [skills.md](docs/skills.md) | | 持久代理记忆 | 构建时可选;默认关闭——持久记忆是一个提示注入持久化的攻击面 | [memory.md](docs/memory.md) | | MCP 引入门控 | 每个新的 MCP 服务器都附带一份书面安全审计报告,位于 [`audits/`](audits/) | [security.md](docs/security.md) | ## 安全性 tank-agent-os 将代理安全性视为整个技术栈的属性。三个关键控制点: - **网络隔离** — 代理容器没有 `CAP_NET_ADMIN`;主机 nftables 阻止从代理 UID 发出的 除出口代理外的每一个出站数据包。直接调用 GitHub 或任何 非允许列表主机的尝试在 TLS 握手之前就被拒绝。 - **受控访问** — 代理只能通过 service-gator 访问外部服务,该服务 强制执行按仓库、按权限的 `scopes.json` 允许列表。被攻陷的代理只能访问 允许列表明确许可的内容。 - **提示注入强化** — 一个 root 所有、只读的指令文件在每次运行时被加载到 系统提示中,并指示代理将工作区内容视为数据,而非 命令。 仅靠代理虚拟机无法产生可信的网络审计跟踪——独立的代理主机才是 信任边界。完整的威胁模型、能力表和信任边界图: [docs/security.md](docs/security.md)。 ## 项目存在意义 启发此项目控制措施的真实世界事件: - **Claude Code 删除了开发者的主目录** ([anthropics/claude-code#10077](https://github.com/anthropics/claude-code/issues/10077)) — 波浪号扩展 bug + 代理自主性 → `rm -rf $HOME`。*此处的缓解措施:无 root 权限的容器 UID,除了两个声明的路径外,无写入主机权限,操作系统级防火墙。* - **Cursor 代理通过 shell 内建命令绕过沙箱** (CVE-2026-22708, [Pillar Security](https://www.pillar.security/blog/the-agent-security-paradox-when-trusted-commands-in-cursor-become-attack-vectors)) — 一个用户输入命令的允许列表;代理也输入了它们。*此处的缓解措施:出口在内核和独立主机上强制执行,而非在代理的进程中。* - **Cline 供应链事件 (“Clinejection”,2026年2月)** — 恶意 MCP 工具有效载荷窃取了仓库内容。*此处的缓解措施:代理拒绝来自工作区的 MCP 和设置配置;只接受镜像内附带的、由 root 所有的配置。纵深防御:每个服务器的 MCP 引入门控、每个仓库的 `scopes.json`、受审计的出口日志。* ## 运行时配置 供应商配置是运行时输入——永远不会烘焙到镜像中。通过 `AGENT_*` 环境 变量、`AGENT_CONFIG`、`/run/agent/config.env` 或 `~/.clawx/agent.env` 提供: ``` AGENT_PROVIDER=ollama AGENT_BASE_URL=http://ollama.example.internal:11434/v1 AGENT_MODEL=replace-with-ollama-model ``` 支持的供应商:`ollama`、`lmstudio`、`openrouter`、`openai`、`anthropic`、 `custom-openai-compatible`、`custom-anthropic-compatible` — 详见 [model-providers.md](docs/model-providers.md) 了解设置和密钥名称。 ## 快速开始 1. [构建镜像](docs/build.md) 2. [导入到 Proxmox](docs/proxmox-import.md) 3. [配置登录访问](docs/provisioning.md) 4. **[首次启动后让代理运行起来](docs/first-boot.md)** 5. [使用 CLI 封装器](docs/cli.md) · [配置模型供应商](docs/model-providers.md) · [配置 service-gator](docs/service-gator.md) 6. 可选 MCP:[网络搜索](docs/web-search.md) · [文档查询](docs/docs-lookup.md) · [LLM-Wiki](docs/llm-wiki.md) 7. 扩展:[添加技能](docs/skills.md) · [持久记忆](docs/memory.md) 8. 了解[安全模型](docs/security.md) 关于 bootc 概念和日常运维,请参阅上游的 [bootc 文档](https://bootc-dev.github.io/bootc/)。 ## 致谢 - **[LobsterTrap/tank-os](https://github.com/LobsterTrap/tank-os)** — 本仓库分叉的应用装置架构:Fedora bootc、无 root 权限的 Podman Quadlets、cloud-init 配置、service-gator 集成、无 root 权限的密钥模型。 - **[anomalyco/opencode](https://github.com/anomalyco/opencode)** — 默认代理运行时,构建时从上游发布版本下载,并通过 tarball SHA-256 校验和固定。 - **[ultraworkers/claw-code](https://github.com/ultraworkers/claw-code)** — 实验性的第二运行时,从带有本地补丁的固定提交编译,输出二进制文件 SHA-256 校验和固定。 - **[Claude Code](https://www.anthropic.com/claude-code)** — Anthropic 的上游代理,第三个运行时;原生二进制文件在构建时从 `downloads.claude.ai` 下载,其签名发布清单经过 GPG 验证,二进制文件 SHA-256 校验和固定。 ## 许可证 [MIT](LICENSE) © 2026 np6126 · 部分内容 © Lobster Trap标签:AI安全, AI编码代理, bootc, Chat Copilot, Fedora, nftables, PB级数据处理, Podman, Web截图, 内核防火墙, 出口代理, 原子更新, 威胁建模, 安全控制, 安全运维, 审计, 容器安全, 容器技术, 提示注入加固, 提示注入防护, 提示词模板, 操作系统安全, 根less容器, 网络安全, 自主代理, 隐私保护, 隔离