För isolering används traditionell Linux-containervirtualiseringsteknik, baserad på användningen av cgroups, namespaces, Seccomp och SELinux. För att utföra privilegierade operationer för att konfigurera en behållare, startas Bubblewrap med roträttigheter (en körbar fil med en suid-flagga) och återställer sedan privilegier efter att behållaren har initierats.
Aktivering av användarnamnutrymmen i namnområdessystemet, som låter dig använda din egen separata uppsättning identifierare i behållare, krävs inte för drift, eftersom det inte fungerar som standard i många distributioner (Bubblewrap är placerad som en begränsad suid-implementering av en underuppsättning av funktioner för användarnamnutrymmen - för att utesluta alla användar- och processidentifierare från miljön, förutom den nuvarande, används lägena CLONE_NEWUSER och CLONE_NEWPID). För ytterligare skydd, körbar under kontroll
Bubblewrap-program startas i PR_SET_NO_NEW_PRIVS-läge, vilket förbjuder erhållande av nya privilegier, till exempel om setuid-flaggan är närvarande.
Isolering på filsystemnivå åstadkoms genom att skapa ett nytt monteringsnamnområde som standard, där en tom rotpartition skapas med tmpfs. Vid behov kopplas externa FS-partitioner till denna partition i "mount —bind"-läget (till exempel när den startas med alternativet "bwrap —ro-bind /usr /usr", vidarebefordras /usr-partitionen från huvudsystemet i skrivskyddat läge). Nätverkskapaciteten är begränsad till åtkomst till loopback-gränssnittet med nätverksstackisolering via flaggorna CLONE_NEWNET och CLONE_NEWUTS.
Huvudskillnad från ett liknande projekt
Den nya utgåvan är känd för implementeringen av stöd för att ansluta befintliga användarnamnområden och process-pid-namnområden. För att kontrollera anslutningen av namnområden har flaggorna "--userns", "--userns2" och "-pidns" lagts till.
Den här funktionen fungerar inte i setuid-läge och kräver användning av ett separat läge som kan fungera utan att erhålla root-rättigheter, men som kräver aktivering
användarnamnrymder på systemet (inaktiverat som standard på Debian och RHEL/CentOS) och utesluter inte möjligheten
Källa: opennet.ru