Veröffentlichung von Bottlerocket 1.3, einer Distribution, die auf isolierten Containern basiert

Die Version 1.3.0 des Linux-Distributions Bottlerocket wurde veröffentlicht, die in Zusammenarbeit mit Amazon entwickelt wurde, um isolierte Container effizient und sicher zu starten. Die Werkzeuge und Verwaltungsbestandteile der Distribution sind in Rust geschrieben und werden unter den Lizenzen MIT und Apache 2.0 vertrieben. Bottlerocket unterstĂŒtzt den Betrieb in Amazon ECS-Clustern, VMware und AWS EKS Kubernetes sowie die Erstellung beliebiger Builds und Editionen, die verschiedene Orchestrierungs- und Runtime-Tools fĂŒr Container ermöglichen.

Die Distribution bietet ein atomar und automatisch aktualisiertes, unteilbares Systemabbild, das einen Linux-Kernel und eine minimale Systemumgebung umfasst, die nur die fĂŒr den Betrieb von Containern erforderlichen Komponenten enthĂ€lt. In der Umgebung sind der Systemmanager systemd, die Bibliothek Glibc, das Build-Werkzeug Buildroot, der Bootloader GRUB, der Netzwerk-Konfigurator wicked, das Runtime fĂŒr isolierte Container containerd, die Container-Orchestrierungsplattform Kubernetes, der Authenticator aws-iam-authenticator und der Amazon ECS-Agent integriert.

Die Werkzeuge zur Orchestrierung von Containern werden in einem separaten Verwaltungs-Container bereitgestellt, der standardmĂ€ĂŸig aktiviert ist und ĂŒber die API und den AWS SSM Agent verwaltet wird. In dem Basisabbild fehlt eine Kommandozeile. Server SSH und interpretierte Sprachen (zum Beispiel, kein Python oder Perl) – Werkzeuge fĂŒr Administratoren und Debugging-Tools sind in einen separaten Dienstcontainer ausgegliedert, der standardmĂ€ĂŸig deaktiviert ist.

Das Hauptmerkmal im Vergleich zu Ă€hnlichen Distributionen wie Fedora CoreOS, CentOS/Red Hat Atomic Host ist die primĂ€re Ausrichtung auf maximale Sicherheit im Kontext der VerstĂ€rkung des Schutzes des Systems gegen mögliche Bedrohungen, der Erschwernis der Ausnutzung von Schwachstellen in Betriebssystemkomponenten und der Erhöhung der Isolation von Containern. Container werden mithilfe der Standardmechanismen des Linux-Kernels – cgroups, NamensrĂ€ume und seccomp – erstellt. FĂŒr zusĂ€tzliche Isolation wird im Distribution SELinux im Modus „enforcing“ eingesetzt.

Die Wurzelpartition wird im Nur-Lese-Modus eingehĂ€ngt, wĂ€hrend die Konfigurationspartition /etc in tmpfs eingebunden wird und ihren Ursprungszustand nach einem Neustart wiederherstellt. Direkte Änderungen an Dateien im Verzeichnis /etc, wie /etc/resolv.conf und /etc/containerd/config.toml, werden nicht unterstĂŒtzt – fĂŒr das dauerhafte Speichern von Einstellungen sollten die API oder separate Container verwendet werden. FĂŒr die kryptografische Verifizierung der IntegritĂ€t der Wurzelpartition wird das Modul dm-verity verwendet, und im Falle eines Versuchs, Daten auf BlockgerĂ€tebene zu verĂ€ndern, wird das System neu gestartet.

Die meisten Systemkomponenten sind in der Programmiersprache Rust geschrieben, die sichere Speicheroperationen ermöglicht und Schwachstellen vermeidet, die durch Zugriffe auf den Speicher nach dessen Freigabe, Dereferenzierung von Nullzeigern und Buffer-Overflow verursacht werden können. Bei der Standardkompilierung werden die Kompilierungsmodi „—enable-default-pie“ und „—enable-default-ssp“ verwendet, um die ZufĂ€lligkeit des Adressraums von ausfĂŒhrbaren Dateien (PIE) sowie den Schutz vor Stack-Overflow durch das EinfĂŒhren von Canary-Werten zu aktivieren. FĂŒr Pakete, die in C/C++ geschrieben sind, werden zusĂ€tzlich die Flags „-Wall“, „-Werror=format-security“, „-Wp,-D_FORTIFY_SOURCE=2“, „-Wp,-D_GLIBCXX_ASSERTIONS“ und „-fstack-clash-protection“ hinzugefĂŒgt.

In der neuen Version:

  • SicherheitsanfĂ€lligkeiten im Docker-Werkzeug und im Runtime containerd (CVE-2021-41089, CVE-2021-41091, CVE-2021-41092, CVE-2021-41103), die mit unzureichender Berechtigungsvergabe zusammenhingen, wurden behoben, was es unprivilegierten Benutzern ermöglichte, ĂŒber das Basisverzeichnis hinauszugehen und externe Programme auszufĂŒhren.
  • In kubelet und pluto wurde hinzugefĂŒgt IPv6-UnterstĂŒtzung.
  • Die Möglichkeit, ein Container nach Änderung seiner Einstellungen neu zu starten, wurde bereitgestellt.
  • Der Paket eni-max-pods unterstĂŒtzt nun Amazon EC2 M6i-Instances.
  • In open-vm-tools wurde die UnterstĂŒtzung fĂŒr GerĂ€tefilter implementiert, basierend auf dem Werkzeug Cilium.
  • FĂŒr die x86_64-Plattform wurde ein hybrider Bootmodus (mit UnterstĂŒtzung fĂŒr EFI und BIOS) implementiert.
  • Die Versionen der Pakete und AbhĂ€ngigkeiten fĂŒr die Sprache Rust wurden aktualisiert.
  • Die UnterstĂŒtzung fĂŒr die aws-k8s-1.17-Variante der Distribution auf Basis von Kubernetes 1.17 wurde eingestellt. Es wird empfohlen, die aws-k8s-1.21-Variante mit UnterstĂŒtzung fĂŒr Kubernetes 1.21 zu verwenden. In den k8s-Varianten wurden die Einstellungen cgroup runtime.slice und system.slice eingesetzt.

Quelle: opennet.ru

60GB SSD 8Gb DDR4