Π½ΠΎΠ²ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ , ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ Π·Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°Π±ΠΎΡΠ° Π² ΠΈΠ·ΠΎΠ»ΠΈΡΠ°Π½ΠΈ ΡΡΠ΅Π΄ΠΈ Π² Linux ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ° Π½Π° Π½ΠΈΠ²ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Π½Π΅ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ. ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° Bubblewrap ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° Flatpak ΠΊΠ°ΡΠΎ ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΠΊ Π·Π° ΠΈΠ·ΠΎΠ»Π°ΡΠΈΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½ΠΈ ΠΎΡ ΠΏΠ°ΠΊΠ΅ΡΠΈ. ΠΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° C ΠΈ Π΅ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π· LGPLv2+.
ΠΠ° ΠΈΠ·ΠΎΠ»Π°ΡΠΈΡ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ Π·Π° Linux ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ½Π°ΡΠ° Π²ΠΈΡΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° cgroups, ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° Π½Π° ΠΈΠΌΠ΅ (namespaces), Seccomp ΠΈ SELinux. ΠΠ° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Bubblewrap ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° Ρ ΠΏΡΠ°Π²Π° Π½Π° root (ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ ΡΠ°ΠΉΠ» Ρ suid-ΡΠ»Π°Π³) Ρ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠΎ ΠΎΡΠ½Π΅ΠΌΠ°Π½Π΅ Π½Π° ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈΡΠ΅ ΡΠ»Π΅Π΄ ΠΏΡΠΈΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
ΠΠΊΡΠΈΠ²Π°ΡΠΈΡΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° Π½Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ (user namespaces), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Π½Π° ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΠΎΡΠ΄Π΅Π»Π΅Π½ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈ, Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° Π·Π° ΡΠ°Π±ΠΎΡΠ°, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ Π² ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠΈ (Bubblewrap ΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΠ° ΠΊΠ°ΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° suid ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΡ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° user namespaces β Π·Π° ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ ΠΎΡ ΡΡΠ΅Π΄Π°ΡΠ°, Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΠΊΡΡΠΈΡ, ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ΅ΠΆΠΈΠΌΠΈΡΠ΅ CLONE_NEWUSER ΠΈ CLONE_NEWPID). ΠΠ° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° Π·Π°ΡΠΈΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅, ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½ΠΈ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π°
Bubblewrap, ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°Ρ Π² ΡΠ΅ΠΆΠΈΠΌ PR_SET_NO_NEW_PRIVS, Π·Π°Π±ΡΠ°Π½ΡΠ²Π°Ρ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π½ΠΎΠ²ΠΈ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π° ΡΠ»Π°Π³Π° setuid.
ΠΠ·ΠΎΠ»Π°ΡΠΈΡΡΠ° Π½Π° Π½ΠΈΠ²ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΡΡΠ΅Π· ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π½Π° Π½ΠΎΠ²ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π½Π° ΠΈΠΌΠ΅ Π·Π° ΡΠΎΡΠΊΠΈ Π½Π° ΠΌΠΎΠ½ΡΠ°ΠΆ (mount namespace), Π² ΠΊΠΎΠ΅ΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° tmpfs ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π° ΠΏΡΠ°Π·Π΅Π½ ΠΊΠΎΡΠ΅Π½ΠΎΠ² Π΄ΡΠ». Π ΡΠΎΠ·ΠΈ Π΄ΡΠ» ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡ ΡΠ΅ ΠΏΡΠΈΠΊΡΠ΅ΠΏΡΡ Π΄ΡΠ»ΠΎΠ²Π΅ ΠΎΡ Π²ΡΠ½ΡΠ½Π°ΡΠ° ΡΠ°ΠΉΠ»ΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π² ΡΠ΅ΠΆΠΈΠΌ "mount βbind" (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Ρ ΠΎΠΏΡΠΈΡ "bwrap βro-bind /usr /usr" Π΄ΡΠ»ΡΡ /usr ΡΠ΅ ΠΏΡΠ΅Ρ Π²ΡΡΠ»Ρ ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π² ΡΠ΅ΠΆΠΈΠΌ ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅). ΠΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Ρ Π΄ΠΎ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ loopback-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Ρ ΠΈΠ·ΠΎΠ»Π°ΡΠΈΡ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡ ΡΡΠ΅ΠΊ ΡΡΠ΅Π· ΡΠ»Π°Π³ΠΎΠ²Π΅ΡΠ΅ CLONE_NEWNET ΠΈ CLONE_NEWUTS.
ΠΠ»ΡΡΠΎΠ²ΠΎΡΠΎ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΏΡΠΎΠ΅ΠΊΡ , ΠΊΠΎΠΉΡΠΎ ΡΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠΎΠ΄Π΅Π» Π½Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Ρ ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° setuid, Π΅, ΡΠ΅ Π² Bubblewrap ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΠΊΡΡ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Π²ΠΊΠ»ΡΡΠ²Π° ΡΠ°ΠΌΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΎΡ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π³ΡΠ°ΡΠΈΡΠ½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΡΠ°Π±ΠΎΡΠ½ΠΈΡ ΠΏΠ»ΠΎΡ ΠΈ ΡΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ ΠΊΡΠΌ Pulseaudio, ΡΠ° ΠΈΠ·Π½Π΅ΡΠ΅Π½ΠΈ Π½Π°ΡΡΡΠ°Π½Π° ΠΎΡ Flatpak ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π²Π΅ΡΠ΅ ΡΠ»Π΅Π΄ ΡΠ±ΡΠΎΡΠ° Π½Π° ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈΡΠ΅. Firejail ΠΎΠ±Π°ΡΠ΅ ΠΎΠ±Π΅Π΄ΠΈΠ½ΡΠ²Π° Π²ΡΠΈΡΠΊΠΈ ΡΡΠΏΡΡΡΡΠ²Π°ΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π² Π΅Π΄ΠΈΠ½ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ», ΠΊΠΎΠ΅ΡΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΠ²Π° ΠΎΠ΄ΠΈΡΠ° ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ° Π½Π° .
ΠΠΎΠ²ΠΎΡΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡΠ΅Π»Π½ΠΎ Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΏΡΠΈΡΡΠ΅Π΄ΠΈΠ½ΡΠ²Π°Π½Π΅ Π½Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° Π½Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ (user namespaces) ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ (pid namespaces). ΠΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°ΡΠ° Π½Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈΡΠ΅ ΡΠ° Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ»Π°Π³ΠΎΠ²Π΅ΡΠ΅ Β«βusernsΒ», Β«βuserns2Β» ΠΈ Β«βpidnsΒ».
Π’Π°Π·ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ Π² ΡΠ΅ΠΆΠΈΠΌ setuid ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΡΠ΄Π΅Π»Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π±Π΅Π· ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠ°Π²Π° root, Π½ΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅
Π½Π° user namespaces Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° (ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈ Π² Debian ΠΈ RHEL/CentOS) ΠΈ Π½Π΅ ΠΈΠ·ΠΊΠ»ΡΡΠ²Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΡΡΠ±Π° Π½Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡΠ° Π½Π° Β«ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°Β». ΠΡ Π½ΠΎΠ²ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° Bubblewrap 0.4 ΡΠ΅ ΠΎΡΠ±Π΅Π»ΡΠ·Π²Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ ΡΡΡ Π‘ΠΈ-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° musl Π²ΠΌΠ΅ΡΡΠΎ glibc ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°ΡΠ° Π² ΡΠ°ΠΉΠ» ΡΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° Π² JSON ΡΠΎΡΠΌΠ°Ρ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
