Π½ΠΎΠ²ΡΠΉ Π²ΡΠΏΡΡΠΊ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ , ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π΄Π»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π±ΠΎΡΡ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΉ Π² Linux ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΡΡΡΠΈΠΉ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ Bubblewrap ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ Flatpak Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΎΡΠ»ΠΎΠΉΠΊΠΈ Π΄Π»Ρ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΡΡ ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘ΠΈ ΠΈ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ 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.
ΠΠΊΡΠΈΠ²Π°ΡΠΈΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΡΠ½ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (user namespaces), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°Ρ
ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ Π½Π°Π±ΠΎΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ², Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ
Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π°Ρ
(Bubblewrap ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½Π°Ρ suid-ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ user namespaces β Π΄Π»Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ΅Ρ
ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΈΠ· ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, ΠΊΡΠΎΠΌΠ΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ΅ΠΆΠΈΠΌΡ CLONE_NEWUSER ΠΈ CLONE_NEWPID). ΠΠ»Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π·Π°ΡΠΈΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ
Bubblewrap ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ PR_SET_NO_NEW_PRIVS, Π·Π°ΠΏΡΠ΅ΡΠ°ΡΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ
ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΡΠ»Π°Π³Π° 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 , ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠΎΠ΄Π΅Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ setuid, ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ Π² Bubblewrap ΠΏΡΠΎΡΠ»ΠΎΠΉΠΊΠ° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ, Π° Π²ΡΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΡΠ°Π±ΠΎΡΠΈΠΌ ΡΡΠΎΠ»ΠΎΠΌ ΠΈ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΉ ΠΊ Pulseaudio, Π²ΡΠ½Π΅ΡΠ΅Π½Ρ Π½Π° ΡΡΠΎΡΠΎΠ½Ρ Flatpak ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΠ±ΡΠΎΡΠ° ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ. Firejail ΠΆΠ΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ Π²ΡΠ΅ ΡΠΎΠΏΡΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΠ΅Ρ Π΅Π³ΠΎ Π°ΡΠ΄ΠΈΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π½Π° .
ΠΠΎΠ²ΡΠΉ Π²ΡΠΏΡΡΠΊ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΡΠ΅Π»Π΅Π½ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ
ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΡΠ½ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ (user namespaces) ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² (pid namespaces). ΠΠ»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΡΠ½ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΡΠ»Π°Π³ΠΈ Β«βusernsΒ», Β«βuserns2Β» ΠΈ Β«βpidnsΒ».
ΠΠ°Π½Π½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ setuid ΠΈ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±Π΅Π· ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠ°Π² root, Π½ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ Π°ΠΊΡΠΈΠ²Π°ΡΠΈΠΈ
user namespaces Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΡΠΊΠ»ΡΡΠ΅Π½Ρ Π² Debian ΠΈ RHEL/CentOS) ΠΈ Π½Π΅ ΠΈΡΠΊΠ»ΡΡΠ°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄Π»Ρ ΠΎΠ±ΠΎΠ΄Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ Β«user namespacesΒ». ΠΠ· Π½ΠΎΠ²ΡΡ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Bubblewrap 0.4 ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ±ΠΎΡΠΊΠΈ Ρ Π‘ΠΈ-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ musl Π²ΠΌΠ΅ΡΡΠΎ glibc ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°Ρ
ΠΈΠΌΡΠ½ Π² ΡΠ°ΠΉΠ» ΡΠΎ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΎΠΉ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON.
Fonte: opennet.ru
