ΠΠ°Π»ΠΈΡΠ΅Π½ Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌ Π·Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΠΈΠ·ΠΎΠ»ΠΈΡΠ°Π½ΠΈ ΡΡΠ΅Π΄ΠΈ Bubblewrap 0.5.0, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π·Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Π½Π΅ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ. ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° 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.
ΠΠ»ΡΡΠΎΠ²Π°ΡΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΎΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡ Firejail, ΠΊΠΎΠΉΡΠΎ ΡΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠΎΠ΄Π΅Π» Π½Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Ρ ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° setuid, Π΅, ΡΠ΅ Π² Bubblewrap ΡΠ»ΠΎΡΡ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Π²ΠΊΠ»ΡΡΠ²Π° ΡΠ°ΠΌΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π³ΡΠ°ΡΠΈΡΠ½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΡΠ°Π±ΠΎΡΠ½ΠΈΡ ΠΏΠ»ΠΎΡ ΠΈ ΡΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡΡΠ° ΠΊΡΠΌ Pulseaudio, ΡΠ° ΠΈΠ·Π²ΡΠ½ΡΠ΅Π΄Π΅Π½ΠΈ Π½Π° ΡΡΡΠ°Π½Π°ΡΠ° Π½Π° Flatpak ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΡΠ»Π΅Π΄ ΡΠ±ΡΠΎΡΠ° Π½Π° ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈΡΠ΅. Firejail ΠΎΠ±Π΅Π΄ΠΈΠ½ΡΠ²Π° Π² Π΅Π΄ΠΈΠ½ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ» Π²ΡΠΈΡΠΊΠΈ ΡΡΠΏΡΡΡΡΠ²Π°ΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠ΅ΡΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΠ²Π° Π½Π΅Π³ΠΎΠ²ΠΈΡ ΠΎΠ΄ΠΈΡ ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ° Π½Π° Π½ΡΠΆΠ½ΠΎΡΠΎ Π½ΠΈΠ²ΠΎ.
Π Π½ΠΎΠ²ΠΎΡΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈ ΠΎΠΏΡΠΈΠΈ: ββchmodβ Π·Π° ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΠΏΡΠ°Π²Π°ΡΠ° Π·Π° Π΄ΠΎΡΡΡΠΏ, ββclearenvβ Π·Π° ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° (ΠΎΡΠ²Π΅Π½ PWD) ΠΈ ββpermsβ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΠΏΡΠ°Π²Π°ΡΠ° Π·Π° Π΄ΠΎΡΡΡΠΏ, ΠΏΡΠΈΠ»Π°Π³Π°Π½ΠΈ ΠΏΡΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ββbind-dataβ, ββdirβ, ββfileβ, ββro-bind-dataβ ΠΈ ββtmpfsβ. ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° Π΅ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ° Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅, Π²ΡΠ·Π½ΠΈΠΊΠ²Π°ΡΠΈ ΠΏΡΠΈ Π½Π΅ΡΡΠΏΠ΅Ρ
Π½Π° ΠΌΠΎΠ½ΡΠΈΡΠ°Π½Π΅ Π² ΡΠ΅ΠΆΠΈΠΌ bind. ΠΠ° zsh Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΄ΠΎΠΏΡΠ»Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Ρ Π½Π°ΡΠΈΡΠΊΠ°Π½Π΅ Π½Π° ΡΠ°Π±ΡΠ»Π°ΡΠΈΡ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
