ڈوکر میں صارف

آندرے کوپیلوف، ہمارا CTO، Docker سے محبت کرتا ہے، فعال طور پر استعمال کرتا ہے اور اسے فروغ دیتا ہے۔ ایک نئے مضمون میں، وہ بتاتا ہے کہ ڈوکر میں صارفین کو کیسے بنایا جائے۔ ان کے ساتھ درست کام کریں، کیوں صارفین کو روٹ رائٹس کے ساتھ نہیں چھوڑا جانا چاہیے اور Dockerfile میں مماثل اشارے کے مسئلے کو کیسے حل کیا جائے۔

کنٹینر میں تمام عمل روٹ صارف کے طور پر چلیں گے، جب تک کہ آپ اسے کسی خاص طریقے سے متعین نہ کریں۔ یہ بہت آسان لگتا ہے، کیونکہ اس صارف پر کوئی پابندی نہیں ہے۔ یہی وجہ ہے کہ روٹ کے طور پر کام کرنا سیکورٹی کے نقطہ نظر سے غلط ہے۔ اگر ان کے صحیح دماغ میں کوئی بھی مقامی کمپیوٹر پر روٹ رائٹس کے ساتھ کام نہیں کرتا ہے، تو بہت سے کنٹینرز میں روٹ کے نیچے عمل چلاتے ہیں۔

ہمیشہ ایسے کیڑے ہوتے ہیں جو میلویئر کو کنٹینر سے فرار ہونے اور میزبان کمپیوٹر پر جانے کی اجازت دیتے ہیں۔ بدترین مانتے ہوئے، ہمیں اس بات کو یقینی بنانا چاہیے کہ کنٹینر کے اندر موجود عمل ایسے صارف کے ذریعے چلائے جائیں جس کے میزبان مشین پر کوئی حقوق نہیں ہیں۔

صارف بنانا

کنٹینر میں صارف بنانا اسے لینکس کی تقسیم میں بنانے سے مختلف نہیں ہے۔ تاہم، مختلف بیس امیجز کے لیے کمانڈز مختلف ہو سکتے ہیں۔

ڈیبین پر مبنی تقسیم کے لیے، آپ کو 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. ہدایات کا تفصیلی موازنہ یہاں.

ڈاکر فائل

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

نیا تبصرہ شامل کریں