لينڪس ۾ فائل جي اجازت

هيلو سڀ. اسان فعال طور تي ڪم ۾ حاصل ڪري رهيا آهيون ۽ اڳ ۾ ئي جنوري ۾ ڪيترائي طاقتور لانچ تيار ڪري رهيا آهيون. ٻين جي وچ ۾، هر ڪنهن جي پسنديده ڪورس جي نئين اسٽريم لاءِ داخلا جو اعلان ڪيو ويو آهي. "لينڪس ايڊمنسٽريٽر". لانچ جي توقع ۾، اسان روايتي طور تي مفيد مواد جي ترجمي کي حصيداري ڪندا آهيون.

لينڪس ۾ فائل جي اجازت

فائل جي اجازتون پيش ڪن ٿيون محفوظ متبادل 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

ريفرنس لاءِ، توھان پڻ ھٽائي سگھوٿا سڀ اجازتون executeable کان:

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

اجازتن جي ھدايت هن سڀني کي وڌيڪ تفصيل سان بحث ڪيو، پر اميد آهي ته هن پوسٽ کي ختم ڪري ڇڏيو آهي جيڪو ٿورو ٿي رهيو آهي. ذڪر ڪرڻ لاءِ فقط چند اهڃاڻ ۽ چالون رهجي ويون آهن.

پهريون، فائل جون صلاحيتون symlinks سان ڪم نه ٿيون ڪن - توهان کي انهن کي بائنري فائل تي لاڳو ڪرڻو پوندو (يعني symlink جو ٽارگيٽ).

ٻيو، اهي تشريح ٿيل اسڪرپٽ سان ڪم نه ڪندا آهن. مثال طور، جيڪڏهن توهان وٽ هڪ Python اسڪرپٽ آهي جنهن کي توهان اجازت ڏيڻ چاهيو ٿا، توهان کي ان کي پٿون مترجم کي تفويض ڪرڻ گهرجي. ظاهر آهي اهو هڪ امڪاني سيڪيورٽي مسئلو آهي ڇو ته پوءِ ان مترجم سان گڏ ڪيل سڀني اسڪرپٽس کي مخصوص اجازت هوندي، جيتوڻيڪ اهو اڃا به بهتر آهي ان کي SUID ڪرڻ کان. سڀ کان وڌيڪ عام ڪم ڪرڻ لڳي ٿو C يا برابر ۾ هڪ الڳ قابل عمل لکڻ جيڪو ضروري عملن کي انجام ڏئي سگهي ٿو ۽ ان کي اسڪرپٽ مان ڪال ڪري سگهي ٿو. اهو ساڳيو طريقو آهي جيڪو 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

تبصرو شامل ڪريو