安全与隐私
探针的权限边界
这是这个项目最重要的设计约束,写进了 CI 断言:
| 运行身份 | 非 root(Linux 上是专用用户 pulse) |
| Capabilities | 空 —— getpcaps 输出什么都没有 |
| 监听端口 | 零 —— ss -lntp 里找不到它 |
| 远程执行 | 不支持,也不打算支持 |
| systemd 加固 | 评分约 2.0(OK) |
安装需要 sudo(写 systemd unit、建用户),但这是一次性的。长期暴露的攻击面是非特权的。
为什么不做远程执行
面板是暴露在公网上的 Web 服务,它被攻陷的概率远高于你的每一台 VPS。 如果探针接受面板下发的命令,那么攻陷面板 = 攻陷所有机器。
所以探针的协议里根本没有「执行」这类消息。它只做两件事:上报指标、接收运行期配置 (上报间隔、网卡过滤这些,都经过白名单校验和范围钳制)。
采不到就说采不到
非 root 采不到的东西会如实标记为不可用,整块不显示。不会显示 0。
一个写着「温度 0°C」「进程数 0」的面板比没有这一项更糟 —— 它让你以为自己知道, 其实不知道。
凭据
- 探针 token 在数据库里只存 SHA-256,明文只在生成时返回一次
- 管理员密码用 Argon2 哈希
- 通知渠道的密钥加密存储,接口返回时打码
- 登录有频率限制和连续失败锁定
「生成安装命令」会换掉这台机器的 token —— 因为库里取不回明文,只能重新签发一把。 已经装了探针的机器会掉线,直到用新命令重装。后台点之前会提醒。
隐私
GeoIP 在本地
判定机器所在国家用的是 DB-IP Lite 数据库, 下载到本地后离线查询。IP 地址不会发给任何第三方。
数据库每周检查一次更新。拉不到就继续用本地缓存,不影响面板运行。
访客标签
页脚显示访客自己的 IP / 系统 / 浏览器,数据不落库、不上报,纯粹是给你自己看的。 不想要就设 PULSE_VISITOR_BADGE=false。
出网请求
面板会主动连的外部地址只有三个:
| 用途 | 可关闭 |
|---|---|
| 汇率(Frankfurter 兼容接口) | 不填价格就不会用到 |
| GeoIP 数据库更新 | 可以手动放好文件后断网 |
| 探针版本检查 | 关掉自更新即可 |
探针只连你的面板,没有别的出网。
自更新的 5 道防线
- 下载源只从本地配置读 —— 面板影响不了它
- minisign 签名校验 —— 公钥内置在二进制里
- SHA-256 摘要比对
- 拒绝降级 —— 版本号必须更高
- 试用期回滚 —— 新版本要在限定时间内成功连上并上报,否则自动回退
不配 --update-base 就整个关掉。