အထီးကျန်မှုအတွက်၊ cgroups၊ namespaces၊ Seccomp နှင့် SELinux ကိုအသုံးပြုမှုအပေါ် အခြေခံ၍ ရိုးရာ Linux container virtualization နည်းပညာများကို အသုံးပြုပါသည်။ ကွန်တိန်နာကို configure လုပ်ရန် အခွင့်ထူးခံ လုပ်ဆောင်ချက်များကို လုပ်ဆောင်ရန် Bubblewrap ကို root လုပ်ပိုင်ခွင့် ( suid အလံပါသော executable ဖိုင်တစ်ခု) ဖြင့် စတင်ပြီး ကွန်တိန်နာကို စတင်ပြီးနောက် အခွင့်ထူးများကို ပြန်လည်သတ်မှတ်ပါ။
ကွန်တိန်နာများတွင် သင့်ကိုယ်ပိုင် သီးခြားသတ်မှတ်သတ်မှတ်မှုအစုအဝေးကို အသုံးပြုခွင့်ပြုသည့် namespace စနစ်တွင် အသုံးပြုသူအမည်နေရာများကို အသက်သွင်းခြင်းသည် လုပ်ဆောင်ချက်အတွက် မလိုအပ်သောကြောင့်၊ ၎င်းသည် ဖြန့်ဝေမှုများစွာတွင် ပုံသေဖြင့် အလုပ်မလုပ်သောကြောင့် (Bubblewrap ကို ကန့်သတ် suid အကောင်အထည်ဖော်မှုတစ်ခုအဖြစ် သတ်မှတ်ထားသည်။ အသုံးပြုသူ namespaces စွမ်းရည်၏ အစုခွဲ - လက်ရှိတစ်ခုမှလွဲ၍ အသုံးပြုသူနှင့် လုပ်ငန်းစဉ်ဆိုင်ရာ ခွဲခြားသတ်မှတ်မှုအားလုံးကို ပတ်ဝန်းကျင်မှ ဖယ်ထုတ်ရန်၊ CLONE_NEWUSER နှင့် CLONE_NEWPID မုဒ်များကို အသုံးပြုသည်)။ အပိုကာကွယ်မှုများအတွက်၊ ထိန်းချုပ်မှုအောက်တွင် လုပ်ဆောင်နိုင်သည်။
Bubblewrap ပရိုဂရမ်များကို PR_SET_NO_NEW_PRIVS မုဒ်တွင် လွှင့်တင်ထားပြီး၊ ဥပမာ၊ setuid အလံရှိနေပါက၊ အထူးအခွင့်အရေးအသစ်များရယူခြင်းကို တားမြစ်ထားသည်။
tmpfs ကို အသုံးပြု၍ အချည်းနှီးသော root partition ကိုဖန်တီးထားသည့် ဖိုင်စနစ်အဆင့်တွင် သီးခြားခွဲထားခြင်းသည် mount namespace အသစ်တစ်ခု ဖန်တီးခြင်းဖြင့် ပြီးမြောက်ပါသည်။ လိုအပ်ပါက၊ ပြင်ပ FS အခန်းကန့်များကို "mount —bind" မုဒ်တွင် ဤအခန်းကန့်သို့ ချိတ်ဆက်ထားပါသည် (ဥပမာ၊ "bwrap —ro-bind /usr /usr" ရွေးချယ်မှုဖြင့် စတင်သောအခါ /usr အပိုင်းကို ပင်မစနစ်မှ တစ်ဆင့်ပေးပို့ပါသည်။ ဖတ်ရန်သာမုဒ်တွင်)။ CLONE_NEWNET နှင့် CLONE_NEWUTS အလံများမှတစ်ဆင့် ကွန်ရက်အစုအဝေးကို သီးခြားခွဲထားခြင်းဖြင့် ကွန်ရက်ချိတ်ဆက်နိုင်စွမ်းကို ကန့်သတ်ထားသည်။
အလားတူပရောဂျက်တစ်ခုမှ အဓိကကွာခြားချက်
ထုတ်ဝေမှုအသစ်သည် လက်ရှိအသုံးပြုသူအမည်နေရာများနှင့် pid namespaces များလုပ်ဆောင်ရန်အတွက် ပံ့ပိုးမှုအကောင်အထည်ဖော်မှုအတွက် မှတ်သားဖွယ်ဖြစ်သည်။ namespaces များ၏ချိတ်ဆက်မှုကိုထိန်းချုပ်ရန်၊ "--users", "--users2" နှင့် "-pidns" အလံများကိုထည့်သွင်းထားသည်။
ဤအင်္ဂါရပ်သည် setuid မုဒ်တွင် အလုပ်မလုပ်ဘဲ root လုပ်ပိုင်ခွင့်များ မရယူဘဲ လုပ်ဆောင်နိုင်သော သီးခြားမုဒ်ကို အသုံးပြုရန် လိုအပ်သော်လည်း activation လိုအပ်သည်
စနစ်ရှိ user namespaces (Debian နှင့် RHEL/CentOS တွင် မူရင်းအတိုင်းပိတ်ထားသည်) နှင့် ဖြစ်နိုင်ချေကို မပါဝင်ပါ။
source: opennet.ru