Nach zweieinhalb Jahren Entwicklung wurde der neue stabile Branch des Flatpak-Tools 1.16 veröffentlicht, das ein System zum Erstellen selbstständiger Pakete bereitstellt, die nicht an bestimmte Linux-Distributionen gebunden sind und in einem speziellen Container ausgeführt werden, der die Anwendung vom Rest des Systems isoliert. Die Ausführung von Flatpak-Paketen wird für Fedora, CentOS, Debian, Arch Linux, Gentoo, Linux Mint, Alt Linux und Ubuntu unterstützt. Flatpak-Pakete sind im Repository von Fedora enthalten und werden in den standardmäßigen Anwendungsmanagement-Programmen GNOME und KDE unterstützt.
Wichtige Neuerungen im Branch Flatpak 1.16:
- Es wurde der Übergang zur Verwendung des Build-Systems Meson vollzogen. Die Unterstützung für den Build mit dem Autotools-Toolset wurde eingestellt. Für den Build von Flatpak ist jetzt die Installation von Python in der Version 3.5 oder höher im System erforderlich.
- Es wurde der gemeinsame Zugriff auf den Socket gssproxy implementiert, der die Authentifizierung über Kerberos in Anwendungen ermöglicht, die im Sandbox-Isolationsmodus ausgeführt werden.
- Bei der Erstellung von Sockets für Wayland wird die Erweiterung security-context verwendet, über die der Kompositorman Server Anwendungen identifizieren und einschränken kann, die im Sandbox-Isolationsmodus ausgeführt werden. Die Option „—socket=inherit-wayland-socket“ wurde hinzugefügt, um einen bestehenden Wayland-Socket zu übernehmen.
- Nach der Installation oder dem Update von Anwendungen wird die Konfiguration des Sitzungsbusses D-Bus automatisch neu geladen, um neue von den Anwendungen exportierte D-Bus-Dienste zu übernehmen.
- Distributionen haben die Möglichkeit, Repositories mit Flatpak-Paketen unter dem Verzeichnis „/usr/share/flatpak/remotes.d“ zusätzlich zu „/etc/flatpak/remotes.d“ zu definieren.
- Es wurde an der Aufteilung großer Quellcodedateien in kleinere Module gearbeitet.
- Die Option „—device=input“ wurde hinzugefügt, um den Zugriff auf Eingabegeräte über /dev/input zu ermöglichen.
- Zur Isolierung von Anwendungen wird der neue Branch des Tools bubblewrap 0.11 verwendet. In Distributionen, die Flatpak mit der systemweiten bwrap-Binärdatei erstellen, ist mindestens Version bubblewrap 0.11 erforderlich. Der Schutz gegen die Erstellung von verschachtelten Benutzer-Namespaces in Sandbox-Umgebungen wurde verstärkt.
- Die Konfiguration zusätzlicher Sprachen wurde vereinfacht. Es wird sichergestellt, dass die Sprachen basierend auf den vom DBus-Dienst AccountsService bereitgestellten Benutzerinformationen erkannt werden.
- Anwendungen, die eine eingebettete Sandbox-Isolation nutzen, beispielsweise basierend auf der WebKit-Engine, dürfen das AT-SPI-Protokoll zur Interaktion mit Screenreadern verwenden. Eine Option „flatpak run —a11y-own-name“ wurde hinzugefügt, um den Bus auszuwählen, über den auf Hilfsmittel für Menschen mit Behinderungen zugegriffen wird.
- Bei Ausführung des Befehls „flatpak run -vv “ wird die Anzeige aller anwendbaren Sandbox-Isolationsparameter sichergestellt.
- Die Option „—device=usb“ wurde hinzugefügt, sowie die Parameter „—usb“ und „—no-usb“ zur Steuerung des Zugangs von Anwendungen zu USB-Geräten.
- Unterstützung für das KCompletion-Framework wurde hinzugefügt, das zur automatischen Vervollständigung von Suchbegriffen in KDE verwendet wird.
- Umgebungsvariablen „FLATPAK_DATA_DIR“ und „FLATPAK_DOWNLOAD_TMPDIR“ wurden hinzugefügt, um die Verzeichnisse für Daten ( /usr/share/flatpak) und temporär heruntergeladene Dateien ( /var/tmp) zu überschreiben.
- Die Ausgabe von Escape-Sequenzen zur Anzeige des Fortschritts von Operationen in Terminalemulatoren wurde hinzugefügt.
Es sei daran erinnert, dass Flatpak die Verbreitung von Programmen vereinfacht, die nicht in den regulären Repositories von Distributionen enthalten sind, indem es einen einzigen universellen Container vorbereitet, der Entwicklern die Notwendigkeit erspart, separate Builds für jede Distribution zu erstellen. Benutzern, die auf Sicherheit Wert legen, bietet Flatpak die Möglichkeit, eine anstößige Anwendung in einem Container auszuführen und nur selektiven Zugriff auf erforderliche Netzwerkfunktionen und Benutzerdaten zu gewähren. Benutzern, die an Neuerungen interessiert sind, ermöglicht Flatpak die Installation der neuesten Test- und stabilen Versionen von Anwendungen, ohne Änderungen an ihrem System vornehmen zu müssen. Beispielsweise werden Flatpak-Pakete für LibreOffice, GIMP, Inkscape, Kdenlive, Steam, 0 A.D., Visual Studio Code, VLC, Slack, Telegram Desktop, Android Studio usw. erstellt.
Um die Größe zu reduzieren, werden nur anwendungsspezifische Abhängigkeiten in das Paket einbezogen. Grundlegende System- und Grafikbibliotheken (GTK, Qt, GNOME- und KDE-Bibliotheken usw.) werden als Plug-in-Standard-Runtime-Umgebungen bereitgestellt. Der entscheidende Unterschied zwischen Flatpak und Snap besteht darin, dass Snap Komponenten der Hauptsystemumgebung und Isolation auf Basis von Systemaufruf-Filtern verwendet, während Flatpak einen vom System getrennten Container erstellt und große Runtime-Sets verwendet, die als Abhängigkeiten keine Pakete, sondern Standard-Systemumgebungen bereitstellen (z. B. alle Bibliotheken, die für die Ausführung von GNOME- oder KDE-Anwendungen erforderlich sind).
Neben der Standard-Systemumgebung (Runtime), die über ein spezielles Repository installiert wird, werden zusätzliche Abhängigkeiten (Bundle) bereitgestellt, die für die Ausführung der Anwendung erforderlich sind. Zusammen bilden «Runtime» und «Bundle» die Inhalte des Containers, wobei «Runtime» separat installiert und mehreren Containern zugeordnet wird, was die doppelte Speicherung gemeinsamer Systemdateien für die Container überflüssig macht.
In einem System können mehrere unterschiedliche „runtime“ (GNOME, KDE) oder mehrere Versionen einer „runtime“ (GNOME 46, GNOME 47) installiert sein. Der Container mit der Anwendung als Abhängigkeit verwendet eine Bindung nur an eine bestimmte „runtime“, ohne dass separate Pakete, die die gewählte „runtime“ bilden, berücksichtigt werden. Alle fehlenden Elemente werden direkt zusammen mit der Anwendung verpackt. Bei der Erstellung des Containers wird der Inhalt der „runtime“ als Verzeichnis /usr und das „bundle“ in das Verzeichnis /app eingebunden.
Die Zusammensetzung der „Runtime“ und der Anwendungscontainer erfolgt mit der Technologie OSTree, bei der das Abbild atomar aus einem Git-ähnlichen Repository aktualisiert wird, das es ermöglicht, Versionskontrollmethoden auf die Komponenten der Distribution anzuwenden (zum Beispiel kann das System schnell auf einen früheren Zustand zurückgesetzt werden). RPM-Pakete werden über eine Schicht rpm-ostree in das OSTree-Repository überführt.
Die selektive Installation und Aktualisierung von Paketen im Arbeitsumfeld wird nicht unterstützt — das System wird nicht auf der Ebene einzelner Komponenten, sondern vollständig aktualisiert, indem es atomar seinen Zustand ändert. Es stehen Mittel zur Verfügung, um inkrementelle Updates anzuwenden, die eine vollständige Ersetzung des Abbilds bei jedem Update überflüssig machen.
Die geschaffene isolierte Umgebung ist völlig unabhängig von der verwendeten Distribution und hat bei ordnungsgemäßer Konfiguration des Pakets keinen Zugriff auf die Dateien und Prozesse des Benutzers oder des Hauptsystems. Sie kann auch nicht direkt auf die Hardware zugreifen, mit Ausnahme der Ausgabe über DRI. Die Grafik-Ausgabe und die Eingangsorganisation werden durch das Wayland-Protokoll oder durch das Durchleiten des X11-Sockets realisiert. Die Interaktion mit der externen Umgebung erfolgt über das DBus-Nachrichtensystem und eine spezielle API namens Portals.
Zur Isolierung wird die Schicht Bubblewrap sowie traditionelle Container-Virtualisierungstechnologien in Linux verwendet, die auf cgroups, Namespaces, Seccomp und SELinux basieren. Für die Audioausgabe wird PulseAudio oder PipeWire eingesetzt. Bei der Erstellung eines Pakets kann die Isolierung deaktiviert werden, was viele Entwickler beliebter Pakete ausnutzen, um vollständigen Zugriff auf das Dateisystem und alle Geräte im System zu erhalten.
Beispielsweise werden Pakete wie GIMP, VSCodium, PyCharm, Octave, Inkscape, Audacity und VLC mit einem eingeschränkten Isolationsmodus geliefert, der vollen Zugriff auf das Home-Verzeichnis lässt. Im Falle einer Kompromittierung von Paketen mit Zugriff auf das Home-Verzeichnis reicht es für einen Angreifer, um seinen Code auszuführen, das Datei ~/.bashrc zu ändern, obwohl im Paketbeschreibungstext das Label „sandboxed“ vermerkt ist. Ein separates Thema ist die Kontrolle über die Änderung von Paketen und das Vertrauen in die Paketbauer, die oft nicht mit dem Hauptprojekt oder den Distributionen verbunden sind.
Quelle: opennet.ru
