Kubernetes SecurityContext میں لینکس کی صلاحیتوں کو شامل کریں یا ہٹا دیں۔

Kubernetes Securitycontext My Lynks Ky Slahytw Kw Shaml Kry Ya A Dy



کوبرنیٹس کنٹینر میں ہر پوڈ اور کنٹینر کو فراہم کردہ مراعات کی ڈگری کا انتظام کرنا مشکل ہو سکتا ہے۔ ہم پوڈ اور کنٹینر سے لینکس کی صلاحیتوں کو شامل کرنے یا حذف کرنے کے لیے Kubernetes SecurityContext صلاحیتوں کو استعمال کر سکتے ہیں تاکہ کنٹینر کی حفاظت کو بڑھایا جا سکے۔ یہ مضمون سیکیورٹی کو استعمال کرنے پر توجہ مرکوز کرتا ہے تاکہ صلاحیتوں کو شامل کرنے اور حذف کرنے کی ایک سادہ مثال کو لاگو کیا جا سکے۔ تمام صلاحیتوں کو حذف کرنے اور کنٹینر میں صرف ایک صلاحیت شامل کرنے کے لیے یامل فائل کی ترتیب نمونے کی مثال میں فراہم کی گئی ہے۔ اس مضمون میں، proc اور capsh کمانڈز کنٹینر کی صلاحیتوں کو ظاہر کرنے کے لیے استعمال کیے جاتے ہیں۔

مرحلہ 1: منی کیوب سرور شروع کریں۔







سب سے پہلے، minikube سرور شروع کریں تاکہ آپ اپنی ایپلیکیشن چلا سکیں اور kubectl ہدایات استعمال کر سکیں۔ آپ Kubernetes ماحول میں minikube سرور کا استعمال کرتے ہوئے اپنے نوڈس، پوڈز، اور یہاں تک کہ کلسٹر بھی لگا سکتے ہیں۔ minikube کو فعال موڈ میں برقرار رکھنے کے لیے درج ذیل کمانڈ کا استعمال کیا جانا چاہیے:



> منی کیوب شروع کریں۔



ایسا کرنے سے، منی کیوب سرور آن ہو جاتا ہے اور Kubernetes ماحول استعمال کے لیے تیار ہو جاتا ہے۔





مرحلہ 2: ایک Kubernetes YAML فائل بنائیں



دوسرے مرحلے میں، پوڈ کو تعینات کرنے کے لیے YAML فائل بنائیں۔

نینو کا استعمال کرتے ہوئے yaml فائل بنانے کے لیے اقدامات پر عمل کریں:

  • ڈائریکٹری کے راستے پر جائیں جہاں آپ فائل بنانا چاہتے ہیں یا موجودہ فائل میں ترمیم کرنا چاہتے ہیں۔
  • فائل کا نام کے بعد نینو کمانڈ ٹائپ کریں۔

درج ذیل نینو کمانڈ کو چلائیں۔ یہ ایک YAML کنفیگریشن فائل بناتا ہے جس کا نام 'nano podsample.yaml' ہے۔

> نینو podsample.yaml

آئیے اگلے مرحلے پر چلتے ہیں جو کہ آپ کو podsample.yaml فائل کو کنفیگر کرنے کا طریقہ جاننے میں مدد فراہم کرتا ہے۔

مرحلہ 3: YAML فائل کو ترتیب دیں۔

ہم پچھلے مرحلے میں کیپش ٹول شامل کرتے ہیں تاکہ ہم اپنے کنٹینر کی صلاحیتوں کو دیکھ سکیں۔

نوٹ کریں کہ ان میں سے کوئی بھی پیرامیٹرز اس کنٹینر کے سیکیورٹی سیکشن کے لیے کنفیگر نہیں کیے گئے ہیں۔ اس طرح، وہ سب سسٹم ڈیفالٹس پر سیٹ ہیں۔ اس حقیقت پر غور کریں کہ یہ کنٹینر پہلے سے طے شدہ صارف کے طور پر کام کرتا ہے جو Dockerfile میں فراہم کیا جاتا ہے جہاں سے اسے بنایا جاتا ہے اگر Kubernetes میں اس کے لیے کسی صارف کی وضاحت نہیں کی گئی ہے۔ بہت سے کنٹینرز کے لیے، یہ ڈیفالٹ صارف جڑ ہے۔

مرحلہ 4: ایک پوڈ بنائیں

اس مرحلے میں، آئیے درج ذیل منسلک کمانڈ کے ساتھ podsample.yaml بنائیں:

