介绍
fleetd 是一个自己部署的服务器、软路由管理工具。一个服务端负责收集监控数据、发出告警、提供网页后台;每台被管理的机器上运行一个小客户端。
和其他工具的区别
远程管理工具通常完全信任控制面板:谁控制了面板,谁就能在所有机器上以 root 执行任何命令。fleetd 的设计目标是服务端被攻破也无法执行命令:
- 命令在你的浏览器里用 Ed25519 私钥签名。这把私钥不能导出,也不会发到服务端。
- 每个客户端自己保存信任的公钥列表和权限级别,服务端改不了。
- 客户端更新必须用发布私钥签名,这把私钥离线保存在你自己的电脑上。
服务端只负责转发签过名的消息和保存监控数据。完整的威胁分析见设计文档(英文)。
工作原理
浏览器 ──HTTPS──▶ fleetd-server ──▶ PostgreSQL
▲
│ WebSocket + Noise(客户端主动连接)
┌───────────────┼────────────────┐
fleetd-agent fleetd-agent fleetd-agent
- 运行
fleetd-server和 PostgreSQL,前面放一个 HTTPS 反向代理。 - 在每台机器上执行后台给出的一条安装命令。客户端主动连上服务端,等待你批准。
- 批准后每 10 秒上报一次监控数据。在你给它的权限范围内,可以对它执行签名命令、打开终端。
环境要求
| 部分 | 需要 |
|---|---|
| 服务端 | Linux(或 Docker)、PostgreSQL 13+;要从外网访问的话,需要一个配好 HTTPS 的域名 |
| 客户端 | x86_64 或 arm64 的 Linux(systemd),或 OpenWrt / iStoreOS;能访问到服务端 |
| 管理员 | 最新版 Chrome、Edge、Firefox 或 Safari(需要 WebCrypto 的 Ed25519) |