Nach zweieinhalb Jahren Entwicklung wurde der neue stabile Branch des Flatpak-Tools 1.16 veröffentlicht, das ein System zur Erstellung selbstständiger Pakete bietet, die nicht an bestimmte Linux-Distributionen gebunden sind und in einem speziellen Container ausgeführt werden, der die Anwendung von der restlichen Systemumgebung 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 Fedora-Repository enthalten und werden von den Standard-Anwendungsverwaltungsprogrammen GNOME und KDE unterstützt.
Die wichtigsten Neuerungen im Branch Flatpak 1.16:
- Der Übergang zur Verwendung des Build-Systems Meson wurde vollzogen. Die Unterstützung für den Aufbau mit dem Autotools-Toolset wurde eingestellt. Für den Build von Flatpak wird jetzt mindestens Python in der Version 3.5 benötigt.
- Der gemeinsame Zugriff auf den gssproxy-Socket wurde implementiert, der eine Authentifizierung über Kerberos in Anwendungen ermöglicht, die im Sandbox-Isolationsmodus gestartet werden.
- Bei der Erstellung des Sockets für Wayland wurde die Erweiterung security-context verwendet, über die der Composite- der Server kann Anwendungen identifizieren und einschränken, die im Sandbox-Isolationsmodus ausgeführt werden. Eine Option „—socket=inherit-wayland-socket“ wurde hinzugefügt, um einen vorhandenen Socket für Wayland zu erben.
- Nach der Installation oder Aktualisierung von Anwendungen wird die Konfiguration der D-Bus-Sitzungsbus automatisch neu geladen, um neue von Anwendungen exportierte D-Bus-Services zu erfassen.
- Distributionen haben die Möglichkeit, Repositories mit Flatpak-Paketen zu definieren, indem sie das Verzeichnis „/usr/share/flatpak/remotes.d“ zusätzlich zu „/etc/flatpak/remotes.d“ verwenden.
- Es wurden Arbeiten zur Aufteilung großer Dateien mit Quellcode in kleinere Module durchgeführt.
- Eine Option „—device=input“ wurde hinzugefügt, um auf Eingabegeräte über /dev/input zuzugreifen.
- Für die Isolierung von Anwendungen wird ein neuer Branch des Bubblewrap-Tools in Version 0.11 verwendet. In Distributionen, die Flatpak mit der Systemausführungsdatei bwrap zusammenstellen, ist mindestens die Version Bubblewrap 0.11 erforderlich. Der Schutz gegen die Erstellung von verschachtelten Benutzer-ID-Räumen (user namespace) in Sandbox-Umgebungen wurde verstärkt.
- Die Einrichtung zusätzlicher Sprachen wurde vereinfacht. Die Sprachen werden basierend auf den von DBus-Diensten von AccountsService bereitgestellten Benutzerinformationen erkannt.
- Anwendungen, die eine eingehende Sandbox-Isolierung verwenden, 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 Barrierefreiheitsmittel zugegriffen wird.
- Bei der Ausführung des Befehls «flatpak run -vv » werden alle anwendbaren Sandbox-Isolierungsparameter angezeigt.
- Die Option «—device=usb» sowie die Parameter «—usb» und «—no-usb» wurden hinzugefügt, um den Zugriff der Anwendung auf USB-Geräte zu steuern.
- Unterstützung für das KCompletion-Framework hinzugefügt, das zur automatischen Vervollständigung von Suchbegriffen in KDE verwendet wird.
- Die Umgebungsvariablen «FLATPAK_DATA_DIR» und «FLATPAK_DOWNLOAD_TMPDIR» wurden hinzugefügt, um die Datenverzeichnisse (/usr/share/flatpak) und die temporären Download-Dateikataloge (/var/tmp) zu überschreiben.
- Die Ausgabe von Escape-Sequenzen für die Anzeige des Fortschritts von Vorgängen in Terminalemulatoren wurde hinzugefügt.
Flatpak vereinfacht die Verbreitung von Programmen, die nicht in den Standard-Repositories von Distributionen enthalten sind, durch die Bereitstellung eines universellen Containers, der Entwicklern die Notwendigkeit erspart, separate Builds für jede Distribution zu erstellen. Sicherheitsbewusste Benutzer haben mit Flatpak die Möglichkeit, ein fragwürdiges Programm in einem Container auszuführen, wobei der Zugriff nur auf die notwendigen Netzwerkfunktionen und Benutzerdaten gewährt wird. Für Interessierte an Neuheiten ermöglicht Flatpak die Installation der aktuellsten Test- und stabilen Versionen von Anwendungen, ohne dass Änderungen am System erforderlich sind. Zum Beispiel werden Flatpak-Pakete für LibreOffice, GIMP, Inkscape, Kdenlive, Steam, 0 A.D., Visual Studio Code, VLC, Slack, Telegram Desktop, Android Studio usw. bereitgestellt.
Um die Größe zu reduzieren, werden in das Paket nur die für die Anwendung spezifischen Abhängigkeiten aufgenommen. Grundlegende System- und Grafikbibliotheken (GTK, Qt, GNOME- und KDE-Bibliotheken usw.) werden als modulare standardisierte Runtime-Umgebungen bereitgestellt. Der entscheidende Unterschied zwischen Flatpak und Snap besteht darin, dass Snap die Komponenten der Basisumgebung und eine Isolierung auf der Grundlage von Systemaufruf-Filtern verwendet, während Flatpak einen vom System getrennten Container erstellt und mit umfangreichen Runtime-Sets arbeitet, die nicht als Pakete, sondern als standardisierte Systemumgebungen (z. B. alle für die Ausführung von GNOME- oder KDE-Anwendungen benötigten Bibliotheken) bereitgestellt werden.
Neben der standardisierten Systemumgebung (Runtime), die über ein spezielles Repository installiert wird, werden zusätzliche Abhängigkeiten (Bundle) geliefert, die für das Funktionieren der Anwendung erforderlich sind. Zusammen bilden „Runtime“ und „Bundle“ den Inhalt des Containers, wobei „Runtime“ separat installiert und sofort mit mehreren Containern verbunden wird, um eine Duplizierung gemeinsamer Systemdateien für die Container zu vermeiden.
In einem System können mehrere unterschiedliche „Runtimes“ (GNOME, KDE) oder mehrere Versionen einer „Runtime“ (GNOME 46, GNOME 47) installiert werden. Der Anwendungscontainer verwendet in Bezug auf Abhängigkeiten nur die Bindung zu einer bestimmten „Runtime“, ohne die einzelnen Pakete, die die gewählte „Runtime“ bilden, zu berücksichtigen. Alle fehlenden Elemente werden direkt zusammen mit der Anwendung verpackt. Beim Erstellen des Containers wird der Inhalt der „Runtime“ als das Verzeichnis /usr gemountet, während das „Bundle“ im Verzeichnis /app gemountet wird.
Die Ausstattung der „Runtime“ und der Anwendungscontainer erfolgt unter Verwendung der OSTree-Technologie, bei der das Abbild atomar aus einem git-ähnlichen Repository aktualisiert wird, was ermöglicht, Kontrollmethoden zur Versionsverwaltung 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 namens rpm-ostree in das OSTree-Repository übertragen.
Die selektive Installation und Aktualisierung von Paketen innerhalb der Arbeitsumgebung wird nicht unterstützt – das System wird nicht auf Ebene einzelner Komponenten, sondern vollständig aktualisiert, indem es atomar seinen Zustand ändert. Es stehen Mittel für die inkrementelle Anwendung von Aktualisierungen zur Verfügung, die eine vollständige Ersetzung des Images bei jeder Aktualisierung überflüssig machen.
Die erzeugte isolierte Umgebung ist vollständig unabhängig von der verwendeten Distribution und hat bei ordnungsgemäßer Paketkonfiguration keinen Zugriff auf die Dateien und Prozesse des Benutzers oder des Betriebssystems und kann außerdem nicht direkt auf die Hardware zugreifen, mit Ausnahme der Ausgabe über DRI. Die Grafikausgabe und die Eingangsorganisation werden über das Wayland-Protokoll oder durch das Durchleiten des X11-Sockets realisiert. Die Interaktion mit der externen Umgebung erfolgt über das DBus-Messaging-System und spezielle API-Portale.
Zur Isolierung werden Bubblewrap und traditionelle Linux-Technologien der Container-Virtualisierung verwendet, die auf cgroups, Namespaces, Seccomp und SELinux basieren. Für die Audioausgabe kommt PulseAudio oder PipeWire zum Einsatz. Bei der Erstellung eines Pakets kann die Isolierung deaktiviert werden, was von Entwicklern vieler beliebter Pakete genutzt wird, um vollständigen Zugriff auf das Dateisystem und alle Geräte im System zu erhalten.
Beispielsweise kommen Pakete wie GIMP, VSCodium, PyCharm, Octave, Inkscape, Audacity und VLC mit einem eingeschränkten Isolierungsmodus, der vollständigen Zugriff auf das Home-Verzeichnis bietet. Im Fall einer Kompromittierung von Paketen mit Zugriff auf das Home-Verzeichnis reicht es für einen Angreifer, um seinen Code auszuführen, aus, die Datei ~/ .bashrc zu ändern, trotz der Kennzeichnung «sandboxed» im Paketbeschrieb. Ein weiteres Thema ist die Kontrolle über die Änderungen an Paketen und das Vertrauen in die Paketbauer, die oft nicht mit dem Hauptprojekt oder den Distributionen verbunden sind.
Quelle: opennet.ru
