
Das Unternehmen Amazon über die endgültige Veröffentlichung — ein spezialisierter Distribution zum Starten von Containern und deren effizienter Verwaltung.
Bottlerocket (übrigens so werden kleine selbstgebaute Raketen mit Rauchpulver genannt) ist nicht das erste Betriebssystem für Container, aber es könnte durchaus weit verbreitet werden, dank der standardmäßigen Integration mit AWS-Diensten. Obwohl das System auf die Cloud von Amazon ausgerichtet ist, ermöglicht der offene Quellcode, es überall zusammenzustellen: lokal auf einem Server, auf einem Raspberry Pi, in jeder konkurrierenden Cloud und sogar in einer Umgebung ohne Container.
Es ist ein durchaus würdiger Ersatz für die Distribution CoreOS, die von Red Hat beerdigt wurde.
Das Amazon-Webdiensteinheit hat bereits Amazon Linux, das kürzlich in der zweiten Version erschienen ist: dies ist eine allgemeine Distribution, die in einem Docker-Container oder mit Linux KVM, Microsoft Hyper-V und VMware ESXi Virtualisierern gestartet werden kann. Es wurde optimiert, um in der AWS-Cloud zu arbeiten, aber mit dem Erscheinen von Bottlerocket wird allen empfohlen, ein Upgrade auf das neue System durchzuführen, das sicherer, moderner und ressourcenschonender ist.
AWS kündigte Bottlerocket an . Es erkannte sofort, dass dies nicht das erste "Linux für Container" ist und erwähnte CoreOS, Rancher OS und Project Atomic als Inspirationsquellen. Die Entwickler schrieben, dass das Betriebssystem das "Ergebnis von Lektionen ist, die wir über lange Zeiträume im Betrieb von Produktionsdiensten im Maßstab von Amazon gelernt haben, und unter Berücksichtigung der Erfahrungen, die wir in den letzten sechs Jahren beim Starten von Containern gemacht haben."
Extrem minimalistisch
Linux ist von allem befreit, was nicht für den Start von Containern erforderlich ist. Ein solches Design verkleinert, laut dem Unternehmen, die Angriffsoberfläche.
Das bedeutet, dass in der Basissystem weniger Pakete installiert werden, was die Unterstützung und Aktualisierung des Betriebssystems vereinfacht und die Wahrscheinlichkeit von Problemen durch Abhängigkeiten verringert sowie den Ressourcenverbrauch senkt. Im Prinzip läuft hier alles innerhalb einzelner Container, während das Basissystem fast nackig ist.
Amazon hat auch alle Shells und Interpreter entfernt, um das Risiko ihrer Nutzung oder einen versehentlichen Privilegienverlust der Benutzer auszuschließen. Im Basis-Image fehlt aus Gründen des Minimalismus und der Sicherheit eine Kommandozeile, ein SSH-Server und interpretierte Sprachen wie Python. Administratorwerkzeuge werden in einen separaten Dienstcontainer ausgelagert, der standardmäßig deaktiviert ist.
Die Systemverwaltung erfolgt auf zwei Arten: über API und Orchestrierung.
Statt eines Paketmanagers, der einzelne Softwarekomponenten aktualisiert, lädt Bottlerocket das vollständige Image des Dateisystems herunter und startet neu. Bei einem Bootfehler wird automatisch zurückgerollt, und ein Fehler bei der Arbeitslast kann manuell einen Rollback auslösen (Befehl über API).
Framework (The Update Framework) lädt Updates basierend auf Images in alternative oder "unmontierte" Partitionen. Für das System stehen zwei Partitionen zur Verfügung, von denen eine das aktive System enthält, während das Update auf die zweite kopiert wird. Dabei wird die Root-Partition im Nur-Lese-Modus gemountet, während die Partition /etc im RAM-Dateisystem gemountet wird und stellt den Ursprungszustand nach einem Neustart wieder her. Direkte Änderungen an den Konfigurationsdateien in /etc werden nicht unterstützt: Um die Einstellungen zu speichern, sollten API oder separate Container genutzt werden.

