發布 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

添加評論