Byla vydána nová verze nástroje pro organizaci práce v izolovaných prostředích Bubblewrap 0.12, používaného k omezení jednotlivých aplikací neoprávněnými uživateli. V praxi se Bubblewrap využívá projektem Flatpak jako vrstva pro izolaci spouštěných aplikací z balíčků. K izolaci se používají tradiční technologie kontejnerové virtualizace pro Linux, založené na využití cgroups, namespaců, Seccomp a SELinux. Kód projektu je napsán v jazyce C a distribuuje se pod licencí LGPLv2.1+.
Izolace na úrovni souborového systému se provádí vytvořením nového namespaces pro body připojení (mount namespace), v němž se pomocí tmpfs vytváří prázdný kořenový oddíl. Do tohoto oddílu se v případě potřeby připojují oddíly externího FS v režimu „mount —bind“ (například při spuštění s volbou „bwrap —ro-bind /usr /usr“ je oddíl /usr předán z hlavního systému v režimu pouze pro čtení). Síťové možnosti jsou omezeny přístupem k loopback rozhraní s izolací síťového stacku pomocí příznaků CLONE_NEWNET a CLONE_NEWUTS.
Pro vyloučení všech zbytečných identifikátorů uživatelů a procesů z vytvářeného izolovaného prostředí lze použít režimy CLONE_NEWUSER (uživatelský namespace) a CLONE_NEWPID (PID namespace), a pro zakázání získání nových oprávnění se používá režim PR_SET_NO_NEW_PRIVS. Pro získání potřebných oprávnění se využívá „uživatelský namespace“.
V novém vydání:
- Licence na kód byla změněna z LGPL 2.0+ na LGPL 2.1+.
- Byla ukončena podpora sestavení ve formě spustitelného souboru, který získává další oprávnění pomocí příznaku suid root. Přítomnost podpory „uživatelského namespace“ v systému je nyní nezbytná. Jako důvod se uvádí náročnost údržby varianty s příznakem suid na pozadí zjevné podpory „uživatelského namespace“ v distribucích.
- Byla přidána možnost „—not-a-security-boundary“, která zajistí, že některé chyby při konfiguraci izolovaného sandboxového prostředí, jako je opětovné připojení pododdílu, nevedou k havarijnímu ukončení.
- Byla přidána možnost sestavení „assume_kernel“, která vypíná zajištění zpětné kompatibility s jádry Linuxu staršími než uvedená verze. Například uvedení verzí 5.6.0+ vyloučí alternativní implementaci funkce „openat2(RESOLVE_IN_ROOT)“.
Zdroj: opennet.ru
