浏览文档

信任与安全

FlatPark 的整个模式都是重新打包官方下载产物,而不是重新构建它们。下面准确说明这对你安装的内容意味着什么。

仅使用 extra-data

FlatPark 会在安装时下载厂商自己的发布产物,并将其封装为 Flatpak。你运行的是官方 binary,而不是 FlatPark 重新构建的版本。当厂商发布的是 AppImage 时,FlatPark 会离线解包其末尾附带的文件系统——AppImage 只被读取、绝不执行,也不涉及 FUSE。

有些软件包包含少量厂商下载产物之外的内容,例如 wrapper 脚本,或 Flatpak runtime 没有提供的库(比如托盘图标库)。共享的支持库来自 FlatPark 公开的 flatpark/prebuilt repo,由 GitHub Actions 从固定的源码构建。这些只是应用外围的打包支撑,不会替换或修改厂商的 binary。

少数有人需要的应用没有官方 Linux 版本。对这些应用,由公开的 flatpark/<app>-release 仓库严格按上游的方式构建,不做修改、符合上游的许可,软件包在安装时像其他下载一样下载这个发布。

开源应用的进程中不会被注入任何代码,它们的 bug 反馈给上游。闭源应用偶尔需要一个适配才能让某个功能在 sandbox 中工作(例如 LD_PRELOAD shim)。适配要经过审核,应用页面会显示出来,应用说明中会准确写明它是什么、为什么需要。

固定并签名

每个发布版本都在 manifest 中按 sha256 和大小固定,你的 Flatpak 客户端下载文件时会校验这两项。即使厂商悄悄更换了某个 URL 背后的文件,变更也不会传到你这里:安装或更新会失败,直到新文件经过检查并重新固定。

新版本每天检查两次;如果开发者的发布工作流会通知 FlatPark,几分钟内就能发现。每个新版本都会被下载、固定校验和,并按安装时的方式解包一遍;只有解包成功,才会自动合并并发布。每次更新都是仓库里一条公开的提交。

发布的 repo 使用 GPG 签名,客户端会在安装和更新时验证该签名。

严格的 sandbox

FlatPark 倾向使用仍能让应用正常工作的最少 finish-args。只有在应用主要功能需要、或者不给就要用户做大量 override 时,--filesystem=home、在主机上运行命令这类宽泛的权限才会在审核后默认授予。每个应用页面都会列出其确切权限,附有通俗易懂的风险标签,并用颜色标出有风险的权限,让你能在安装前了解应用可以访问哪些内容。

应用并非绝对需要的功能默认保持关闭。如果应用获得更宽泛的权限后可以使用更多功能,其页面会记录用于授权的 flatpak override 命令,让选择权留在你手中——请参阅flatpak override。

打包改动

每个应用页面的打包方式一栏(在权限下方)标有四个打包级别之一,说明这个软件包在厂商构建之外(或对厂商构建本身)做了什么,与它获得的权限分开标示:

  • 原样——按厂商发布的原样运行。启动脚本最多设置一个环境变量或启动参数。
  • 有适配——在应用旁边补充了东西,但没有改动应用本身:Flatpak runtime 缺少的库或工具、字体,或预设的设置,比如关掉在 Flatpak 里无法工作的应用内更新器。
  • 有改动——改变了厂商构建的运行方式:向应用进程注入代码(LD_PRELOAD 库)、增加或修改厂商构建中的文件,或在首次启动时运行厂商的安装器、但替换了其中某些部分或改动了安装结果。只有闭源应用可以有改动;开源应用如果需要这样做则不予收录,因为应当在 upstream 修复。
  • 隔离降低——应用可以在沙箱之外、在你的系统上执行命令,或在关闭其自带的内部沙箱(例如 Chromium 的沙箱)的情况下运行。应用页面会写明具体是什么、为什么。

不放入厂商软件包中在 Flatpak 里根本无法工作的部分——例如 setuid 的沙箱辅助程序、pkexec 更新器、文件管理器扩展——不算作改动。应用或它自己的安装器自己做的事也不算,比如首次启动时把 Windows 安装器原样运行进 Wine 前缀。安装器运行时替换了其中某些部分就算改动:thinkorswim 和 IBKR Desktop 运行厂商安装器时用了替身 df 让它接受沙箱环境,它们的页面会写明。

社区软件包不代表认可

FlatPark 是独立项目,与其打包的应用没有关联。应用在此出现并不代表其厂商认可该软件包,除非应用自己的页面明确说明。每个软件包都会链接到 upstream 源码和网站,供你自行核实来源。

验证你安装的内容

  • 查看应用页面上的权限面板。
  • 通过 Source 和 Website 链接前往 upstream。
  • 通过已签名的 remote 安装(请参阅配置 FlatPark);客户端会自动验证签名。

在 GitHub 上编辑此页