Pas një vit zhvillimi, u publikua versioni i ri i mjeteve për organizimin e punës në mjedise të izoluara Bubblewrap 0.9, që përdoret për të kufizuar aplikacionet e përdoruesve të cilët nuk kanë privilegje. Në praktikë, Bubblewrap përdoret nga projekti Flatpak si një shtesë për izolimin e aplikacioneve të ekzekutuara nga paketat. Kodi i projektit është shkruar në gjuhën C dhe shpërndahet nën licencën LGPLv2+.
Për izolimin përdoren teknologjitë tradicionale të virtualizimit të kontejnerëve në Linux, të bazuara në përdorimin e cgroups, hapësirave të emrave (namespaces), Seccomp dhe SELinux. Për të kryer operacione me privilegje për konfigurimin e kontejnerit, Bubblewrap ekzekutohet me të drejta root (skedari ekzekutiv me shenjën suid), duke i hequr më pas privilegjet pas përfundimit të inicializimit të kontejnerit.
Aktivizimi nĂ« sistem i user namespaces, qĂ« lejojnĂ« pĂ«rdorimin e njĂ« grupi tĂ« veçantĂ« identifikuesish brenda kontejnerĂ«ve, nuk kĂ«rkohet pĂ«r funksionimin, pasi si parazgjedhje kjo veçori nuk punon nĂ« shumĂ« shpĂ«rndarje (Bubblewrap pozicionohet si njĂ« implementim i kufizuar suid i njĂ« nĂ«nkompleti tĂ« mundĂ«sive tĂ« user namespaces â pĂ«r tĂ« pĂ«rjashtuar nga mjedisi tĂ« gjithĂ« identifikuesit e pĂ«rdoruesve dhe proceseve, pĂ«rveç atij aktual, pĂ«rdoren mĂ«nyrat CLONE_NEWUSER dhe CLONE_NEWPID). PĂ«r mbrojtje shtesĂ«, programet e ekzekutuara nĂ«n kontrollin e Bubblewrap nisen nĂ« regjimin PR_SET_NO_NEW_PRIVS, i cili ndalon marrjen e privilegjeve tĂ« reja, pĂ«r shembull nĂ« prani tĂ« flamurit setuid.
Izolimi nĂ« nivelin e sistemit tĂ« skedarĂ«ve bĂ«het pĂ«rmes krijimit tĂ« njĂ« hapĂ«sire tĂ« re tĂ« emrave tĂ« pikave tĂ« montimit (mount namespace) me parazgjedhje, nĂ« tĂ« cilĂ«n krijohet njĂ« pjesĂ« e zbrazĂ«t e rrĂ«njĂ«s duke pĂ«rdorur tmpfs. NĂ« kĂ«tĂ« pjesĂ«, sipas nevojĂ«s, lidhen pjesĂ« tĂ« FS-sĂ« sĂ« jashtme nĂ« modalitetin âmount âbindâ (pĂ«r shembull, kur ekzekutohet me opsionin âbwrap âro-bind /usr /usrâ, pjesa /usr kalon nga sistemi kryesor nĂ« modalitetin vetĂ«m pĂ«r lexim). MundĂ«sitĂ« rrjetĂ«rore kufizohen nĂ« qasjen nĂ« ndĂ«rfaqen loopback me izolimin e skakereve tĂ« rrjetit pĂ«rmes flamujve CLONE_NEWNET dhe CLONE_NEWUTS.
Dallimi kryesor nga projekti i ngjashëm Firejail, i cili gjithashtu përdor modelin e nisjes me setuid, është se te Bubblewrap shtresa për krijimin e kontejnerëve përfshin vetëm minimumin e nevojshëm të funksioneve, ndërsa të gjitha veçoritë e avancuara të nevojshme për nisjen e aplikacioneve grafike, ndërveprimin me desktop-in dhe filtrimin e thirrjeve ndaj Pulseaudio janë zhvendosur te Flatpak dhe ekzekutohen vetëm pasi privilegjet të jenë hequr. Ndërsa Firejail bashkon në një skedar të vetëm të ekzekutueshëm të gjitha funksionet shoqëruese, gjë që e bën më të vështirë auditimin dhe ruajtjen e sigurisë në nivelin e duhur.
NĂ« versionin e ri:
- Skedari me kodin burimor është pastruar nga skedarët e gjeneruar nga Autotools. Tani rekomandohet të përdoret sistemi i ndërtimit Meson. Mbështetje e opsional për Autotools është ende ruajtur, por në lëshimet e ardhshme planifikohet që ajo të hiqet.
- Shtohet opsioni "--argv0" për të përcaktuar vlerën e argumentit të parë të linjës së komandës (argv[0] - emri i skedarit ekzekutues, për shembull "--argv0 /usr/bin/test").
- Opsioni "--symlink" tani vepron vetëm kur lidhja simbolike ekziston tashmë dhe tregon në skedarin e duhur të destinacionit.
- Dokumentohet opsioni "--cap-add", i përdorur për të vendosur flag-at e capability, për shembull, "CAP_DAC_READ_SEARCH".
- Rritet informativiteti i gabimeve që shfaqen gjatë dështimit të montimit.
- Procesi i krijimit të testeve të njësisë është thjeshtuar.
- Në shembujt e përdorimit, mbështetja për versionet e vjetra të Python-it është ndalur.
- Operacionet e alokimit të memories janë përmirësuar.
Burimi: opennet.ru
