Wydanie samodzielnego systemu pakietów Flatpak 1.12.0

Opublikowano nową stabilną gałąź zestawu narzędzi Flatpak 1.12, która zapewnia system do budowania samodzielnych pakietów, które nie są powiązane z konkretnymi dystrybucjami Linuksa i działają w specjalnym kontenerze izolującym aplikację od reszty systemu. Wsparcie dla uruchamiania pakietów Flatpak jest zapewnione dla Arch Linux, CentOS, Debian, Fedora, Gentoo, Mageia, Linux Mint, Alt Linux i Ubuntu. Pakiety Flatpak znajdują się w repozytorium Fedory i są obsługiwane przez natywnego menedżera aplikacji GNOME.

Kluczowe innowacje w gałęzi Flatpak 1.12:

  • Poprawione zarządzanie zagnieżdżonymi środowiskami piaskownicy używanymi w pakiecie flatpak z klientem usługi dostarczania gier Steam. W zagnieżdżonych piaskownicach dozwolone jest tworzenie odrębnych hierarchii katalogów /usr i /app, które służą w Steamie do uruchamiania gier w osobnym kontenerze z własną partycją /usr, odizolowanym od środowiska z klientem Steam.
  • Wszystkie instancje pakietów z tym samym identyfikatorem aplikacji (app-ID) współdzielą katalogi /tmp i $XDG_RUNTIME_DIR. Opcjonalnie, używając flagi „--allow=per-app-dev-shm”, możesz włączyć korzystanie z katalogu współdzielonego /dev/shm.
  • Ulepszona obsługa aplikacji tekstowego interfejsu użytkownika (TUI), takich jak gdb.
  • Do narzędzia build-update-repo dodano szybszą implementację polecenia „ostree prune”, zoptymalizowanego do pracy z repozytoriami w trybie archiwum.
  • Naprawiono lukę CVE-2021-41133 w implementacji mechanizmu portalu, związaną z brakiem blokowania nowych wywołań systemowych związanych z montowaniem partycji w regułach seccomp. Luka umożliwiła aplikacji utworzenie zagnieżdżonej piaskownicy w celu ominięcia mechanizmów weryfikacji „portalowej”, które służą do organizacji dostępu do zasobów poza kontenerem.

    W rezultacie osoba atakująca, wykonując wywołania systemowe związane z montażem, może ominąć mechanizm izolacji piaskownicy i uzyskać pełny dostęp do zawartości środowiska hosta. Lukę można wykorzystać jedynie w pakietach zapewniających aplikacjom bezpośredni dostęp do gniazd AF_UNIX, takich jak te używane przez Wayland, Pipewire i pipewire-pulse. W wersji 1.12.0 luka nie została całkowicie wyeliminowana, więc tuż po niej wypuszczono aktualizację 1.12.1.

Przypomnijmy, że Flatpak pozwala twórcom aplikacji uprościć dystrybucję swoich programów, które nie znajdują się w standardowych repozytoriach dystrybucji, poprzez przygotowanie jednego uniwersalnego kontenera bez tworzenia osobnych asemblerów dla każdej dystrybucji. Użytkownikom dbającym o bezpieczeństwo Flatpak umożliwia uruchomienie podejrzanej aplikacji w kontenerze, zapewniając dostęp tylko do funkcji sieciowych i plików użytkownika powiązanych z aplikacją. Użytkownikom zainteresowanym nowościami Flatpak umożliwia instalację najnowszych wersji testowych i stabilnych aplikacji bez konieczności wprowadzania zmian w systemie. Na przykład pakiety Flatpak są tworzone dla LibreOffice, Midori, GIMP, Inkscape, Kdenlive, Steam, 0 AD, Visual Studio Code, VLC, Slack, Skype, Telegram Desktop, Android Studio itp.

