Efter et års udvikling er der udgivet en ny version af værktøjet til organisering af isolerede miljøer, Bubblewrap 0.9, som bruges til at begrænse enkelte applikationer fra almindelige brugere. I praksis anvendes Bubblewrap af Flatpak-projektet som et lag til isolering af applikationer, der køres fra pakker. Koden til projektet er skrevet i C og distribueres under LGPLv2+-licensen.
Isolationen bruger traditionelle container-virtualiseringsteknologier for Linux, baseret på cgroups, namespaces, Seccomp og SELinux. For at udføre privilegerede operationer til konfiguration af containeren startes Bubblewrap med root-rettigheder (eksekverbar fil med suid-flag) og får derefter nulstillet privilegierne efter afslutningen af containerens initialisering.
Aktivering af systemet med bruger-id namespaces, der tillader brug af et separat sæt identifikatorer i containerne, kræves ikke for at fungere, da det som standard ikke fungerer i mange distributioner (Bubblewrap positioneres som en begrænset suid-implementation af et subset af mulighederne fra bruger-id namespaces — for at udelukke alle bruger- og procesidentifikatorer fra miljøet, bortset fra den nuværende, anvendes CLONE_NEWUSER- og CLONE_NEWPID-tilstande). For ekstra beskyttelse køres programmer, der kører under Bubblewrap, i modus PR_SET_NO_NEW_PRIVS, der forhindrer modtagelse af nye privilegier, f.eks. når setuid-flaget er til stede.
Isolation på filsystemniveau foregår gennem oprettelsen af et nyt mount namespace som standard, hvor et tomt rodpartition oprettes ved hjælp af tmpfs. Eksterne filsystempartitioner kan tilsluttes denne partition efter behov i 'mount --bind'-tilstand (for eksempel ved opstart med muligheden 'bwrap --ro-bind /usr /usr', hvor /usr partitionen fra hovedsystemet videregives i skrivebeskyttet tilstand). Netværksmuligheder begrænses til adgang til loopback-interface med isolering af netværksstakken via flags CLONE_NEWNET og CLONE_NEWUTS.
Hovedforskellen fra det lignende projekt Firejail, som også bruger setuid-startmodel, er, at Bubblewrap-laget til oprettelse af containere kun inkluderer det nødvendige minimum af funktioner, mens alle udvidede funktioner, der er nødvendige for at køre grafiske applikationer, interagere med skrivebordet og filtrere anmodninger til Pulseaudio, er overført til Flatpak og udføres først efter nulstilling af privilegierne. Firejail kombinerer derimod alle tilknyttede funktioner i en eksekverbar fil, hvilket gør det sværere at revidere og opretholde sikkerheden på et passende niveau.
I den nye version:
- Filer genereret i Autotools er blevet fjernet fra kildetekstpakken. For bygning anbefales det nu at bruge byggeværktøjet Meson. Valgfri støtte til Autotools er stadig bevaret, men det planlægges at blive fjernet i fremtidige versioner.
- En mulighed «—argv0» er blevet tilføjet for at angive værdien af nul-argumentet i kommandolinjen (argv[0] - navnet på den eksekverbare fil, f.eks. «—argv0 /usr/bin/test»).
- Muligheden «—symlink» aktiveres nu kun, når den symbolske link allerede eksisterer og peger på den ønskede målfil.
- Muligheden «—cap-add» er dokumenteret, som bruges til at angive capabilities-flags, såsom «CAP_DAC_READ_SEARCH».
- Fejlmeddelelser ved montering er blevet mere informative.
- Processen med at oprette enhedstest er blevet forenklet.
- I brugseksemplerne er understøttelsen af ældre versioner af Python blevet afsluttet.
- Operationerne vedrørende hukommelsesallokering er blevet forbedret.
Kilde: opennet.ru
