Wydanie Bottlerocket 1.3, dystrybucji opartej na izolowanych kontenerach

Ukazało się wydanie dystrybucji Linuksa Bottlerocket 1.3.0, opracowanej przy udziale firmy Amazon w celu wydajnego i bezpiecznego uruchamiania izolowanych kontenerów. Narzędzia i komponenty sterujące tej dystrybucji są napisane w języku Rust i rozpowszechniane na licencjach MIT i Apache 2.0. Obsługuje uruchamianie Bottlerocket na klastrach Amazon ECS, VMware i AWS EKS Kubernetes, a także tworzenie niestandardowych kompilacji i wydań, które umożliwiają korzystanie z różnych narzędzi do orkiestracji i środowiska wykonawczego dla kontenerów.

Dystrybucja zapewnia atomowo i automatycznie aktualizowany, niepodzielny obraz systemu, który zawiera jądro Linuksa i minimalne środowisko systemowe, zawierające jedynie komponenty niezbędne do uruchomienia kontenerów. Środowisko obejmuje menedżera systemu systemd, bibliotekę Glibc, narzędzie do budowania Buildroot, program ładujący GRUB, niegodziwy konfigurator sieci, środowisko wykonawcze Containerd dla izolowanych kontenerów, platformę do orkiestracji kontenerów Kubernetes, aws-iam-authenticator i Amazon Agent ECS.

Narzędzia do orkiestracji kontenerów znajdują się w oddzielnym kontenerze zarządzania, który jest domyślnie włączony i zarządzany za pośrednictwem interfejsu API i agenta AWS SSM. W obrazie bazowym brakuje powłoki poleceń, serwera SSH i języków interpretowanych (np. Pythona czy Perla) – narzędzia administracyjne i narzędzia do debugowania umieszczono w osobnym kontenerze usług, który domyślnie jest wyłączony.

Kluczową różnicą w stosunku do podobnych dystrybucji, takich jak Fedora CoreOS, CentOS/Red Hat Atomic Host, jest skupienie się na zapewnieniu maksymalnego bezpieczeństwa w kontekście wzmocnienia ochrony systemu przed możliwymi zagrożeniami, utrudnienia wykorzystania luk w komponentach systemu operacyjnego i zwiększenia izolacji kontenerów . Kontenery tworzone są przy użyciu standardowych mechanizmów jądra Linuksa - cgroups, przestrzeni nazw i seccomp. W celu dodatkowej izolacji dystrybucja wykorzystuje SELinux w trybie „wymuszającym”.

Partycja główna jest montowana w trybie tylko do odczytu, a partycja ustawień /etc jest montowana w tmpfs i przywracana do pierwotnego stanu po ponownym uruchomieniu. Bezpośrednia modyfikacja plików w katalogu /etc, takich jak /etc/resolv.conf i /etc/containerd/config.toml nie jest obsługiwana - aby trwale zapisać ustawienia, należy skorzystać z API lub przenieść funkcjonalność do osobnych kontenerów. Moduł dm-verity służy do kryptograficznej weryfikacji integralności partycji root, a w przypadku wykrycia próby modyfikacji danych na poziomie urządzenia blokowego system uruchamia się ponownie.

Większość komponentów systemu jest napisana w języku Rust, który zapewnia funkcje bezpieczne dla pamięci, aby uniknąć luk w zabezpieczeniach spowodowanych dostępem do pamięci po zwolnieniu, wyłuskaniem wskaźnika zerowego i przepełnieniem bufora. Podczas budowania domyślnie używane są tryby kompilacji „-enable-default-pie” i „-enable-default-ssp”, aby umożliwić randomizację przestrzeni adresowej pliku wykonywalnego (PIE) i ochronę przed przepełnieniem stosu poprzez podstawienie kanaryjskie. Dla pakietów napisanych w języku C/C++ dodatkowo są dostępne flagi „-Wall”, „-Werror=format-security”, „-Wp,-D_FORTIFY_SOURCE=2”, „-Wp,-D_GLIBCXX_ASSERTIONS” i „-fstack-clash”. włączona -ochrona”.

W nowym wydaniu:

  • Naprawiono luki w dockerach i narzędziach kontenerowych runtime (CVE-2021-41089, CVE-2021-41091, CVE-2021-41092, CVE-2021-41103) związane z nieprawidłowym ustawieniem praw dostępu, co umożliwiało nieuprzywilejowanym użytkownikom wyjście poza bazę katalog i uruchamiaj programy zewnętrzne.
  • Do kubelet i pluto dodano obsługę protokołu IPv6.
  • Istnieje możliwość ponownego uruchomienia kontenera po zmianie jego ustawień.
  • Do pakietu eni-max-pods dodano obsługę instancji Amazon EC2 M6i.
  • W Open-vm-tools dodano obsługę filtrów urządzeń w oparciu o zestaw narzędzi Cilium.
  • Dla platformy x86_64 zaimplementowano hybrydowy tryb rozruchu (z obsługą EFI i BIOS).
  • Zaktualizowane wersje pakietów i zależności dla języka Rust.
  • Zakończono wsparcie dla wariantu dystrybucji aws-k8s-1.17 opartego na Kubernetes 1.17. Zalecane jest użycie wersji aws-k8s-1.21 z obsługą Kubernetes 1.21. Warianty k8s korzystają z ustawień cgroup runtime.slice i system.slice.

Źródło: opennet.ru

Dodaj komentarz