发布 Bubblewrap 0.6,用于创建隔离环境的层

用于组织隔离环境工作的工具 Bubblewrap 0.6 已发布,通常用于限制非特权用户的个人应用程序。 在实践中,Flatpak 项目使用 Bubblewrap 作为隔离从包启动的应用程序的层。 该项目代码是用 C 语言编写的,并在 LGPLv2+ 许可证下分发。

为了实现隔离,使用传统的 Linux 容器虚拟化技术,基于 cgroup、命名空间、Seccomp 和 SELinux。 为了执行特权操作来配置容器,Bubblewrap 以 root 权限启动(带有 suid 标志的可执行文件),然后在容器初始化后重置特权。

操作不需要在命名空间系统中激活用户命名空间,这允许您在容器中使用自己的单独的标识符集,因为它在许多发行版中默认不起作用(Bubblewrap 被定位为一个有限的 suid 实现)用户命名空间功能的子集 - 从环境中排除所有用户和进程标识符(当前标识符除外,使用 CLONE_NEWUSER 和 CLONE_NEWPID 模式)。 为了提供额外的保护,在 Bubblewrap 下执行的程序以 PR_SET_NO_NEW_PRIVS 模式启动,该模式禁止获取新权限,例如,如果存在 setuid 标志。

文件系统级别的隔离是通过默认创建一个新的挂载命名空间来实现的,其中使用 tmpfs 创建一个空的根分区。 如有必要,外部 FS 分区会以“mount —bind”模式附加到此分区(例如,当使用“bwrap —ro-bind /usr /usr”选项启动时,/usr 分区将从主系统转发)处于只读模式)。 网络功能仅限于通过 CLONE_NEWNET 和 CLONE_NEWUTS 标志访问具有网络堆栈隔离的环回接口。

与同样使用 setuid 启动模型的类似 Firejail 项目的主要区别在于,在 Bubblewrap 中,容器创建层仅包含必要的最低功能,以及运行图形应用程序、与桌面交互和过滤请求所需的所有高级功能到Pulseaudio,转移到Flatpak端并在权限重置后执行。 另一方面,Firejail 将所有相关功能组合在一个可执行文件中,这使得审核和维护适当级别的安全性变得困难。

在新版本中:

  • 添加了对介子组装系统的支持。目前保留了对使用 Autotools 进行构建的支持,但将在未来版本中删除。
  • 实现了“--add-seccomp”选项来添加多个 seccomp 程序。添加了警告,如果再次指定“--seccomp”选项,则仅应用最后一个参数。
  • git 存储库中的 master 分支已重命名为 main。
  • 添加了对 REUSE 规范的部分支持,该规范统一了指定许可证和版权信息的过程。许多代码文件都添加了 SPDX-License-Identifier 标头。遵循重用指南可以更轻松地自动确定哪个许可证适用于应用程序代码的哪些部分。
  • 添加了检查命令行参数计数器 (argc) 的值,并在计数器为零时实施紧急退出。此更改有助于阻止因错误处理传递的命令行参数而导致的安全问题,例如 Polkit 中的 CVE-2021-4034。

来源: opennet.ru

添加评论