Aby zmniejszyć rozmiar pakietu, zawiera on tylko zależności specyficzne dla aplikacji, a podstawowe biblioteki systemowe i graficzne (biblioteki GTK, Qt, GNOME i KDE itp.) zaprojektowano jako standardowe środowiska wykonawcze wtyczek. Kluczowa różnica między Flatpakiem a Snapem polega na tym, że Snap wykorzystuje komponenty głównego środowiska systemowego i izolację w oparciu o filtrowanie wywołań systemowych, podczas gdy Flatpak tworzy kontener oddzielony od systemu i działa z dużymi zestawami wykonawczymi, udostępniając nie pakiety jako zależności, ale standardowe środowiska systemowe (na przykład wszystkie biblioteki niezbędne do działania programów GNOME lub KDE).

Oprócz standardowego środowiska systemowego (runtime), instalowanego poprzez specjalne repozytorium, dostarczane są dodatkowe zależności (pakiet) wymagane do działania aplikacji. W sumie runtime i package stanowią wypełnienie kontenera, pomimo tego, że runtime jest instalowane oddzielnie i powiązane z kilkoma kontenerami jednocześnie, co pozwala uniknąć duplikowania plików systemowych typowych dla kontenerów. W jednym systemie może być zainstalowanych kilka różnych środowisk wykonawczych (GNOME, KDE) lub kilka wersji tego samego środowiska wykonawczego (GNOME 3.40, GNOME 3.42). Kontener z aplikacją jako zależnością używa powiązania tylko z określonym środowiskiem wykonawczym, bez uwzględnienia poszczególnych pakietów tworzących środowisko wykonawcze. Wszystkie brakujące elementy są spakowane bezpośrednio z aplikacją. Po utworzeniu kontenera zawartość środowiska wykonawczego jest montowana jako partycja /usr, a pakiet jest montowany w katalogu /app.

Kontenery wykonawcze i aplikacyjne zbudowane są przy użyciu technologii OSTree, w której obraz jest aktualizowany atomowo z repozytorium podobnego do Gita, co pozwala na zastosowanie metod kontroli wersji do komponentów dystrybucji (na przykład można szybko przywrócić system do Poprzedni stan). Pakiety RPM są tłumaczone do repozytorium OSTree przy użyciu specjalnej warstwy RPM-ostree. Oddzielna instalacja i aktualizacja pakietów w obrębie środowiska pracy nie jest obsługiwana; system jest aktualizowany nie na poziomie poszczególnych komponentów, ale jako całości, atomowo zmieniając swój stan. Zapewnia narzędzia do stopniowego stosowania aktualizacji, eliminując potrzebę całkowitego zastępowania obrazu przy każdej aktualizacji.

Wygenerowane izolowane środowisko jest całkowicie niezależne od używanej dystrybucji i przy odpowiednich ustawieniach pakietu nie ma dostępu do plików i procesów użytkownika ani systemu głównego, nie ma bezpośredniego dostępu do sprzętu, z wyjątkiem wyjścia poprzez DRI, i wywołania do podsystemu sieciowego. Organizacja wyjścia graficznego i wejścia jest realizowana przy użyciu protokołu Wayland lub poprzez przekazywanie gniazd X11. Interakcja ze środowiskiem zewnętrznym opiera się na systemie przesyłania wiadomości DBus i specjalnym API Portals.

Do izolacji wykorzystywana jest warstwa Bubblewrap oraz tradycyjne linuksowe technologie wirtualizacji kontenerów, oparte na wykorzystaniu grup cgroup, przestrzeni nazw, Seccomp i SELinux. PulseAudio służy do odtwarzania dźwięku. W takim przypadku można wyłączyć izolację, z której korzystają twórcy wielu popularnych pakietów, aby uzyskać pełny dostęp do systemu plików i wszystkich urządzeń w systemie. Na przykład GIMP, VSCodium, PyCharm, Octave, Inkscape, Audacity i VLC mają ograniczony tryb izolacji, który pozostawia pełny dostęp do katalogu domowego.

Jeśli pakiety z dostępem do katalogu domowego zostaną naruszone, pomimo obecności etykiety „sandboxed” w opisie pakietu, atakujący musi jedynie zmienić plik ~/.bashrc, aby wykonać swój kod. Osobną kwestią jest kontrola zmian w pakietach i zaufanie do twórców pakietów, którzy często nie są związani z głównym projektem czy dystrybucjami.

Źródło: opennet.ru

Dodaj komentarz