Пројекат за пренос механизма изолације залога на Линук

Аутор стандардне библиотеке Цосмополитан Ц и платформе Редбеан најавио је имплементацију механизма изолације пледге() за Линук. Залога је првобитно развијена од стране ОпенБСД пројекта и омогућава вам да селективно забраните апликацијама приступ неискоришћеним системским позивима (за апликацију се формира нека врста беле листе системских позива, а други позиви су забрањени). За разлику од механизама за контролу приступа системском позиву који су доступни у Линуку, као што је сеццомп, механизам залагања је дизајниран од самог почетка да буде што лакши за коришћење.

Неуспела иницијатива да се апликације изолују у основном окружењу ОпенБСД коришћењем систраце механизма показала је да је изолација на нивоу појединачних системских позива превише компликована и дуготрајна. Као алтернатива, предложен је залог, који је омогућавао креирање правила изолације без упуштања у детаље и манипулације готовим класама приступа. На пример, понуђене класе су стдио (улаз/излаз), рпатх (само читање датотека), впатх (писање датотека), цпатх (креирање датотека), тмппатх (рад са привременим датотекама), инет (мрежне утичнице), уник (уникс соцкетс) , днс (ДНС резолуција), гетпв (приступ за читање корисничкој бази података), иоцтл (позив иоцтл), проц (контрола процеса), екец (покретање процеса) и ид (контрола дозвола).

Правила за рад са системским позивима наведена су у облику напомена које укључују листу дозвољених класа системских позива и низ путања датотека којима је дозвољен приступ. Након изградње и покретања модификоване апликације, кернел преузима посао надгледања усклађености са наведеним правилима.

Одвојено, развија се имплементација залог за ФрееБСД, која се одликује могућношћу изолације апликација без уношења измена у њихов код, док је у ОпенБСД-у позив залагања усмерен на чврсту интеграцију са основним окружењем и додавање напомена у код сваке апликација.

Програмери Линук порта залог су узели пример ФрееБСД-а и, уместо да праве промене у коду, припремили су додатак пледге.цом који вам омогућава да примените ограничења без промене кода апликације. На пример, да бисте покренули услужни програм цурл са приступом само класама системских позива стдио, рпатх, инет и тхреадстдио, само покрените "./пледге.цом -п 'стдио рпатх инет тхреад' цурл хттп://екампле.цом" .

Услужни програм за залагање ради на свим дистрибуцијама Линука од РХЕЛ6 и не захтева роот приступ. Додатно, на основу космополитске библиотеке, обезбеђен је АПИ за управљање ограничењима у коду програма у језику Ц, који омогућава, између осталог, креирање енклава за селективно ограничавање приступа у односу на одређене функције апликације.

Имплементација не захтева промене у језгру – ограничења залагања се преводе у СЕЦЦОМП БПФ правила и обрађују коришћењем природног механизма за изолацију Линук системских позива. На пример, позивање пледге("стдио рпатх", 0) ће бити конвертовано у БПФ филтер статички цонст струцт соцк_филтер кФилтер[] = { /* Л0*/ БПФ_ЈУМП(БПФ_ЈМП | БПФ_ЈЕК | БПФ_К, сисцалл, 0, 14 - 1) , / * Л1*/ БПФ_СТМТ(БПФ_ЛД | БПФ_В | БПФ_АБС, ОФФ(аргс[0])), /* Л2*/ БПФ_ЈУМП(БПФ_ЈМП | БПФ_ЈЕК | БПФ_К, 2, 4 - 3, 0), /* Л3*/ БПФ_ЈУМП( БПФ_ЈМП | БПФ_ЈЕК | БПФ_К, 10, 0, 13 - 4), /* Л4*/ БПФ_СТМТ(БПФ_ЛД | БПФ_В | БПФ_АБС, ОФФ(аргс[1])), /* Л5*/ БПФ_СТАЛМТ( | БПФ_К, ~0к80800), /* Л6*/ БПФ_ЈМП(БПФ_ЈМП | БПФ_ЈЕК | БПФ_К, 1, 8 - 7, 0), /* Л7*/ БПФ_ЈУМП(БПФ_ЈМП | БПФ_ЈЕК | БПФ_2), 0 - - /* Л13*/ БПФ_СТМТ(БПФ_ЛД | БПФ_В | БПФ_АБС, ОФФ(аргс[8])), /* Л8*/ БПФ_ЈУМП(БПФ_ЈМП | БПФ_ЈЕК | БПФ_К, 2, 9 - 0, 12), /*Л10*/ (БПФ_ЈМП | БПФ_ЈЕК | БПФ_К, 0, 10 - 6, 12), /*Л11*/ БПФ_ЈУМП(БПФ_ЈМП | БПФ_ЈЕК | БПФ_К, 0, 11, 17 - 0), /*Л13*/ БПФ_ФПРЕ_ТБ ПФФ_СТРЕ | ), /*Л11*/ БПФ_СТМТ(БПФ_ЛД | БПФ_В | БПФ_АБС, ОФФ(нр)), /*Л12*/ /* следећи филтер */ };

Извор: опеннет.ру

Додај коментар