> kubectl لاگو کریں -f podsample.yaml

مرحلہ 5: صلاحیتوں کی جانچ کریں۔

پچھلے مرحلے میں، ایک پوڈ بنایا اور چل رہا ہے.

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

> $ kubectl exec - -stdin - -tty ٹوپیاں -- راکھ

کیپش کمانڈ کا استعمال کرتے ہوئے، کنٹینر کی ڈیفالٹ صلاحیتوں کو دیکھنا ممکن ہے جو درج ذیل ہیں:

ہم دیے گئے آؤٹ پٹ سے مشاہدہ کر سکتے ہیں کہ کنٹینر میں بہت سی ڈیفالٹ صلاحیتیں ہیں جو رن ٹائم پر کنٹینر کو دی جاتی ہیں۔

مرحلہ 6: گرا دیں۔ سنگل قابلیت Y Kubernetes SecurityContext میں

اس مرحلے میں، ہم کنٹینر کی واحد صلاحیت کو چھوڑ دیتے ہیں۔

آئیے درج ذیل کمانڈ کا استعمال کرتے ہوئے yaml فائل کو ترتیب دیں:

> نینو dropod.yaml

اس کے بعد، نیچے دی گئی کمانڈ کا استعمال کرتے ہوئے droppod.yaml فائل کو کنفیگر کرنے کے لیے منتقل کریں:

> kubectl لاگو کریں -f droppod.yaml

قدم 7 : YAML فائل میں واحد صلاحیت شامل کرنے کے لیے ترتیب دیں۔

اس مرحلے میں، yaml فائل (dropped.yaml) کو کھولیں جو مرحلہ 6 میں بنائی گئی تھی۔ پھر، کنٹینر کو اس طرح سیٹ کریں کہ اسے CAP_MKNOD صلاحیت تک رسائی حاصل نہ ہو، جو نئے فائل سسٹم نوڈس بنانے کی صلاحیت کو ہٹا دیتا ہے۔

ترتیب شدہ فائل جیسا کہ دکھایا گیا ہے:

قدم 8 : صلاحیتوں کی جانچ کریں۔

yaml فائل کو CAP_MKNOD کی صلاحیت کو چھوڑنے کے لیے ترتیب دیا گیا ہے۔

اس مرحلے میں، مندرجہ ذیل کمانڈ کا استعمال کرتے ہوئے کنٹینر کی صلاحیتوں کو چیک کرنے کے لیے dropcaps.yaml فائل کو چلائیں:

> $ kubectl exec - -stdin - -tty ڈراپ کیپس -- راکھ

صلاحیتوں کو ڈراپ کیپس فائل چلا کر چیک کیا جا سکتا ہے:

> # کیپش - - پرنٹ

ہم مشاہدہ کر سکتے ہیں کہ اس پوڈ نے پہلی پوڈ کے مقابلے CAP_MKNOD کی صلاحیت کو گرا دیا ہے۔

قدم 9 : Kubernetes SecurityContext میں تمام صلاحیتوں کو چھوڑ دیں۔

چونکہ Kubernetes ایک ہی صلاحیت کو چھوڑ سکتا ہے، اس لیے یہ securityContext کے ذریعے تمام صلاحیتوں کو بھی گرا سکتا ہے۔ اس مرحلے میں، دی گئی کمانڈ کا مطلب لے کر کنٹینر کی تمام صلاحیتوں کو چھوڑ دیں:

> نینو samplenocap.yaml

اس کے بعد، مندرجہ ذیل کمانڈ کا استعمال کرتے ہوئے samplenocap.yaml فائل کو ترتیب دیں:

> kubectl بنائیں -f samplenocap.yaml

اب، آئیے اگلے مرحلے کی طرف بڑھتے ہیں تاکہ ہماری سیکورٹی کے سیاق و سباق کی ترتیبات میں موجود تمام صلاحیتوں کو چھوڑ دیں۔

مرحلہ 10: YAML فائل میں تمام صلاحیتوں کو ترتیب دیں۔

اس مرحلے میں، yaml فائل کو کھولیں جو مرحلہ 9 میں بنائی گئی تھی۔ پھر، کنٹینر کے اندر کنفیگر کریں۔securityContext  اور کنٹینر کی تمام صلاحیتوں کو چھوڑ دیں۔

ترتیب شدہ فائل جیسا کہ دکھایا گیا ہے:

قدم گیارہ : صلاحیتوں کی جانچ کریں۔

