发布 Bottlerocket 1.3,一个基于隔离容器的发行版

Linux 发行版 Bottlerocket 1.3.0 已发布,由 Amazon 参与开发,用于高效、安全地启动隔离容器。 该发行版的工具和控制组件是用 Rust 编写的,并在 MIT 和 Apache 2.0 许可证下分发。 它支持在 Amazon ECS、VMware 和 AWS EKS Kubernetes 集群上运行 Bottlerocket,以及创建允许使用各种容器编排和运行时工具的自定义构建和版本。

该发行版提供了一个自动更新的不可分割的系统映像,其中包括 Linux 内核和最小的系统环境,仅包括运行容器所需的组件。 该环境包括 systemd 系统管理器、Glibc 库、Buildroot 构建工具、GRUB 引导加载程序、wicked 网络配置器、隔离容器的 Containerd 运行时、Kubernetes 容器编排平台、aws-iam-authenticator 和 Amazon ECS代理。

容器编排工具位于一个单独的管理容器中,该容器默认启用并通过 API 和 AWS SSM 代理进行管理。 基础镜像缺少命令 shell、SSH 服务器和解释语言(例如,没有 Python 或 Perl)——管理工具和调试工具被放置在单独的服务容器中,默认情况下处于禁用状态。

与 Fedora CoreOS、CentOS/Red Hat Atomic Host 等类似发行版的主要区别在于,主要侧重于在加强系统保护免受可能威胁的背景下提供最大的安全性,从而使利用操作系统组件中的漏洞变得更加困难并增强容器隔离。 容器是使用标准 Linux 内核机制创建的 - cgroup、命名空间和 seccomp。 为了实现额外的隔离,该发行版在“强制”模式下使用 SELinux。

根分区以只读方式挂载,/etc 设置分区挂载在 tmpfs 中,重启后恢复到原始状态。 不支持直接修改 /etc 目录中的文件,例如 /etc/resolv.conf 和 /etc/containerd/config.toml - 要永久保存设置,您必须使用 API 或将功能移至单独的容器中。 dm-verity 模块用于以加密方式验证根分区的完整性,如果检测到在块设备级别修改数据的尝试,系统将重新启动。

大多数系统组件都是用 Rust 编写的,它提供内存安全功能,以避免由于释放后内存访问、空指针取消引用和缓冲区溢出而导致的漏洞。 默认构建时,编译模式“-enable-default-pie”和“-enable-default-ssp”用于启用可执行文件地址空间 (PIE) 的随机化,并通过金丝雀替换防止堆栈溢出。 对于用 C/C++ 编写的软件包,还需要附加标志“-Wall”、“-Werror=format-security”、“-Wp,-D_FORTIFY_SOURCE=2”、“-Wp,-D_GLIBCXX_ASSERTIONS”和“-fstack-clash”启用保护”。

在新版本中:

  • 修复了 docker 和运行时 Containerd 工具中与错误设置访问权限相关的漏洞(CVE-2021-41089、CVE-2021-41091、CVE-2021-41092、CVE-2021-41103),这些漏洞允许非特权用户超越基本权限目录并执行外部程序。
  • kubelet 和 pluto 已添加 IPv6 支持。
  • 更改设置后可以重新启动容器。
  • eni-max-pods 软件包中添加了对 Amazon EC2 M6i 实例的支持。
  • Open-vm-tools 基于 Cilium 工具包添加了对设备过滤器的支持。
  • 对于x86_64平台,实现了混合启动模式(支持EFI和BIOS)。
  • 更新了 Rust 语言的包版本和依赖项。
  • 对基于 Kubernetes 8 的发行版变体 ​​aws-k1.17s-1.17 的支持已停止。 建议使用支持 Kubernetes 8 的 aws-k1.21s-1.21 版本。 k8s 变体使用 cgroup runtime.slice 和 system.slice 设置。

来源: opennet.ru

添加评论