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

可得到 新版本的工具包 泡泡纸0.4.0,旨在组织 Linux 中隔离环境的工作并在非特权用户的应用程序级别上运行。 在实践中,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 启动模型的一点是,在 Bubblewrap 中容器创建层只包含必要的最低限度的功能,而运行图形应用程序、与桌面交互以及过滤对 Pulseaudio 的调用所需的所有高级功能都外包给 Flatpak 并执行权限重置后。 另一方面,Firejail 将所有相关功能合并在一个可执行文件中,这使得审核和维护安全性变得困难 适当的水平.

新版本的值得注意之处在于实现了对加入现有用户命名空间和进程 pid 命名空间的支持。 为了控制命名空间的连接,添加了“--userns”、“--userns2”和“-pidns”标志。
该功能在setuid模式下不起作用,需要使用单独的模式,无需获取root权限即可工作,但需要激活
系统上的用户命名空间(在 Debian 和 RHEL/CentOS 上默认禁用)并且不排除这种可能性 操作 可能 其余的 漏洞 对于“用户命名空间”限制边缘。 Bubblewrap 0.4 的新功能还包括使用 musl C 库而不是 glibc 进行构建的能力,以及支持将命名空间信息保存到包含 JSON 格式统计信息的文件中。

来源: opennet.ru

添加评论