لینکس ته د ژمنې جلا کولو میکانیزم پورټ کولو پروژه

د کاسموپولیټان معیاري C کتابتون لیکوال او د ریډبین پلیټ فارم د لینکس لپاره د ژمن () جلا کولو میکانیزم پلي کول اعلان کړل. ژمنه په اصل کې د OpenBSD پروژې لخوا رامینځته شوې او تاسو ته اجازه درکوي په انتخابي ډول د غیر کارول شوي سیسټم تلیفونونو ته د لاسرسي څخه غوښتنلیکونه منع کړئ (د غوښتنلیک لپاره د سیسټم تلیفونونو یو ډول سپین لیست رامینځته شوی ، او نور تلیفونونه منع دي). په لینکس کې د سیسټم کال محدودیت میکانیزمونو برخلاف ، لکه seccomp ، د ژمنې میکانیزم په اصل کې د امکان تر حده ساده کولو لپاره ډیزاین شوی و.

د سیسټریس میکانیزم په کارولو سره د OpenBSD اساس چاپیریال کې د غوښتنلیکونو جلا کولو ناکامه نوښت وښوده چې د انفرادي سیسټم تلیفونونو په کچه انزوا خورا پیچلې او د وخت مصرف کونکی و. د بدیل په توګه ، یوه ژمنه وړاندیز شوې وه ، کوم چې دا امکان رامینځته کړی چې پرته له توضیحاتو ته لاړ شي او د لاسرسي چمتو شوي ټولګیو کې لاسوهنه وکړي. د مثال په توګه، وړاندیز شوي ټولګي دي stdio (input/output)، rpath (یوازې د لوستلو فایلونه)، wpath (فایلونه ولیکئ)، cpath (فایلونه جوړ کړئ)، tmppath (د لنډمهاله فایلونو سره کار وکړئ)، inet (د شبکې ساکټونه)، یونیکس ( یونیکس ساکټ)، dns (DNS ریزولوشن)، getpw (د کاروونکي ډیټابیس ته د لاسرسي لوستل)، ioctl (ioctl call)، proc (د پروسې مدیریت)، exec (د پروسې پیل) او id (د لاسرسي حقونو مدیریت).

د سیسټم زنګونو سره د کار کولو قواعد د تشریحاتو په بڼه مشخص شوي، پشمول د سیسټم کالونو د اجازه ورکړل شوي ټولګیو لیست او د فایل لارو یوه لړۍ چې د لاسرسي اجازه لري. د تعدیل شوي غوښتنلیک جوړولو او پیل کولو وروسته، کرنل د ټاکل شویو مقرراتو سره سم د څارنې دنده په غاړه اخلي.

د فری بی ایس ډی لپاره د ژمنې جلا پلي کول رامینځته کیږي ، کوم چې د دوی کوډ کې بدلون کولو پرته د غوښتنلیکونو جلا کولو وړتیا لخوا توپیر کیږي ، پداسې حال کې چې په OpenBSD کې د ژمنې کال هدف د اساس چاپیریال سره کلک ادغام او د هر یو کوډ کې تشریحات اضافه کول دي. غوښتنلیک

د لینکس لپاره د ژمنې پورټ پراختیا کونکو د FreeBSD مثال اخیستی او په کوډ کې د بدلونونو پرځای ، د اډ-آن یوټیلیټ pledge.com چمتو کړی چې تاسو ته اجازه درکوي د غوښتنلیک کوډ بدلولو پرته محدودیتونه پلي کړئ. د مثال په توګه، یوازې د stdio، rpath، inet او threadstdio سیسټم کال کلاسونو ته د لاسرسي سره د curl یوټیلیټ چلولو لپاره، یوازې "./pledge.com -p 'stdio rpath inet thread' curl http://example.com" چل کړئ.

د ژمنې کارونې په ټولو لینکس توزیعونو کار کوي چې د RHEL6 سره پیل کیږي او روټ لاسرسي ته اړتیا نلري. سربیره پردې ، د کاسموپولیټان کتابتون پراساس ، په C ژبه کې د برنامه کوډ کې د محدودیتونو اداره کولو لپاره API چمتو شوی ، کوم چې د نورو شیانو په مینځ کې اجازه ورکوي چې د ځینې غوښتنلیک دندو پورې اړوند د لاسرسي محدودولو لپاره په انتخابي ډول د لاسرسي محدودولو لپاره کلاګانې رامینځته کړي.

تطبیق د کرنل بدلونونو ته اړتیا نلري - د ژمنې محدودیتونه د SECOMP BPF قواعدو کې ژباړل شوي او د اصلي لینکس سیسټم کال جلا کولو میکانیزم په کارولو سره پروسس کیږي. د مثال په توګه، د زنګ ژمنه("stdio rpath"، 0) به د BPF فلټر جامد جوړښت ته بدل شي 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_ALMT_BPFMT | 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 - 0) , /* L13*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(args[8])), /* L8*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 2, 9 - 0, 12)، /*L10 BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0, 10 - 6, 12), /*L11*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0, 11, 17 - 0), /_BP13 / BPFMT*, //*BFPMT SECOMP_RET_ALLOW)، /*L11*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS، OFF(nr))، /*L12*/ /* بل فلټر */ };

سرچینه: opennet.ru

Add a comment