لينڪس ڏانهن عهد اڪيلائي واري ميڪانيزم کي پورٽ ڪرڻ جو منصوبو

Cosmopolitan C معياري لائبريري جو مصنف ۽ Redbean پليٽ فارم لينڪس لاءِ عهد () آئسوليشن ميڪنزم جي نفاذ جو اعلان ڪيو. عهد اصل ۾ OpenBSD پروجيڪٽ پاران تيار ڪيو ويو هو ۽ توهان کي اجازت ڏئي ٿو ته چونڊيل طور تي ايپليڪيشنن کي غير استعمال ٿيل سسٽم ڪالن تائين رسائي کان روڪيو (ايپليڪيشن لاءِ سسٽم ڪالن جي هڪ قسم جي وائيٽ لسٽ ٺاهي وئي آهي، ۽ ٻيون ڪالون منع ٿيل آهن). لينڪس ۾ موجود سسڪيل رسائي ڪنٽرول ميڪانيزم جي برعڪس، جهڙوڪ seccomp، عهدي واري ميکانيزم کي زمين کان مٿي ٺاهيو ويو آهي ته جيئن ممڪن طور تي استعمال ڪرڻ آسان هجي.

اوپن بي ايس ڊي بنيادي ماحول ۾ ايپليڪيشنن کي الڳ ڪرڻ جي ناڪام ڪوشش سيسٽريس ميڪانيزم کي استعمال ڪندي ظاهر ڪيو ته انفرادي سسٽم ڪالن جي سطح تي اڪيلائي تمام پيچيده ۽ وقت وٺندڙ آهي. متبادل طور تي، هڪ عهد پيش ڪيو ويو، جنهن جي اجازت ڏني وئي اڪيلائي جي ضابطن کي ٺاهڻ جي بغير تفصيل ۾ وڃڻ ۽ تيار ٿيل رسائي ڪلاس کي هٿي ڏيڻ. مثال طور، پيش ڪيل ڪلاس آهن stdio (انپٽ / آئوٽ پُٽ)، rpath (صرف پڙهڻ واريون فائلون)، wpath (فائلون لکڻ)، cpath (فائلون ٺاهڻ)، tmppath (عارضي فائلن سان ڪم ڪرڻ)، inet (نيٽ ورڪ ساکٽ)، يونڪس (يونڪس) ساکٽ) , dns (DNS ريزوليوشن)، getpw (پڙھڻ يوزر ڊيٽابيس تائين رسائي)، ioctl (ڪال ioctl)، proc (پروسيس ڪنٽرول)، exec (شروعاتي عمل)، ۽ id (اجازت ڪنٽرول).

سسٽم ڪالن سان ڪم ڪرڻ جا ضابطا تشريح جي صورت ۾ بيان ڪيا ويا آهن جن ۾ اجازت ڏنل سسٽم ڪال ڪلاس جي فهرست ۽ فائل رستا جو هڪ صف شامل آهي جتي رسائي جي اجازت آهي. تبديل ٿيل ايپليڪيشن کي تعمير ۽ هلائڻ کان پوء، ڪنييل مقرر ڪيل ضابطن جي تعميل جي نگراني جي نوڪري تي قبضو ڪري ٿو.

الڳ الڳ، فري بي ايس ڊي لاءِ عهد جو نفاذ تيار ڪيو پيو وڃي، جيڪو انهن جي ڪوڊ ۾ تبديلي ڪرڻ کان سواءِ ايپليڪيشنن کي الڳ ڪرڻ جي صلاحيت سان ممتاز آهي، جڏهن ته اوپن بي ايس ڊي ۾ عهد ڪال جو مقصد بنيادي ماحول سان سخت انضمام ۽ هر هڪ جي ڪوڊ ۾ تشريح شامل ڪرڻ آهي. درخواست.

لينڪس بندرگاهن جي ڊولپرز فري بي ايس ڊي جو مثال ورتو ۽ ڪوڊ ۾ تبديليون ڪرڻ بدران، هڪ pledge.com ايڊ-آن يوٽيليٽي تيار ڪئي جيڪا توهان کي اجازت ڏئي ٿي ته ايپليڪيشن ڪوڊ کي تبديل ڪرڻ کان سواءِ پابنديون لاڳو ڪري سگهن. مثال طور، صرف stdio، rpath، inet، ۽ threadstdio سسٽم ڪال ڪلاسن تائين رسائي سان curl يوٽيلٽي کي هلائڻ لاءِ، بس هلايو "./pledge.com -p 'stdio rpath inet thread' curl http://example.com" .

عهد افاديت RHEL6 کان وٺي سڀني لينڪس ڊويزنن تي ڪم ڪري ٿي ۽ روٽ رسائي جي ضرورت ناهي. اضافي طور تي، cosmopolitan لائبريري جي بنياد تي، هڪ API مهيا ڪئي وئي آهي پابندين کي منظم ڪرڻ لاءِ پروگرامن جي ڪوڊ ۾ C ٻوليءَ ۾، جيڪا اجازت ڏئي ٿي، ٻين شين جي وچ ۾، مخصوص ايپليڪيشن افعال جي سلسلي ۾ چونڊيل طور تي رسائي کي محدود ڪرڻ لاءِ انڪلوز ٺاهڻ جي.

لاڳو ڪرڻ لاءِ ڪنيل ۾ تبديلين جي ضرورت نه آهي - عهد جي پابندين کي SECOMP BPF ضابطن ۾ ترجمو ڪيو ويو آهي ۽ مقامي لينڪس سسٽم ڪال آئسوليشن ميڪانيزم کي استعمال ڪندي پروسيس ڪيو ويو آهي. مثال طور، ڪال ڪرڻ جو عهد ("stdio rpath"، 0) تبديل ڪيو ويندو هڪ BPF فلٽر ۾ تبديل ڪيو ويندو جامد const struct sock_filter kFilter[] = { /* L0*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, syscall, 0, 14) , /* L1*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(args[1])), /* L0*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 2, 2 - 4, 3)، /* L0* BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 3, 10, 0 - 13), /* L4*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(args[4])), /* L1*/ BPF_ST(BPF_ST | BPF_K, ~5x0), /* L80800*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 6, 1 - 8, 7)، /* L0*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_7, -2)، /* L0*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(args[13])), /* L8*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 8, 2 - 9, 0), /*BP_FJ* (BPF_JMP | BPF_JEQ | BPF_K, 12, 10 - 0, 10)، /*L6*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 12, 11, 0 - 11), /*L17, 0, 13 - 11, /*L12, BPF_MT_BP_RE* اجازت ڏيو )، /*L13*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS، OFF(nr))، /*L14*/ /* ايندڙ فلٽر */ }؛

جو ذريعو: opennet.ru

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