工具包新版本 旨在组织孤立环境中的工作 Linux 它面向非特权用户在应用层运行。实际上,Flatpak 项目使用 Bubblewrap 作为隔离层,用于隔离从软件包启动的应用程序。该项目的代码是用 C 语言编写的。 采用 LGPLv2+ 许可协议。
传统材料常用于隔热。 Linux 基于 cgroups、命名空间、Seccomp 和 SE 的容器虚拟化技术Linux为了执行特权容器配置操作,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 将所有相关功能都集成在一个可执行文件中,这使得安全审计和维护变得困难。 .
新版本最显著的特点是支持附加现有用户命名空间和进程 ID(PID 命名空间)。新增了“--userns”、“--userns2”和“--pidns”标志来控制命名空间的附加。
此功能在 setuid 模式下无法工作,需要使用单独的模式。该模式无需获取 root 权限即可工作,但需要激活。
系统中的用户命名空间(默认情况下已禁用) Debian 以及 RHEL/CentOS)并且不排除这种可能性 为了规避“用户命名空间”的限制,Bubblewrap 0.4 的新功能还包括可以使用 musl C 库而不是 glibc 进行构建,以及支持将命名空间信息保存到 JSON 统计文件中。
来源: opennet.ru
