Skip to content

安全与隐私

探针的权限边界

这是这个项目最重要的设计约束,写进了 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 道防线

  1. 下载源只从本地配置读 —— 面板影响不了它
  2. minisign 签名校验 —— 公钥内置在二进制里
  3. SHA-256 摘要比对
  4. 拒绝降级 —— 版本号必须更高
  5. 试用期回滚 —— 新版本要在限定时间内成功连上并上报,否则自动回退

不配 --update-base 就整个关掉。

基于 MIT 许可发布