Die neue Version des Linux-Distributions Bottlerocket 1.8.0 wurde veröffentlicht, entwickelt in Zusammenarbeit mit Amazon, um isolierte Container effizient und sicher auszuführen. Die Werkzeuge und Verwaltungskomponenten der Distribution sind in Rust geschrieben und stehen unter den Lizenzen MIT und Apache 2.0 zur Verfügung. Bottlerocket wird in Amazon ECS-Clustern, VMware und AWS EKS Kubernetes unterstützt und ermöglicht die Erstellung benutzerdefinierter Builds und Varianten, die verschiedene Orchestrierungs- und Runtime-Tools für Container nutzen können.
Die Distribution bietet ein atomar und automatisch aktualisierbares, unteilbares System-Image, das den Linux-Kernel und eine minimale Systemumgebung umfasst, die nur die erforderlichen Komponenten zum Starten von Containern enthält. In der Umgebung kommen der Systemmanager systemd, die Glibc-Bibliothek, das Buildroot-Bausystem, der Bootloader GRUB, der Netzwerk-Configurator wicked, die Runtime für isolierte Container containerd, die Container-Orchestrierungsplattform Kubernetes, der Authenticator aws-iam-authenticator und der Agent von Amazon ECS zum Einsatz.
Container-Orchestrierungswerkzeuge werden in einem separaten Management-Container bereitgestellt, der standardmäßig aktiviert ist und über die API und AWS SSM Agent verwaltet wird. Im Basis-Image fehlt eine Kommandozeilen-Schnittstelle. der Server SSH und interpretierte Sprachen (z. B. kein Python oder Perl) – Administrations- und Debugging-Tools sind in einen separaten Dienstcontainer ausgelagert, der standardmäßig deaktiviert ist.
Ein wesentliches Unterscheidungsmerkmal zu ähnlichen Distributionen wie Fedora CoreOS, CentOS/Red Hat Atomic Host ist der primäre Fokus auf die Bereitstellung maximaler Sicherheit im Hinblick auf die Verstärkung des Schutzes des Systems gegen potenzielle Bedrohungen, die Erschwernis der Ausnutzung von Schwachstellen in Betriebssystemkomponenten sowie die Erhöhung der Isolation von Containern. Container werden mithilfe der integrierten Mechanismen des Linux-Kernels – cgroups, Namespaces und seccomp – erstellt. Für zusätzliche Isolation wird in der Distribution SELinux im Modus 'enforcing' eingesetzt.
Das Root-Verzeichnis wird im Nur-Lese-Modus gemountet, während das Verzeichnis mit den Einstellungen "/etc" in tmpfs gemountet wird und nach einem Neustart den ursprünglichen Zustand wiederherstellt. Direkte Änderungen an Dateien im Verzeichnis "/etc", wie z.B. "/etc/resolv.conf" und "/etc/containerd/config.toml", werden nicht unterstützt – für die dauerhafte Speicherung von Einstellungen sollte die API verwendet oder die Funktionalität in separate Container ausgelagert werden. Für die kryptographische Verifizierung der Integrität des Root-Verzeichnisses wird das dm-verity-Modul eingesetzt, und im Falle eines versuchten Datenmodifikationen auf Blockgerätebene wird das System neu gestartet.
Die meisten Systemkomponenten sind in der Programmiersprache Rust geschrieben, die sicherere Speicherverwaltungsfunktionen bietet, um Schwachstellen wie den Zugriff auf den freigegebenen Speicher, das Dereferenzieren von Nullzeigern und Bufferüberläufe zu vermeiden. Standardmäßig werden die Kompilierungsparameter „—enable-default-pie“ und „—enable-default-ssp“ verwendet, um die Adressraumrandomisierung für ausführbare Dateien (PIE) und den Schutz vor Stacküberläufen durch das Platzieren von Canary-Tags zu aktivieren. Für in C/C++ geschriebene Pakete werden zusätzlich die Flags „-Wall“, „-Werror=format-security“, „-Wp,-D_FORTIFY_SOURCE=2“, „-Wp,-D_GLIBCXX_ASSERTIONS“ und „-fstack-clash-protection“ aktiviert.
In der neuen Version:
- Der Inhalt der Verwaltungs- und Steuercontainer wurde aktualisiert.
- Die Laufzeitumgebung für isolierte Container wurde auf den Branch containerd 1.6.x aktualisiert.
- Es wurde sichergestellt, dass Hintergrundprozesse, die die Funktionsweise von Containern koordinieren, nach Änderungen im Zertifikatsspeicher neu gestartet werden.
- Es wurde die Möglichkeit zur Festlegung von Kernel-Boot-Parametern über den Abschnitt Boot Configuration bereitgestellt.
- Die Ignorierung leerer Blöcke bei der Integritätsprüfung der Root-Partition mithilfe von dm-verity ist aktiviert.
- Es besteht die Möglichkeit einer statischen Bindung von Hostnamen in /etc/hosts.
- Die Generierung von Netzwerkkonfigurationen ist mit dem Tool netdog möglich (Befehl generate-net-config hinzugefügt).
- Neue Varianten des Distributionspakets mit Unterstützung für Kubernetes 1.23 wurden angeboten. Die Startzeit von Pods in Kubernetes wurde durch die Deaktivierung des Modus configMapAndSecretChangeDetectionStrategy verkürzt. Neue Einstellungen für Kubelets wurden hinzugefügt: provider-id und podPidsLimit.
- Eine neue Variante des Distributionspakets 'aws-ecs-1-nvidia' für den Amazon Elastic Container Service (Amazon ECS) wurde mit NVIDIA-Treibern bereitgestellt.
- Unterstützung für Speichergeräte von Microchip Smart Storage und MegaRAID SAS wurde hinzugefügt. Die Unterstützung für Ethernet-Karten mit Broadcom-Chips wurde erweitert.
- Updates für Paketversionen und Abhängigkeiten für die Sprachen Go und Rust sowie für Pakete mit Drittanbietersoftware wurden vorgenommen. Das Bottlerocket SDK wurde auf Version 0.26.0 aktualisiert.
Quelle: opennet.ru
