nuova versione dello strumento , progettato per organizzare il lavoro in ambienti isolati su Linux e funzionante a livello di applicazioni per utenti non privilegiati. Nella pratica, Bubblewrap è utilizzato dal progetto Flatpak come strato per l'isolamento delle applicazioni eseguite da pacchetti. Il codice del progetto è scritto in linguaggio C e distribuito con licenza LGPLv2+.
Per l'isolamento vengono utilizzate le tecnologie tradizionali per la virtualizzazione dei contenitori su Linux, basate sull'uso di cgroups, spazi dei nomi (namespaces), Seccomp e SELinux. Per eseguire operazioni privilegiate nella configurazione del contenitore, Bubblewrap viene avviato con diritti di root (file eseguibile con flag suid) per poi ripristinare i privilegi dopo la conclusione dell'inizializzazione del contenitore.
L'attivazione del sistema di spazi dei nomi degli identificatori utente (user namespaces), che consentono di utilizzare un set separato di identificatori all'interno dei contenitori, non è necessaria, poiché per impostazione predefinita non funziona in molte distribuzioni (Bubblewrap è posizionato come un'implementazione suid limitata di un sottoinsieme delle funzionalità degli spazi dei nomi utente, utilizzando le modalità CLONE_NEWUSER e CLONE_NEWPID per escludere tutti gli identificatori di utenti e processi dall'ambiente, eccetto quello attuale). Per una maggiore protezione, i programmi eseguiti con
Bubblewrap vengono avviati in modalità PR_SET_NO_NEW_PRIVS, che vieta di acquisire nuovi privilegi, ad esempio in presenza del flag setuid.
L'isolamento a livello di file system avviene creando un nuovo spazio di nomi per i punti di montaggio (mount namespace) per impostazione predefinita, in cui viene creato un filesystem root vuoto tramite tmpfs. In questa partizione, se necessario, vengono montate le partizioni della FS esterna in modalità 'mount —bind' (ad esempio, all'avvio con l'opzione 'bwrap —ro-bind /usr /usr', la partizione /usr viene trasmessa dal sistema principale in modalità di sola lettura). Le capacità di rete sono limitate all'accesso all'interfaccia loopback, con isolamento dello stack di rete attuato tramite i flag CLONE_NEWNET e CLONE_NEWUTS.
La principale differenza rispetto a progetti simili , che utilizza anche un modello di esecuzione con setuid, differisce in quanto in Bubblewrap lo strato per la creazione di contenitori include solo il minimo necessario di funzionalità, mentre tutte le funzionalità avanzate necessarie per l'esecuzione di applicazioni grafiche, l'interazione con il desktop e la filtrazione delle richieste a Pulseaudio sono gestite da Flatpak e vengono eseguite dopo il rilascio dei privilegi. Firejail, invece, combina tutte le funzionalità accessorie in un unico file eseguibile, il che complica la sua revisione e il mantenimento della sicurezza a .
La nuova versione è notevole per l'implementazione del supporto per il collegamento degli spazi dei nomi degli identificatori utente (user namespaces) esistenti e degli spazi dei nomi dei processi (pid namespaces). Sono stati aggiunti i flag «—userns», «—userns2» e «—pidns» per gestire il collegamento degli spazi dei nomi.
Questa funzionalità non funziona in modalità setuid e richiede l'applicazione di una modalità separata, che può operare senza acquisire i diritti di root, ma richiede che siano attivate
le namespace utente nel sistema (disattivate per impostazione predefinita in Debian e RHEL/CentOS) e non esclude la possibilità di per quanto riguarda le restrizioni degli «user namespaces». Tra le nuove funzionalità di Bubblewrap 0.4, si segnala anche la possibilità di compilarlo con la libreria C musl anziché con glibc e il supporto per la memorizzazione delle informazioni sugli spazi dei nomi in un file di statistiche in formato JSON.
Fonte: opennet.ru
