Amazon veröffentlicht Bottlerocket 1.0.0, eine Linux-Distribution, die auf isolierten Containern basiert

Amazon-Unternehmen präsentiert erste bedeutende Veröffentlichung einer dedizierten Linux-Distribution Flaschenrakete 1.0.0, entwickelt, um isolierte Container effizient und sicher zu betreiben. Die Tools und Steuerungskomponenten der Distribution sind in Rust geschrieben und Ausbreitung unter MIT- und Apache 2.0-Lizenzen. Das Projekt wird auf GitHub entwickelt und steht Community-Mitgliedern zur Teilnahme zur Verfügung. Das Systembereitstellungsimage wird für x86_64- und Aarch64-Architekturen generiert. Das Betriebssystem ist für die Ausführung auf Amazon ECS- und AWS EKS-Kubernetes-Clustern angepasst. Sind vorhanden Tools zum Erstellen eigener Assemblys und Editionen, die andere Orchestrierungstools, Kernel und Laufzeit für Container verwenden können.

Die Distribution stellt den Linux-Kernel und eine minimale Systemumgebung bereit, die nur die Komponenten enthält, die zum Ausführen von Containern erforderlich sind. Zu den am Projekt beteiligten Paketen gehören der Systemmanager systemd, die Glibc-Bibliothek und die Assembler-Tools
Buildroot, GRUB-Bootloader, Netzwerkkonfigurator böse, Laufzeit für isolierte Container Containerd, Kubernetes-Container-Orchestrierungsplattform, aws-iam-authenticator und Amazon ECS-Agent.

Die Verteilung wird atomar aktualisiert und in Form eines unteilbaren Systemabbilds geliefert. Dem System werden zwei Festplattenpartitionen zugewiesen, von denen eine das aktive System enthält und das Update auf die zweite kopiert wird. Nach der Bereitstellung des Updates wird die zweite Partition aktiv und in der ersten wird bis zum Eintreffen des nächsten Updates die vorherige Version des Systems gespeichert, auf die Sie bei Problemen zurücksetzen können. Updates werden automatisch und ohne Eingreifen des Administrators installiert.

Der Hauptunterschied zu ähnlichen Distributionen wie Fedora CoreOS, CentOS/Red Hat Atomic Host ist der primäre Fokus auf die Bereitstellung höchste Sicherheit im Zusammenhang mit der Stärkung des Systemschutzes vor möglichen Bedrohungen, der Erschwerung der Ausnutzung von Schwachstellen in Betriebssystemkomponenten und der Erhöhung der Isolation von Containern. Container werden mit Standard-Linux-Kernel-Mechanismen erstellt – cgroups, Namespaces und seccomp. Für zusätzliche Isolation verwendet die Distribution SELinux im „Enforcing“-Modus und das Modul dient der kryptografischen Überprüfung der Integrität der Root-Partition dm-verity. Wenn ein Versuch erkannt wird, Daten auf Blockgeräteebene zu ändern, wird das System neu gestartet.

Die Root-Partition wird schreibgeschützt gemountet, und die /etc-Einstellungspartition wird in tmpfs gemountet und nach einem Neustart in ihren ursprünglichen Zustand zurückversetzt. Die direkte Änderung von Dateien im Verzeichnis /etc, wie z. B. /etc/resolv.conf und /etc/containerd/config.toml, wird nicht unterstützt. Um Einstellungen dauerhaft zu speichern, müssen Sie die API verwenden oder die Funktionalität in separate Container verschieben.

Die meisten Systemkomponenten sind in Rust geschrieben, das speichersichere Funktionen bietet, um Schwachstellen zu vermeiden, die durch After-Free-Speicherzugriffe, Nullzeiger-Dereferenzierungen und Pufferüberläufe verursacht werden. Beim Erstellen werden standardmäßig die Kompilierungsmodi „--enable-default-pie“ und „--enable-default-ssp“ verwendet, um die Randomisierung des Adressraums ausführbarer Dateien zu ermöglichen (KUCHEN) und Stapelüberlaufschutz durch Canary-Substitution.
Für in C/C++ geschriebene Pakete sind zusätzliche Flags enthalten
„-Wall“, „-Werror=format-security“, „-Wp,-D_FORTIFY_SOURCE=2“, „-Wp,-D_GLIBCXX_ASSERTIONS“ und „-fstack-clash-protection“.

Container-Orchestrierungstools werden separat bereitgestellt Kontrollcontainer, die standardmäßig aktiviert ist und über gesteuert wird API und AWS SSM-Agent. Dem Basis-Image fehlen eine Befehlsshell, ein SSH-Server und interpretierte Sprachen (z. B. kein Python oder Perl) – Verwaltungstools und Debugging-Tools befinden sich darin separater Servicecontainer, die standardmäßig deaktiviert ist.

Source: opennet.ru

Kommentar hinzufügen