၎င်းကို အထူးနည်းလမ်းဖြင့် သင်သတ်မှတ်မထားပါက ကွန်တိန်နာအတွင်းရှိ လုပ်ငန်းစဉ်များအားလုံးသည် root အသုံးပြုသူအဖြစ် လုပ်ဆောင်မည်ဖြစ်ပါသည်။ ဤအသုံးပြုသူတွင် ကန့်သတ်ချက်များမရှိသောကြောင့် ၎င်းသည် အလွန်အဆင်ပြေပုံရသည်။ ထို့ကြောင့် root အဖြစ်လုပ်ဆောင်ခြင်းသည် လုံခြုံရေးရှုထောင့်မှ မှားယွင်းပါသည်။ ၎င်းတို့၏စိတ်ကောင်း၌ မည်သူမျှ root လုပ်ပိုင်ခွင့်ရှိသော local computer တွင်အလုပ်လုပ်ခြင်းမရှိပါက၊ အများအပြားသည် ကွန်တိန်နာများတွင် root အောက်ရှိ လုပ်ငန်းစဉ်များကို လုပ်ဆောင်သည်။
Malware သည် ကွန်တိန်နာမှ လွတ်မြောက်ပြီး လက်ခံသူကွန်ပြူတာပေါ်သို့ တက်နိုင်စေမည့် အမှားအယွင်းများ အမြဲရှိနေပါသည်။ အဆိုးဆုံးဟု ယူဆပါက၊ ကွန်တိန်နာအတွင်းရှိ လုပ်ငန်းစဉ်များကို host machine တွင် လုပ်ပိုင်ခွင့်မရှိသော အသုံးပြုသူမှ လုပ်ဆောင်ကြောင်း သေချာစေရမည်။
အသုံးပြုသူဖန်တီးခြင်း။
ကွန်တိန်နာတစ်ခုတွင် အသုံးပြုသူတစ်ဦးကို ဖန်တီးခြင်းသည် Linux ဖြန့်ဝေမှုများတွင် ၎င်းကို ဖန်တီးခြင်းနှင့် မတူပါ။ သို့သော်၊ ကွဲပြားခြားနားသောအခြေခံပုံများအတွက် command များသည်ကွဲပြားနိုင်သည်။
debian-based ဖြန့်ဝေမှုများအတွက်၊ သင်သည် အောက်ပါတို့ကို Dockerfile သို့ ထည့်ရန် လိုအပ်သည်-
RUN groupadd --gid 2000 node
&& useradd --uid 2000 --gid node --shell /bin/bash --create-home node
အယ်လ်ပိုင်းအတွက်-
RUN addgroup -g 2000 node
&& adduser -u 2000 -G node -s /bin/sh -D node
အသုံးပြုသူထံမှ လုပ်ငန်းစဉ်များကို လုပ်ဆောင်ခြင်း။
UID 2000 အသုံးပြုသူတစ်ဦးအနေဖြင့် နောက်ဆက်တွဲလုပ်ငန်းစဉ်များအားလုံးကို လုပ်ဆောင်ရန်၊ လုပ်ဆောင်ရန်-
USER 2000
node အသုံးပြုသူအနေဖြင့် နောက်ဆက်တွဲလုပ်ငန်းစဉ်များအားလုံးကို လုပ်ဆောင်ရန်၊ လုပ်ဆောင်ရန်-
USER node
ပိုမို
တွဲများတပ်ဆင်ခြင်း။
ကွန်တိန်နာတစ်ခုအတွင်း volumes များကို တပ်ဆင်သည့်အခါ၊ အသုံးပြုသူကို ဖိုင်များကို ဖတ်နိုင်/သို့မဟုတ် ရေးနိုင်စွမ်းကို ပေးဆောင်ပါ။ ၎င်းကိုလုပ်ဆောင်ရန်၊ ကွန်တိန်နာအတွင်းရှိအသုံးပြုသူ၏ UID (GID) နှင့် ဖိုင်ကိုဝင်ရောက်ကြည့်ရှုရန်သင့်လျော်သောခွင့်ပြုချက်များရှိသည့်ကွန်တိန်နာပြင်ပအသုံးပြုသူနှင့်ကိုက်ညီရမည်။ ဤကိစ္စတွင်၊ အသုံးပြုသူအမည်များသည် အရေးမကြီးပါ။
Linux ကွန်ပြူတာတွင် မကြာခဏဆိုသလို၊ အသုံးပြုသူ၏ UID နှင့် GID သည် 1000 နှင့် ညီမျှသည်။ ဤသတ်မှတ်ချက်များကို ကွန်ပျူတာ၏ ပထမဆုံးအသုံးပြုသူထံ သတ်မှတ်ထားသည်။
သင်၏ identifier များကို ရှာဖွေရန် လွယ်ကူသည်-
id
သင့်အသုံးပြုသူနှင့်ပတ်သက်သည့် ပြည့်စုံသောအချက်အလက်များကို သင်ရရှိမည်ဖြစ်သည်။
ဥပမာများမှ 2000 ကို သင်၏ identifier ဖြင့် အစားထိုးပါက အရာအားလုံး အဆင်ပြေသွားပါမည်။
UID နှင့် GID ကို အသုံးပြုသူတစ်ဦးအား သတ်မှတ်ပေးခြင်း
အကယ်၍ အသုံးပြုသူသည် ယခင်က ဖန်တီးထားသော်လည်း ခွဲခြားသတ်မှတ်မှုများကို ပြောင်းလဲရန် လိုအပ်ပါက၊ သင်သည် ဤကဲ့သို့ လုပ်ဆောင်နိုင်သည်-
RUN usermod -u 1000 node
&& groupmod -g 1000 node
အကယ်၍ သင်သည် alpine အောက်ခံပုံကို အသုံးပြုနေပါက၊ သင်သည် shadow package ကို ထည့်သွင်းရန် လိုအပ်သည်-
RUN apk add —no-cache shadow
ပုံတည်ဆောက်သည့်အခါ အသုံးပြုသူ ID ကို ကွန်တိန်နာအတွင်း ဖြတ်သွားခြင်း။
အကယ်၍ သင်၏ identifier နှင့် project တွင် အလုပ်လုပ်နေသူများ အားလုံး၏ identifier များသည် ကိုက်ညီပါက Dockerfile တွင် ဤ identifier ကို ညွှန်ပြရန် လုံလောက်ပါသည်။ သို့သော်၊ အသုံးပြုသူ ID များသည် မကြာခဏ မကိုက်ညီပါ။
သင်လိုချင်တဲ့အရာကို ဘယ်လိုအောင်မြင်အောင်လုပ်မလဲဆိုတာ ချက်ချင်းမသိနိုင်ပါဘူး။ ကျွန်တော့်အတွက်ကတော့ Docker ကို ကျွမ်းကျင်အောင်လုပ်တဲ့ လုပ်ငန်းစဉ်မှာ အခက်ခဲဆုံးပါပဲ။ ပုံတစ်ပုံ၏အသက်တာတွင် မတူညီသောအဆင့်များရှိကြောင်း docker အသုံးပြုသူအများစုက မသိကြပါ။ ပထမဦးစွာ Dockerfile ကို အသုံးပြု၍ ပုံအား စုစည်းထားသည်။ ပုံတစ်ခုမှ ကွန်တိန်နာကို လုပ်ဆောင်သည့်အခါ၊ Dockerfile ကို အသုံးမပြုတော့ပါ။
ပုံကိုတည်ဆောက်သည့်အခါ အသုံးပြုသူဖန်တီးမှု ဖြစ်ပေါ်ရမည်။ မည်သည့် လုပ်ငန်းစဉ်များ စတင်ဆောင်ရွက်သည်ကို သတ်မှတ်ရာတွင် အသုံးပြုသူအား ဆုံးဖြတ်ခြင်းနှင့် အကျုံးဝင်ပါသည်။ ဆိုလိုသည်မှာ ကျွန်ုပ်တို့သည် ကွန်တိန်နာအတွင်း UID (GID) ကို တစ်နည်းနည်းဖြင့် ဖြတ်သန်းရမည်ဖြစ်သည်။
Dockerfile တွင် ပြင်ပကိန်းရှင်များကို အသုံးပြုရန် ညွှန်ကြားချက်များကို အသုံးပြုပါသည်။
dockerfile
ARG UID=1000
ARG GID=1000
ENV UID=${UID}
ENV GID=${GID}
RUN usermod -u $UID node
&& groupmod -g $GID node
ဤကဲ့သို့သော docker-compose မှတစ်ဆင့် အကြောင်းပြချက်များကို သင်ဖြတ်သန်းနိုင်သည်-
docker-compose
build:
context: ./src/backend
args:
UID: 1000
GID: 1000
PS Docker ၏ ရှုပ်ထွေးပွေလီမှုအားလုံးကို ကျွမ်းကျင်ရန်၊ စာရွက်စာတမ်း သို့မဟုတ် ဆောင်းပါးများကို ဖတ်ရန် မလုံလောက်ပါ။ သင်အများကြီးလေ့ကျင့်ဖို့လိုတယ်၊ Docker ကိုခံစားဖို့လိုတယ်။
source: www.habr.com