Das Aktualisierungsschema über API
Sicherheit
Container werden mit den nativen Mechanismen des Linux-Kernels — cgroups, Namespaces und seccomp — erstellt, während für zusätzliche Isolation ein System zur erzwungenen Zugangskontrolle verwendet wird, das im "enforcing"-Modus arbeitet.
Standardmäßig sind Richtlinien zur Ressourcenteilung zwischen Containern und Kernel aktiviert. Binärdateien sind durch Flags geschützt, sodass Benutzer oder Programme sie nicht ausführen können. Und wenn jemand Zugriff auf das Dateisystem erhalten hat, bietet Bottlerocket ein Werkzeug zur Überprüfung und Nachverfolgung aller vorgenommenen Änderungen.
Der "Secure Boot"-Modus wird über die Funktion device-mapper-verity implementiert (), die die Integrität der Root-Partition beim Booten überprüft. AWS beschreibt dm-verity als „eine Linux-Kernel-Funktion zur Gewährleistung der Integrität, um die Ausführung von Schadsoftware im Betriebssystem zu verhindern, wie beispielsweise das Überschreiben der ursprünglichen Systemsoftware“.
Es gibt auch einen Filter im System (erweitertes BPF, ), der es ermöglicht, Kernelmodule durch sicherere BPF-Programme für Low-Level-Systemoperationen zu ersetzen.
Ausführungsmodell
Benutzerspezifiziert
Kompilation
Sicherheit
Fehlermodus
Zugriff auf Ressourcen
Benutzer
Aufgabe
ja
jede
Benutzerrechte
Ausführungsunterbrechung
Systemaufruf, Fehler
Kern
Aufgabe
nein
statisch
nein
Kernel-Panik
direkt
BPF
Ereignis
ja
JIT, CO-RE
Verifizierung, JIT
Fehlermeldung
eingeschränkte Helfer
Der Unterschied zwischen BPF und normalem Benutzer- oder Kernelcode,
AWS erklärte, dass Bottlerocket „ein Betriebsmodell implementiert, das die Sicherheit weiter erhöht, indem es eine Verbindung zu Produktionsservern mit Administratorrechten verhindert“ und „sich für große verteilte Systeme eignet, in denen die Kontrolle über jeden einzelnen Host eingeschränkt ist“.
Für Systemadministratoren gibt es einen Admin-Container. AWS glaubt jedoch nicht, dass Administratoren häufig innerhalb von Bottlerocket arbeiten müssen: „Der Zugang zu einer einzelnen Bottlerocket-Instanz ist für seltene Operationen gedacht: erweiterte Fehlerbehebung und Debugging“, — die Entwickler.
Die Sprache Rust
Das Betriebssystem-Toolkit über dem Kernel ist hauptsächlich in Rust geschrieben. Diese Sprache verringert von Natur aus , sowie .
Bei der Standardkompilierung werden die Flags angewendet --enable-default-pie und --enable-default-ssp um die Randomisierung des Adressraums ausführbarer Dateien zu aktivieren (, PIE) und um Stauüberläufe zu schützen.
Für C/C++-Pakete werden zusätzlich die Flags -Wall, -Werror=format-security, -Wp,-D_FORTIFY_SOURCE=2, -Wp,-D_GLIBCXX_ASSERTIONS und -fstack-clash-protection.
Neben Rust und C/C++ sind einige Pakete in Go geschrieben.
Integration mit AWS-Diensten
Der Unterschied zu ähnlichen container-basierten Betriebssystemen liegt darin, dass Amazon Bottlerocket für die Nutzung auf AWS und die Integration mit anderen AWS-Diensten optimiert hat.
Der beliebteste Container-Orchestrator ist Kubernetes, weshalb AWS die Integration mit ihrem eigenen Enterprise Kubernetes Service (EKS) eingeführt hat. Die Orchestrierungswerkzeuge sind in einem separaten Steuercontainer enthalten. , der standardmäßig aktiviert ist und über die API sowie den AWS SSM Agent verwaltet wird.
Es wird interessant sein zu beobachten, ob Bottlerocket erfolgreich sein wird, insbesondere angesichts des Scheiterns einiger ähnlicher Initiativen in der Vergangenheit. Zum Beispiel war PhotonOS von Vmware unbeliebt, und RedHat kaufte CoreOS und , das als Pionier auf diesem Gebiet galt.
Die Integration von Bottlerocket in die AWS-Dienste macht dieses System einzigartig. Möglicherweise ist dies der Hauptgrund, warum einige Benutzer Bottlerocket anderen Distributionen wie CoreOS oder Alpine vorziehen könnten. Das System wurde ursprünglich für die Arbeit mit EKS und ECS entwickelt, aber um es zu wiederholen, das ist nicht zwingend erforderlich. Erstens kann Bottlerocket auch als gehostete Lösung genutzt werden. Zweitens behalten EKS- und ECS-Benutzer weiterhin die Wahl des Betriebssystems.
Der Quellcode von Bottlerocket ist unter der Lizenz Apache 2.0 auf GitHub veröffentlicht. Die Entwickler reagieren bereits .
Als Werbung
VDSina bietet . Es ist möglich, jedes Betriebssystem zu installieren, auch aus eigenem Image. Jeder Server ist mit einem Internetkanal von 500 Megabit verbunden und kostenlos gegen DDoS-Angriffe geschützt!
Quelle: habr.com
