# 安全

## 报告问题

- **FlatPark 自身的漏洞**（构建、签名或发布流程、工作流、发布 webhook）：请通过 [GitHub 安全公告](https://github.com/flatpark/flatpark/security/advisories/new)私下报告，避免在修复前公开。
- **会让用户面临风险的软件包或应用版本**（运行或访问了不该碰的东西，或者某个版本有恶意）：请在 [github.com/flatpark/flatpark/issues](https://github.com/flatpark/flatpark/issues) 开一个 issue，并在标题里注明是安全问题，让其他用户也能看到警告。

两种都会被优先处理。

## 绝不允许的事

无论其他规则怎么写，下面这些都不会上架，一旦发现立即下架：

- 窃取数据、破坏系统或隐瞒自己行为的应用或版本；
- 未经申报就触及沙箱之外（`--filesystem=host`、Flatpak 控制总线），或者索取功能并不需要的危险权限的软件包；
- 不是开发者官方文件的下载。

## 某个版本有危险时

任何维护者都会立刻撤下它，不等任何人：把应用从目录里删除，或者回退到上一个安全版本，然后发布。7 天内会有一个 issue 说明发生了什么、影响了哪些版本、用户该怎么做。

撤下能做到和做不到的：它会阻止新的安装和更新。已经装好的副本会继续运行，直到用户自己删除，所以说明里会写清怎么删（`flatpak uninstall --delete-data <app-id>`）。

## 软件仓库怎么签名

- 仓库用一把 GPG 密钥签名。它的长期主密钥只用于认证，不放进 CI，离线备份。实际签名的是子密钥，只有发布工作流持有它。
- Pull request（包括来自 fork 的）在没有任何密钥的环境里构建，用一次性的密钥签名。发布用的密钥从不接触 PR 的内容。
- 你的 Flatpak 客户端在每次安装和更新时都会校验签名，也会校验每个下载的应用文件的校验和与大小。

## FlatPark 检查什么、不检查什么

FlatPark 检查每个应用文件都是开发者的官方发布、按校验和固定，每个软件包只做了它申报的事，所发布的内容没有明显的恶意行为。它不审计应用的源码，闭源应用更是无从审计：应用做什么，你信任的是开发者；它怎么被打包和送到你手里，你信任的是 FlatPark。详见[信任与安全](trust.md)。