لینکس میں فائل کی اجازت

سب کو سلام. ہم سرگرمی سے کام کر رہے ہیں اور جنوری میں پہلے ہی بہت سے طاقتور لانچوں کی تیاری کر رہے ہیں۔ دوسروں کے درمیان، ہر کسی کے پسندیدہ کورس کے ایک نئے سلسلے کے لیے اندراج کا اعلان کیا گیا ہے۔ "لینکس ایڈمنسٹریٹر". لانچ کی توقع میں، ہم روایتی طور پر مفید مواد کے ترجمے شیئر کرتے ہیں۔

لینکس میں فائل کی اجازت

فائل کی اجازتیں SUID ایگزیکیوٹیبلز کے لیے ایک محفوظ متبادل پیش کرتی ہیں، لیکن پہلے تو یہ تھوڑا سا الجھا ہوا لگ سکتا ہے۔


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

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

اجازتیں ان خدمات کے لیے بہترین ہیں جو عام طور پر ہمیشہ روٹ کے طور پر چلتی ہیں، لیکن کمانڈ لائن یوٹیلیٹیز کا کیا ہوگا؟ خوش قسمتی سے، یہ بھی تعاون یافتہ ہے بشرطیکہ آپ کے پاس صحیح یوٹیلیٹیز انسٹال ہوں۔ اگر آپ Ubuntu استعمال کر رہے ہیں، تو آپ کو مثال کے طور پر پیکیج کی ضرورت ہوگی۔ libcap2-bin. آپ کو ایک غیر قدیم دانا چلانے کی بھی ضرورت ہوگی (ورژن سے 2.6.24).

یہ فنکشن اجازتوں کو قابل عمل فائلوں کے ساتھ منسلک کرنے کی اجازت دیتے ہیں، جیسا کہ SUID بٹ سیٹ کرنا، لیکن صرف اجازتوں کے مخصوص سیٹ کے لیے۔ افادیت setcap فائل سے اجازتوں کو شامل کرنے اور ہٹانے کے لیے استعمال کیا جاتا ہے۔

پہلا قدم آپ کو مطلوبہ اجازتوں کا انتخاب کرنا ہے۔ اس مضمون کی خاطر، میں یہ فرض کر رہا ہوں کہ ایک نیٹ ورک تشخیصی ٹول ہے جسے کہا جاتا ہے۔ tracewalk، جو استعمال کرنے کے قابل ہونا چاہئے۔ خام ساکٹ. اس کے لیے عام طور پر ایپلیکیشن کو روٹ کے طور پر چلانے کی ضرورت ہوتی ہے، لیکن دیکھتے وقت فہرست یہ پتہ چلتا ہے کہ صرف اجازت کی ضرورت ہے CAP_NET_RAW.

یہ فرض کرتے ہوئے کہ آپ اس ڈائریکٹری میں ہیں جہاں بائنری واقع ہے۔ tracewalk، آپ اس اجازت کو اس طرح شامل کرسکتے ہیں:

sudo setcap cap_net_raw=eip tracewalk

ابھی کے لیے لاحقہ کو نظر انداز کریں۔ =eip حل کے لیے، میں اس کے بارے میں چند سیکنڈ میں بات کروں گا۔ نوٹ کریں کہ اجازت نام چھوٹے حروف میں ہے۔ اب آپ چیک کر سکتے ہیں کہ آیا آپ نے اجازتوں کو درست طریقے سے ترتیب دیا ہے:

setcap -v cap_new_raw=eip tracewalk

یا آپ دیے گئے قابل عمل کے لیے سیٹ کردہ تمام اجازتوں کی فہرست بنا سکتے ہیں:

getcap tracewalk

حوالہ کے لیے، آپ ایگزیکیوٹیبل سے تمام اجازتیں اس کے ساتھ ہٹا سکتے ہیں:

setcap -r tracewalk

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