صلاحیتوں کے بارے میں معلومات دیکھنے کے لیے nocaps کو capsh میں چلائیں۔ اس مرحلے میں، درج ذیل کمانڈ کا استعمال کریں اور کنٹینر کی تمام صلاحیتوں کو ظاہر کریں:

> کیوبیکٹل exec - -stdin - -tty nocaps -- راکھ

کیپش میں سیمپلنوکیپس یا ایم ایل فائل کو چلا کر صلاحیتوں کو درج ذیل مثال میں چیک کیا جا سکتا ہے۔

> # کیپش - - پرنٹ

پچھلا آؤٹ پٹ ظاہر کرتا ہے کہ موجودہ = '' اور باؤنڈنگ سیٹ ='' اب خالی ہیں۔ صلاحیتوں کو کامیابی سے گرا دیا گیا ہے۔

مرحلہ نمبر 1 2 : Bash انسٹال کریں۔

اس مرحلے میں، apk کے ذریعے Bash انسٹال کریں کیونکہ اگر ہمارے پاس کوئی صلاحیت نہیں ہے تو سسٹم کے کچھ فنکشن کام نہیں کریں گے۔ اگرچہ ہمارا کنٹینر روٹ کے طور پر کام کر رہا ہے، Bash پیکیج کی تنصیب ناکام ہو جاتی ہے۔

> # apk add bash

مرحلہ نمبر 1 3 : صلاحیتوں کی معلومات کو چیک کریں۔

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

> # cd/proc/1/

یہاں، ہم دیکھ سکتے ہیں کہ اس مخصوص کنٹینر میں کوئی قابل صلاحیت نہیں ہے۔ یہ تمام اقدار صفر ہیں۔

مرحلہ نمبر 1 4 : Kubernetes SecurityContext میں ایک قابلیت کا اضافہ کرنا

پچھلے مراحل میں، ہم نے ایک واحد صلاحیت کو چھوڑ دیا جو CAP_MKNOD ہے اور تمام صلاحیتوں کو چھوڑ دیا۔ لیکن، اس مرحلے میں، ہم صلاحیتوں کو واپس شامل کر سکتے ہیں۔

yAML فائل بنانے کے لیے درج ذیل کمانڈ پر عمل کریں:

> نینو sampleadd.yaml

اس کے بعد، sampleadd.yaml فائل کو ترتیب دیں۔

> kubectl بنائیں -f sampleadd.yaml

اب، آئیے sampleadd.yaml فائل کو آزماتے ہیں اور اپنی securityContext سیٹنگز میں ایک گنجائش شامل کرتے ہیں۔

مرحلہ نمبر 1 5 : YAML فائل میں واحد صلاحیت کو ترتیب دیں۔

اب، spec.container.securityContext میں موجود صلاحیت کو capabilities.add [“MKNOD”] میں شامل کر کے فائل کو کنفیگر کرتے ہیں۔

صلاحیت YAML فائل میں ظاہر ہوتی ہے۔

قدم 16 : صلاحیتوں کی جانچ کریں۔

اس مرحلے میں، درج ذیل کمانڈ کا استعمال کرتے ہوئے صلاحیتوں کو چیک کرنے کے لیے addcaps چلائیں:

> کیوبیکٹل exec - -stdin - -tty addcaps -- کے طور پر

اضافی صلاحیت کو درج ذیل دیے گئے آؤٹ پٹ میں دیکھا جا سکتا ہے:

موجودہ = cap_mknod+ep

باؤنڈنگ سیٹ = cap_mknod

> # کیپش - - پرنٹ

نتیجہ

آپ نے سب سے پہلے لاگو کردہ مثال سے کنٹینر کی ڈیفالٹ صلاحیتوں کے بارے میں سیکھا جو رن ٹائم پر تفویض کی جاتی ہیں جو capsh کمانڈ کے ساتھ ظاہر ہوتی ہیں۔ اگلا، آپ نے CAP_MKNOD نامی کنٹینر میں ایک ہی صلاحیت کو چھوڑنا سیکھا۔ پھر، آپ نے یہ بھی سیکھا کہ کنٹینر کی تمام صلاحیتوں کو //drop: -all کنفیگریشن کا استعمال کرتے ہوئے چھوڑنا ہے۔ پھر، ہم نے کنٹینرز کی صلاحیتوں کو ظاہر کرنے کے لیے دو طریقے استعمال کیے – capsh اور proc کمانڈز کا استعمال کرتے ہوئے۔