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

用于组织隔离环境工作的工具 Bubblewrap 0.8 已发布,通常用于限制非特权用户的个人应用程序。 在实践中,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 将所有相关功能组合在一个可执行文件中,这使得审核和维护适当级别的安全性变得困难。

在新版本中:

  • 添加了“--disable-userns”选项以禁止在沙箱环境中创建自己的嵌套用户命名空间。
  • 添加了“--assert-userns-disabled”选项,以检查使用“--disable-userns”选项时是否使用了现有用户 ID 空间。
  • 增加了与禁用内核中 CONFIG_SECCOMP 和 CONFIG_SECCOMP_FILTER 设置相关的错误消息的信息内容。

来源: opennet.ru

添加评论