Zur Isolierung werden traditionelle Linux-Containervirtualisierungstechnologien verwendet, die auf der Verwendung von cgroups, Namespaces, Seccomp und SELinux basieren. Um privilegierte Vorgänge zum Konfigurieren eines Containers auszuführen, wird Bubblewrap mit Root-Rechten (einer ausführbaren Datei mit einem suid-Flag) gestartet und setzt dann die Berechtigungen zurück, nachdem der Container initialisiert wurde.
Die Aktivierung von Benutzernamensräumen im Namensraumsystem, die es Ihnen ermöglicht, Ihren eigenen separaten Satz von Bezeichnern in Containern zu verwenden, ist für den Betrieb nicht erforderlich, da es in vielen Distributionen nicht standardmäßig funktioniert (Bubblewrap ist als eingeschränkte Suid-Implementierung von a positioniert Teilmenge der Benutzernamespace-Funktionen – um alle Benutzer- und Prozess-IDs außer der aktuellen aus der Umgebung auszuschließen, werden die Modi CLONE_NEWUSER und CLONE_NEWPID verwendet. Für zusätzlichen Schutz, lauffähig unter Kontrolle
Bubblewrap-Programme werden im PR_SET_NO_NEW_PRIVS-Modus gestartet, der den Erhalt neuer Berechtigungen verhindert, beispielsweise wenn das Setuid-Flag vorhanden ist.
Die Isolierung auf Dateisystemebene wird durch die standardmäßige Erstellung eines neuen Mount-Namespace erreicht, in dem mithilfe von tmpfs eine leere Root-Partition erstellt wird. Bei Bedarf werden externe FS-Partitionen im Modus „mount —bind“ an diese Partition angehängt (zum Beispiel wird beim Start mit der Option „bwrap —ro-bind /usr /usr“ die /usr-Partition vom Hauptsystem weitergeleitet im schreibgeschützten Modus). Die Netzwerkfunktionen sind auf den Zugriff auf die Loopback-Schnittstelle mit Netzwerk-Stack-Isolierung über die Flags CLONE_NEWNET und CLONE_NEWUTS beschränkt.
Hauptunterschied zu einem ähnlichen Projekt
Die neue Version zeichnet sich durch die Implementierung der Unterstützung für den Beitritt bestehender Benutzernamensräume und Prozess-PID-Namensräume aus. Um die Verbindung von Namespaces zu steuern, wurden die Flags „--userns“, „--userns2“ und „-pidns“ hinzugefügt.
Diese Funktion funktioniert nicht im Setuid-Modus und erfordert die Verwendung eines separaten Modus, der ohne den Erwerb von Root-Rechten funktionieren kann, aber eine Aktivierung erfordert
Benutzernamensräume auf dem System (standardmäßig deaktiviert unter Debian und RHEL/CentOS) und schließt die Möglichkeit nicht aus
Source: opennet.ru