Opublikowano wydanie dystrybucji Linuksa Bottlerocket 1.7.0, rozwijanej z udziałem firmy Amazon, dla efektywnego i bezpiecznego uruchamiania izolowanych kontenerów. Narzędzia i komponenty zarządzające dystrybucji są napisane w języku Rust i są rozpowszechniane na licencjach MIT oraz Apache 2.0. Obsługiwane jest uruchamianie Bottlerocket w klastrach Amazon ECS, VMware i AWS EKS Kubernetes, a także tworzenie dowolnych buildów i edycji, które umożliwiają użycie różnych narzędzi orkiestracji oraz runtime dla kontenerów.
Dystrybucja zapewnia atomowy i automatycznie aktualizowany nierozdzielny obraz systemowy, który obejmuje jądro Linux i minimalne środowisko systemowe, zawierające tylko komponenty niezbędne do uruchamiania kontenerów. W środowisku używany jest menedżer systemowy systemd, biblioteka Glibc, narzędzie do budowy Buildroot, bootloader GRUB, konfigurator sieci wicked, runtime dla izolowanych kontenerów containerd, platforma orkiestracyjna Kubernetes, uwierzytelniacz aws-iam-authenticator i agent Amazon ECS.
Narzędzia do orkiestracji kontenerów są dostarczane w osobnym kontenerze zarządzającym, który jest włączony domyślnie i zarządzany przez API oraz AWS SSM Agent. W podstawowym obrazie brakuje powłoki poleceń, serwer SSH oraz języki interpretowane (np. brak Pythona lub Perla) — narzędzia administracyjne i debugujące zostały przeniesione do oddzielnego kontenera pomocniczego, który domyślnie jest wyłączony.
Kluczową różnicą w porównaniu do podobnych dystrybucji, takich jak Fedora CoreOS, CentOS/Red Hat Atomic Host, jest pierwotne skoncentrowanie się na zapewnieniu maksymalnego bezpieczeństwa w kontekście wzmacniania ochrony systemu przed potencjalnymi zagrożeniami, utrudnienia wykorzystania luk w komponentach systemu operacyjnego oraz zwiększenia izolacji kontenerów. Kontenery są tworzone przy użyciu standardowych mechanizmów jądra Linuksa — cgroups, przestrzeni nazw oraz seccomp. Dla dodatkowej izolacji w dystrybucji stosowane jest SELinux w trybie „enforcing.”
Główny system plików jest montowany w trybie tylko do odczytu, a katalog z ustawieniami /etc jest montowany w tmpfs i przywraca pierwotny stan po restarcie. Bezpośrednie zmiany plików w katalogu /etc, takich jak /etc/resolv.conf i /etc/containerd/config.toml, nie są wspierane — aby trwale zachować ustawienia, należy używać API lub przenieść funkcjonalność do oddzielnych kontenerów. Do kryptograficznej weryfikacji integralności głównego systemu plików używany jest moduł dm-verity, a w przypadku wykrycia próby modyfikacji danych na poziomie bloku system zostanie zrestartowany.
Większość komponentów systemowych została napisana w języku Rust, który zapewnia narzędzia do bezpiecznej pracy z pamięcią, umożliwiając uniknięcie podatności spowodowanych dostępem do obszaru pamięci po jego zwolnieniu, dereferencjonowaniem wskaźników zerowych oraz przekroczeniem granic bufora. Podczas domyślnej kompilacji stosuje się tryby kompilacji „—enable-default-pie” oraz „—enable-default-ssp” w celu włączenia randomizacji przestrzeni adresowej plików wykonywalnych (PIE) oraz ochrony przed przepełnieniem stosu poprzez podstawienie znaczników kanarkowych. Dla pakietów napisanych w języku C/C++ dodatkowo włączane są flagi „-Wall”, „-Werror=format-security”, „-Wp,-D_FORTIFY_SOURCE=2”, „-Wp,-D_GLIBCXX_ASSERTIONS” oraz „-fstack-clash-protection”.
W nowym wydaniu:
- Podczas instalacji pakietów RPM zapewniono generowanie listy programów w formacie JSON i montowanie jej w kontenerze host jako plik /var/lib/bottlerocket/inventory/application.json w celu uzyskania informacji o dostępnych pakietach.
- Zaktualizowano kontenery „admin” i „control”.
- Zaktualizowano wersje pakietów i zależności dla języków Go i Rust.
- Zaktualizowano wersje pakietów zewnętrznych.
- Rozwiązano problemy z konfiguracją tmpfilesd dla kmod-5.10-nvidia.
- Podczas instalacji tuftool zapewniono powiązanie wersji zależności.
Źródło: opennet.ru
