کنٹینر میں تمام عمل روٹ صارف کے طور پر چلیں گے، جب تک کہ آپ اسے کسی خاص طریقے سے متعین نہ کریں۔ یہ بہت آسان لگتا ہے، کیونکہ اس صارف پر کوئی پابندی نہیں ہے۔ یہی وجہ ہے کہ روٹ کے طور پر کام کرنا سیکورٹی کے نقطہ نظر سے غلط ہے۔ اگر ان کے صحیح دماغ میں کوئی بھی مقامی کمپیوٹر پر روٹ رائٹس کے ساتھ کام نہیں کرتا ہے، تو بہت سے کنٹینرز میں روٹ کے نیچے عمل چلاتے ہیں۔
ہمیشہ ایسے کیڑے ہوتے ہیں جو میلویئر کو کنٹینر سے فرار ہونے اور میزبان کمپیوٹر پر جانے کی اجازت دیتے ہیں۔ بدترین مانتے ہوئے، ہمیں اس بات کو یقینی بنانا چاہیے کہ کنٹینر کے اندر موجود عمل ایسے صارف کے ذریعے چلائے جائیں جس کے میزبان مشین پر کوئی حقوق نہیں ہیں۔
صارف بنانا
کنٹینر میں صارف بنانا اسے لینکس کی تقسیم میں بنانے سے مختلف نہیں ہے۔ تاہم، مختلف بیس امیجز کے لیے کمانڈز مختلف ہو سکتے ہیں۔
ڈیبین پر مبنی تقسیم کے لیے، آپ کو 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
نوڈ صارف کے طور پر تمام بعد کے عمل کو چلانے کے لیے، چلائیں:
USER node
مزید میں
بڑھتے ہوئے حجم
کنٹینر کے اندر حجم بڑھتے وقت، صارف کو فائلوں کو پڑھنے اور/یا لکھنے کی صلاحیت فراہم کریں۔ ایسا کرنے کے لیے، کنٹینر میں موجود صارف کی UID (GID) اور کنٹینر سے باہر کے صارف جس کے پاس فائل تک رسائی کے لیے مناسب اجازتیں ہیں، کا مماثل ہونا چاہیے۔ اس معاملے میں، صارف ناموں سے کوئی فرق نہیں پڑتا ہے۔
اکثر لینکس کمپیوٹر پر، صارف کی UID اور GID 1000 کے برابر ہوتے ہیں۔ یہ شناخت کنندہ کمپیوٹر کے پہلے صارف کو تفویض کیے جاتے ہیں۔
اپنے شناخت کنندگان کو تلاش کرنا آسان ہے:
id
آپ اپنے صارف کے بارے میں جامع معلومات حاصل کریں گے۔
مثالوں سے 2000 کو اپنے شناخت کنندہ سے بدل دیں اور سب کچھ ٹھیک ہو جائے گا۔
صارف کو UID اور GID تفویض کرنا
اگر صارف پہلے بنایا گیا تھا، لیکن آپ کو شناخت کنندگان کو تبدیل کرنے کی ضرورت ہے، تو آپ اسے اس طرح کر سکتے ہیں:
RUN usermod -u 1000 node
&& groupmod -g 1000 node
اگر آپ الپائن بیس امیج استعمال کر رہے ہیں، تو آپ کو شیڈو پیکج انسٹال کرنے کی ضرورت ہے:
RUN apk add —no-cache shadow
تصویر بناتے وقت کنٹینر کے اندر یوزر آئی ڈی پاس کرنا
اگر آپ کی آئی ڈی اور پراجیکٹ پر کام کرنے والے تمام لوگوں کی آئی ڈی آپس میں ملتی ہیں، تو بس اس آئی ڈی کو ڈاکر فائل میں بتا دیں۔ تاہم، اکثر یوزر آئی ڈیز مماثل نہیں ہوتیں۔
آپ جو چاہتے ہیں اسے کیسے حاصل کیا جائے فوری طور پر واضح نہیں ہے۔ میرے لئے، ڈوکر میں مہارت حاصل کرنے کے عمل میں یہ سب سے مشکل چیز تھی۔ بہت سے ڈاکر صارفین کو یہ احساس نہیں ہے کہ تصویر کی زندگی میں مختلف مراحل ہوتے ہیں۔ سب سے پہلے، تصویر کو Dockerfile کا استعمال کرتے ہوئے جمع کیا جاتا ہے۔ تصویر سے کنٹینر چلاتے وقت، Dockerfile اب استعمال نہیں ہوتا ہے۔
صارف کی تخلیق اس وقت ہونی چاہیے جب تصویر بنائی جائے۔ اسی کا اطلاق اس صارف کے تعین پر ہوتا ہے جس کے تحت عمل شروع کیا جاتا ہے۔ اس کا مطلب یہ ہے کہ ہمیں کسی نہ کسی طرح کنٹینر کے اندر UID (GID) پاس کرنا ہوگا۔
Dockerfile میں بیرونی متغیرات کو استعمال کرنے کے لیے ہدایات کا استعمال کیا جاتا ہے۔
ڈاکر فائل
ARG UID=1000
ARG GID=1000
ENV UID=${UID}
ENV GID=${GID}
RUN usermod -u $UID node
&& groupmod -g $GID node
آپ اس طرح ڈوکر کمپوز کے ذریعے دلائل پاس کرسکتے ہیں:
ڈوکر کمپوز
build:
context: ./src/backend
args:
UID: 1000
GID: 1000
PS Docker کی تمام پیچیدگیوں میں مہارت حاصل کرنے کے لیے، دستاویزات یا مضامین کو پڑھنا کافی نہیں ہے۔ آپ کو بہت مشق کرنے کی ضرورت ہے، آپ کو ڈوکر کے بارے میں احساس دلانے کی ضرورت ہے۔
ماخذ: www.habr.com