Nach einem Jahr Entwicklung wurde die neue Version des Tools zur Organisation isolierter Umgebungen, Bubblewrap 0.9, veröffentlicht. Dieses wird zur EinschrĂ€nkung einzelner Anwendungen von nicht privilegierten Benutzern verwendet. In der Praxis wird Bubblewrap im Flatpak-Projekt als Schicht zur Isolierung von Anwendungen aus Paketen verwendet. Der Code des Projekts ist in C geschrieben und unter der LGPLv2+-Lizenz verfĂŒgbar.
Zur Isolierung werden die traditionellen Technologien der Container-Virtualisierung fĂŒr Linux verwendet, die auf cgroups, Namespaces, Seccomp und SELinux basieren. Um privilegierte Operationen zur Konfiguration des Containers durchzufĂŒhren, wird Bubblewrap mit Root-Rechten (eine ausfĂŒhrbare Datei mit SUID-Flag) gestartet, gefolgt von einem Privilegienabbau nach Abschluss der Containerinitialisierung.
Die Aktivierung von Benutzer-NamensrĂ€umen (user namespaces), die es ermöglichen, in Containern einen separaten Satz von Identifikatoren zu verwenden, ist nicht erforderlich, da sie in vielen Distributionen standardmĂ€Ăig nicht aktiviert ist. Bubblewrap wird als eingeschrĂ€nkte SUID-Implementierung eines Teilbereichs der Funktionen von Benutzer-NamensrĂ€umen positioniert â zur Ausnahme aller Benutzer- und Prozessidentifikatoren aus der Umgebung, auĂer dem aktuellen, werden die Modi CLONE_NEWUSER und CLONE_NEWPID verwendet. Zum zusĂ€tzlichen Schutz werden von Bubblewrap verwaltete Programme im PR_SET_NO_NEW_PRIVS-Modus ausgefĂŒhrt, der das Erlangen neuer Berechtigungen, wie z. B. bei vorhandenem Setuid-Flag, verbietet.
Die Isolierung auf Dateisystemebene erfolgt durch die standardmĂ€Ăige Schaffung eines neuen Mount-Namensraums, in dem mit tmpfs ein leeres Root-Dateisystem erstellt wird. Notwendige Partitionen eines externen Dateisystems werden bei Bedarf im Modus âmount âbindâ an dieses Dateisystem angehĂ€ngt (zum Beispiel wird bei der AusfĂŒhrung mit der Option âbwrap âro-bind /usr /usrâ das Verzeichnis /usr aus dem Hauptsystem im Nur-Lese-Modus bereitgestellt). Die Netzwerkfunktionen beschrĂ€nken sich auf den Zugang zum Loopback-Interface, wĂ€hrend der Netzwerkstack durch die Flags CLONE_NEWNET und CLONE_NEWUTS isoliert wird.
Der entscheidende Unterschied zu einem Ă€hnlichen Projekt wie Firejail, das ebenfalls ein setuid-Modell zur AusfĂŒhrung nutzt, besteht darin, dass Bubblewrap nur das notwendige Minimum an Funktionen fĂŒr die Erstellung von Containern bereitstellt. Alle erweiterten Funktionen, die fĂŒr die AusfĂŒhrung grafischer Anwendungen, die Interaktion mit dem Desktop und die Filterung von Anfragen an Pulseaudio erforderlich sind, sind auf die Seite von Flatpak ausgelagert und erfolgen bereits nach der Privilegienenthebung. Firejail hingegen vereint alle zugehörigen Funktionen in einer einzigen ausfĂŒhrbaren Datei, was die ĂberprĂŒfung und Aufrechterhaltung der Sicherheit erschwert.
In der neuen Version:
- Die aus den Quelltextpaketen entfernten Dateien, die in Autotools generiert wurden. FĂŒr den Build-Prozess wird jetzt empfohlen, das Build-System Meson zu verwenden. Die optionale UnterstĂŒtzung fĂŒr Autotools bleibt vorerst erhalten, wird jedoch in zukĂŒnftigen Versionen voraussichtlich entfernt.
- Eine Option «âargv0» wurde hinzugefĂŒgt, um den Wert des ersten Arguments der Befehlszeile festzulegen (argv[0] â der Name der ausfĂŒhrbaren Datei, beispielsweise «âargv0 /usr/bin/test»).
- Die Option «âsymlink» wird jetzt nur aktiviert, wenn der symbolische Link bereits existiert und auf die richtige Zieldatei verweist.
- Die Option «âcap-add» ist jetzt dokumentiert, die verwendet wird, um Capability-Flags, wie «CAP_DAC_READ_SEARCH», festzulegen.
- Die Fehlerausgaben bei einem Mount-Fehler wurden informativer gestaltet.
- Der Prozess zur Erstellung von Unit-Tests wurde vereinfacht.
- In den Nutzungshinweisen wird die UnterstĂŒtzung Ă€lterer Python-Versionen eingestellt.
- Die Speicherzuweisungen wurden verbessert.
Quelle: opennet.ru