تو اس عجیب لاحقہ کا کیا مطلب ہے؟ =eip? اس کے لیے اجازتوں کی نوعیت کو سمجھنے کی ضرورت ہے۔ ہر عمل میں اجازتوں کے تین سیٹ ہوتے ہیں۔ مؤثر، وراثتی اور اجازت یافتہ:

  • موثر اجازتیں وہ ہیں جو اس بات کی وضاحت کرتی ہیں کہ عمل اصل میں کیا کرسکتا ہے۔ مثال کے طور پر، یہ خام ساکٹ سے نمٹ نہیں سکتا اگر CAP_NET_RAW موثر سیٹ میں نہیں ہے۔
  • دستیاب اجازتیں وہ ہیں جو کسی عمل کی اجازت ہوتی ہے اگر وہ مناسب کال کا استعمال کرتے ہوئے ان کی درخواست کرے۔ وہ کسی عمل کو درحقیقت کچھ کرنے سے روکتے ہیں جب تک کہ یہ اجازت کی درخواست کرنے کے لیے خاص طور پر لکھا نہ گیا ہو۔ یہ عمل کو صرف اس مدت کے لیے مؤثر سیٹ میں تنقیدی اجازتیں شامل کرنے کے لیے لکھے جانے کی اجازت دیتا ہے جب وہ درحقیقت درکار ہوں۔
  • وراثتی اجازتیں وہ ہیں جو پیدا شدہ چائلڈ پروسیس کے قابل رسائی سیٹ میں وراثت میں مل سکتی ہیں۔ سرجری کے دوران fork() یا clone() چائلڈ پروسیس کو ہمیشہ والدین کے عمل کی اجازتوں کی ایک کاپی دی جاتی ہے کیونکہ یہ اس وقت بھی وہی قابل عمل چل رہا ہے۔ ایک وراثت سیٹ استعمال کیا جاتا ہے جب exec() (یا مساوی) کو قابل عمل فائل کو دوسری فائل سے تبدیل کرنے کے لیے کہا جاتا ہے۔ اس مقام پر، عمل کے دستیاب سیٹ کو وراثتی سیٹ کے ذریعے نقاب پوش کر دیا جاتا ہے تاکہ قابل رسائی سیٹ حاصل کیا جا سکے جو نئے عمل کے لیے استعمال کیا جائے گا۔

تو افادیت setcap ہمیں ان تین سیٹوں کی اجازتوں کو ایک دیے گئے قابل عمل کے لیے آزادانہ طور پر شامل کرنے کی اجازت دیتا ہے۔ نوٹ کریں کہ فائل پرمیشنز کے لیے گروپس کے معنی قدرے مختلف طریقے سے بیان کیے گئے ہیں۔

  • دستیاب فائل کی اجازتیں وہ ہوتی ہیں جو ایک قابل عمل فائل کے لیے ہمیشہ دستیاب ہوتی ہیں، یہاں تک کہ اگر پیرنٹ پروسیس جس نے اسے بلایا ہے اس کے پاس نہیں ہے۔ انہیں "زبردستی" اجازت نامے کہا جاتا تھا۔
  • وراثت میں ملی فائل کی اجازت ایک اضافی ماسک کی وضاحت کرتی ہے جسے کالنگ کے عمل کے سیٹ سے اجازتیں ہٹانے کے لیے بھی استعمال کیا جا سکتا ہے۔ وہ کالنگ کے عمل کے وراثت میں ملنے والے سیٹ کے علاوہ بھی درخواست دیتے ہیں، لہذا اجازت صرف اس صورت میں وراثت میں ملتی ہے جب یہ دونوں سیٹوں میں موجود ہو۔
  • موثر فائل کی اجازت دراصل صرف ایک بٹ ہوتی ہے، سیٹ نہیں، اور اگر سیٹ کی جاتی ہے، تو اس کا مطلب ہے کہ پورا دستیاب سیٹ بھی نئے پراسیس کے موثر سیٹ میں کاپی کیا جاتا ہے۔ اس کا استعمال ان عملوں میں اجازتیں شامل کرنے کے لیے کیا جا سکتا ہے جن کی درخواست کرنے کے لیے خاص طور پر نہیں لکھا گیا تھا۔ چونکہ یہ تھوڑا سا ہے، اگر آپ اسے کسی بھی اجازت کے لیے سیٹ کرتے ہیں، تو اسے تمام اجازتوں کے لیے سیٹ ہونا چاہیے۔ آپ اسے میراثی بٹ کے طور پر سوچ سکتے ہیں کیونکہ اس کا استعمال ان ایپلی کیشنز کو اجازت دینے کے لیے کیا جاتا ہے جو ان کی حمایت نہیں کرتی ہیں۔

