Flatpak 1.12.0 独立包系统发布

Flatpak 1.12 工具包的一个新的稳定分支已经发布,它提供了一个用于构建独立包的系统,这些包不依赖于特定的 Linux 发行版,并在一个特殊的容器中运行,该容器将应用程序与系统的其余部分隔离。 为 Arch Linux、CentOS、Debian、Fedora、Gentoo、Mageia、Linux Mint、Alt Linux 和 Ubuntu 提供了对运行 Flatpak 软件包的支持。 Flatpak 软件包包含在 Fedora 存储库中,并受到本机 GNOME 应用程序管理器的支持。

Flatpak 1.12 分支的主要创新:

  • 改进了对 Flatpak 包中使用的嵌套沙盒环境的管理以及 Steam 游戏交付服务的客户端。 在嵌套沙箱中,允许创建 /usr 和 /app 目录的单独层次结构,这在 Steam 中用于在具有自己的 /usr 分区的单独容器中启动游戏,与 Steam 客户端的环境隔离。
  • 具有相同应用程序标识符 (app-ID) 的所有包实例共享 /tmp 和 $XDG_RUNTIME_DIR 目录。 (可选)使用“--allow=per-app-dev-shm”标志,您可以启用 /dev/shm 共享目录。
  • 改进了对文本用户界面 (TUI) 应用程序(例如 gdb)的支持。
  • build-update-repo 实用程序中添加了“ostree prune”命令的更快实现,并针对在存档模式下使用存储库进行了优化。
  • 门户机制实现中的漏洞 CVE-2021-41133 与 seccomp 规则中与挂载分区相关的新系统调用缺乏阻止相关,现已修复。 该漏洞允许应用程序创建嵌套沙箱,以绕过用于组织对容器外部资源的访问的“门户”验证机制。

    因此,攻击者通过执行与挂载相关的系统调用,可以绕过沙箱隔离机制并获得对主机环境内容的完全访问权限。 该漏洞只能在为应用程序提供直接访问 AF_UNIX 套接字的软件包中被利用,例如 Wayland、Pipewire 和 pipeline-pulse 使用的软件包。 在版本 1.12.0 中,该漏洞并未完全消除,因此更新 1.12.1 紧随其后发布。

让我们提醒您,Flatpak 允许应用程序开发人员通过准备一个通用容器来简化标准分发存储库中未包含的程序的分发,而无需为每个分发创建单独的程序集。 对于注重安全的用户,Flatpak 允许您在容器中运行有问题的应用程序,仅提供对与该应用程序关联的网络功能和用户文件的访问。 对于对新产品感兴趣的用户,Flatpak 允许您安装最新的测试版本和稳定版本的应用程序,而无需对系统进行更改。 例如,Flatpak 软件包是为 LibreOffice、Midori、GIMP、Inkscape、Kdenlive、Steam、0 AD、Visual Studio Code、VLC、Slack、Skype、Telegram Desktop、Android Studio 等构建的。

为了减少包大小,它仅包含应用程序特定的依赖项,基本系统和图形库(GTK、Qt、GNOME 和 KDE 库等)被设计为插件标准运行时环境。 Flatpak 和 Snap 之间的主要区别在于,Snap 使用主系统环境的组件并基于过滤系统调用进行隔离,而 Flatpak 创建一个与系统分离的容器并使用大型运行时集进行操作,提供的不是包作为依赖项,而是标准一个系统环境(例如,运行 GNOME 或 KDE 程序所需的所有库)。

除了通过特殊存储库安装的标准系统环境(运行时)之外,还提供应用程序运行所需的附加依赖项(捆绑包)。 总的来说,运行时和捆绑包构成了容器的填充,尽管运行时是单独安装的并同时绑定到多个容器,这使您可以避免重复容器常见的系统文件。 一个系统可以安装多个不同的运行时(GNOME、KDE)或同一运行时的多个版本(GNOME 3.40、GNOME 3.42)。 以应用程序作为依赖项的容器仅使用与特定运行时的绑定,而不考虑构成运行时的各个包。 所有缺失的元素都直接与应用程序打包在一起。 当容器形成时,运行时内容将安装为 /usr 分区,而捆绑包将安装在 /app 目录中。

运行时和应用程序容器是使用 OSTree 技术构建的,其中图像从类似 Git 的存储库自动更新,这允许将版本控制方法应用于分发组件(例如,您可以将系统快速回滚到之前的状态)。 RPM 包使用特殊的 rpm-ostree 层转换到 OSTree 存储库中。 不支持在工作环境中单独安装和更新软件包;系统的更新不是在单个组件的级别,而是作为一个整体,原子地改变其状态。 提供增量应用更新的工具,无需每次更新都完全替换映像。

生成的隔离环境完全独立于所使用的发行版,并且在包的正确设置下,无法访问用户或主系统的文件和进程,无法直接访问设备,除了通过DRI输出之外,以及对网络子系统的调用。 图形输出和输入组织是使用 Wayland 协议或通过 X11 套接字转发来实现的。 与外部环境的交互基于 DBus 消息系统和特殊的 Portals API。

为了实现隔离,基于 cgroup、命名空间、Seccomp 和 SELinux,使用了 Bubblewrap 层和传统的 Linux 容器虚拟化技术。 PulseAudio用于输出声音。 在这种情况下,可以禁用隔离,许多流行软件包的开发人员都使用隔离来获得对文件系统和系统中所有设备的完全访问权限。 例如,GIMP、VSCodium、PyCharm、Octave、Inkscape、Audacity 和 VLC 都带有有限的隔离模式,保留对主目录的完全访问权限。

如果有权访问主目录的软件包受到损害,尽管软件包描述中存在“沙盒”标签,攻击者只需更改 ~/.bashrc 文件即可执行其代码。 另一个问题是对包更改的控制以及对包构建者的信任,这些构建者通常与主项目或发行版无关。

来源: opennet.ru

添加评论