默认拒绝所有权限类型
覆盖每一种权限类别,包括 wayland 与 dri,对所有应用生效;绝不授予 --persist。
- --unshare
- --nosocket
- --nodevice
- --disallow
- --nousb=all
- --remove-policy
Flatpak 的默认配置面向便利。harden-flatpak 反其道而行:先全部拒绝,再按需放行。
覆盖每一种权限类别,包括 wayland 与 dri,对所有应用生效;绝不授予 --persist。
拒绝 home、host、host-os、host-etc,并对敏感路径持续遮蔽——即使日后给某个应用授予 --filesystem=home,这些路径依然被屏蔽。
拒绝静态名单(portal 后端、Secret、PermissionStore、Flatpak / systemd 逃逸名称),并读取已安装应用声明的总线名称,逐一拒绝。
结束所有 Flatpak 进程,取消导出文档,清空 ~/.var/app/* 与 $XDG_RUNTIME_DIR/app/*。
一条命令回滚:flatpak override --user --reset。tests/test.sh 用伪造的 flatpak 校验生成的命令,不触碰真实系统。
锁定之后,你仍然需要一个图形界面来按应用精细授权。脚本只重新授予 Flatseal 正常工作所需的最少权限,详见仓库中的 docs/flatseal-grants.md。
点击下方按钮,直观感受 lockdown.sh 对应用权限的影响,并查看脚本运行流程。
* 纯前端动画示意,不会对你的系统做任何事情。
两个脚本刻意保持很小,建议在运行前先通读一遍。
克隆仓库并先审阅源码。
git clone https://github.com/lingyicute/harden-flatpak.git && cd harden-flatpak默认拒绝用户级 override。安装新应用后请再次运行。
bash lockdown.sh结束进程并清空应用数据。会立即删除数据。
bash cleanup.sh脚本不会请求确认——运行脚本即是确认。cleanup.sh 会立即删除数据。严格的权限限制也可能让许多 Flatpak 应用无法正常工作,请通过 Flatseal 或 flatpak override 为可信应用单独授予所需权限。
安全工具最重要的是不夸大效果。以下是 Flatpak 自身的边界,以及对应的应对办法。
--nosocket=session-bus 只移除未过滤的总线。flatpak run 仍会挂载一个始终允许 org.freedesktop.portal.*(包含子沙箱 Spawn())的过滤代理,以及无障碍总线代理。如需完整的总线隔离,请使用 flatpak run --sandbox 运行应用。~/.var/app/$APP_ID 始终可写且跨运行保留--nopersist 覆盖项,清单中声明的 persistent= 目录也无法撤销。这正是 cleanup.sh 存在的原因;flatpak run --sandbox 则提供一次性沙箱。home 或 host~/.bash_profile 不存在,拥有 home 的应用可以绕过遮蔽创建它。请授予更窄的目录,或使用 portal。lockdown.sh 之后依然有效。请用 ls ~/.local/share/flatpak/overrides 检查。$XDG_DATA_HOME/flatpak/db/。cleanup.sh 只会显示它们,不会删除。请使用 flatpak permissions、flatpak permission-remove 或 flatpak permission-reset APP_ID。--no-talk-name=foo.* 不是通配符foo.* 的条目,因此静态名单永远无法做到完备。所以脚本会读取已安装应用的声明,并建议你在安装新应用后重新运行 lockdown.sh。wp-security-context-v1 协议。