کے ذریعے اجازتوں کی وضاحت کرتے وقت setcap تین حروف e, i и p کا حوالہ دیتے ہیں مؤثر، وراثت اور قابل رسائی بالترتیب سیٹ کرتا ہے. تو، پہلے کی تفصیلات:

sudo setcap cap_net_raw=eip tracewalk

...اس بات کی نشاندہی کرتا ہے کہ قرارداد CAP_NET_RAW دستیاب اور وراثتی سیٹوں میں شامل کرنا ضروری ہے اور یہ کہ موثر بٹ کو بھی سیٹ کیا جانا چاہیے۔ یہ فائل پر پہلے سے سیٹ کردہ اجازتوں کو اوور رائیڈ کر دے گا۔ ایک ساتھ متعدد اجازتیں سیٹ کرنے کے لیے، کوما سے الگ کردہ فہرست استعمال کریں:

sudo setcap cap_net_admin,cap_net_raw=eip tracewalk

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

سب سے پہلے، فائل کی صلاحیتیں سملنک کے ساتھ کام نہیں کرتی ہیں - آپ کو انہیں بائنری فائل پر لاگو کرنا ہوگا (یعنی سملنک کا ہدف)۔

دوم، وہ تشریح شدہ اسکرپٹ کے ساتھ کام نہیں کرتے ہیں۔ مثال کے طور پر، اگر آپ کے پاس Python اسکرپٹ ہے جسے آپ اجازت دینا چاہتے ہیں، تو آپ کو اسے ازگر کے ترجمان کو خود تفویض کرنا ہوگا۔ ظاہر ہے کہ یہ ایک ممکنہ سیکیورٹی مسئلہ ہے کیونکہ اس کے بعد اس مترجم کے ساتھ عمل میں آنے والی تمام اسکرپٹس کو مخصوص اجازت حاصل ہوگی، حالانکہ یہ اب بھی اسے SUID بنانے سے کافی بہتر ہے۔ ایسا لگتا ہے کہ سب سے عام کام سی یا اس کے مساوی میں ایک الگ ایگزیکیوٹیبل لکھنا ہے جو ضروری کارروائیاں انجام دے سکتا ہے اور اسے اسکرپٹ سے کال کرسکتا ہے۔ یہ Wireshark کے استعمال کردہ نقطہ نظر سے ملتا جلتا ہے جو بائنری استعمال کرتا ہے۔ /usr/bin/dumpcap مراعات یافتہ آپریشن انجام دینے کے لیے:

$ getcap /usr/bin/dumpcap 
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip

تیسرا، اگر آپ ماحولیاتی متغیر استعمال کرتے ہیں تو فائل کی اجازتیں غیر فعال ہوجاتی ہیں۔ LD_LIBRARY_PATH واضح سیکورٹی وجوہات کے لئے(1). اسی پر لاگو ہوتا ہے۔ LD_PRELOAD، جہاں تک میں جانتا ہوں.

1. چونکہ حملہ آور واضح طور پر معیاری لائبریریوں میں سے کسی ایک کو تبدیل کر سکتا ہے اور استعمال کر سکتا ہے۔ LD_LIBRARY_PATHاپنی لائبریری کو سسٹم ون کی ترجیح میں بلانے پر مجبور کرنے کے لیے، اور اس لیے اس کا اپنا صوابدیدی کوڈ انہی مراعات کے ساتھ عمل میں لایا جائے جو کالنگ ایپلی کیشن کو حاصل ہے۔

بس۔ کورس پروگرام کے بارے میں مزید تفصیلات یہاں پر مل سکتی ہیں۔ ویبینار، جو 24 جنوری کو ہوگا۔

ماخذ: www.habr.com

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