- „SELinux“ prideda privalomą prieigos kontrolę prie „Linux“ branduolio naudodama žymas ir politikas, kurios peržengia tradicines DAC teises.
- Saugumo kontekstai (vartotojas, vaidmuo, tipas, lygis) ir tipais pagrįstos politikos leidžia labai detaliai valdyti prieigą prie procesų, failų ir prievadų.
- Tokios priemonės kaip „getenforce“, „chcon“, „semanage“, „semodule“ ir „booleans“ palengvina praktinį „SELinux“ valdymą gamyboje.
- Tinkamai sukonfigūravus, „SELinux“ griežtai apriboja kiekvienos paslaugos ar programos galimybes, sumažindama nulinės dienos spragų ir neteisingų konfigūracijų riziką.
„SELinux“ gali skambėti kaip technologija, skirta tik branduolio mėgėjams, tačiau iš tikrųjų tai yra viena galingiausių šiandien „Linux“ prieinamų saugumo priemonių . Jei valdote serverius, „Docker“ konteinerių saugumą , debesijos infrastruktūrą ar net šiek tiek jautrius stalinius kompiuterius, „SELinux“ veikimo supratimas lemia skirtumą tarp sistemos, kuri yra tiesiog „gerai sukonfigūruota“, ir tokios, kurią sunku pažeisti net ir turint nulinės dienos pažeidžiamumų.
Nepaisant savo reputacijos kaip „sudėtingo“, „SELinux“ siūlo labai logišką modelį: jis apibrėžia, ką kiekvienas procesas gali daryti ir su kokiais objektais jis gali bendrauti, ir jei kas nors nukrypsta nuo šio scenarijaus, branduolys jį nedelsdamas sustabdo . Užuot aklai pasitikėjęs, kad root elgsis tinkamai arba kad jūsų demonai neturės klaidų, „SELinux“ įgyvendina privalomą prieigos kontrolę, kuri taikoma net supervartotojui, naudodama labai išsamias žymas ir strategijas.
Kas yra SELinux ir kokias problemas jis išsprendžia?
Saugumo požiūriu patobulinta „Linux“ (angl. Security-Enhanced Linux, SELinux) yra „Linux“ branduolio saugumo modulis, pagrįstas LSM (Linux saugumo moduliais). Iš pradžių jį sukūrė NSA bendradarbiaudama su „Red Hat“ ir kitais partneriais, o nuo 2.6 branduolio versijos jis yra oficiali branduolio dalis. Tai ne atskira programa, o branduolio plėtinys, pridedantis privalomą prieigos kontrolės (MAC) sistemą ir vaidmenimis pagrįstą prieigos kontrolę (RBAC).
Kitaip nei klasikinėje „Unix“ diskrecinėje prieigos kontrolėje (DAC) – savininko , grupės, kitų ir rwx leidimuose – „SELinux“ sistemoje prieigos sprendimai priimami ne pagal failo savininko pasirinkimą, o pagal visuotinę saugumo administratoriaus nustatytą politiką. DAC vis tiek yra ir turi pirmenybę: jei DAC neigia, „SELinux“ nesikiša; bet net jei DAC leidžia, „SELinux“ vis tiek gali blokuoti operaciją pagal savo politiką.
„SELinux“ architektūra aiškiai atskiria komponentus: viena vertus, branduolio kodą, kuris priima su saugumu susijusius sprendimus , ir, kita vertus, politikos modulius, kurie apibrėžia, kas leidžiama, o kas ne. Šis atskyrimas leidžia koreguoti taisykles neperkompiliuojant branduolio ir sumažina komponentų, galinčių turėti įtakos sistemos saugumui, skaičių.
„SELinux“ pagal numatytuosius nustatymus buvo įdiegta tokiuose platinimuose kaip „Fedora“, „Red Hat Enterprise Linux“, „CentOS“ ir „Scientific Linux“, taip pat yra giliai integruota į tokias sistemas kaip „Android“, kur ji naudojama sistemos procesams ir programoms apriboti labai specifiniuose domenuose. BSD ir GNU/Linux pasaulyje yra alternatyvų, tokių kaip „AppArmor“, „TOMOYO“ ir „TrustedBSD“ (macOS/FreeBSD sistemose), tačiau „SELinux“ išsiskiria tuo, kad siūlo išsamumą visiems sistemos objektams.
Nuo DAC iki MAC: kodėl klasikinio modelio nebepakanka
Tradicinėje „Unix“ sistemoje domeno-objekto modelis valdomas naudojant DAC: kiekvienas failas arba išteklius turi savininką ir teises, o bet kuris procesas, veikiantis to vartotojo vardu, gali su tais ištekliais daryti ką nori . Tai reiškia, kad jei demonas veikia kaip root, bet kokia išnaudojama klaida gali atverti duris pusės sistemos valdymui su root kontekstu.
Tipiniai pavyzdžiai: duomenų bazės, kurių duomenų failus turėtų būti galima tvarkyti tik per DBVS, bet kuriuos iš tikrųjų gali skaityti ir modifikuoti procesai su root UID ; arba kritiniai demonai, veikiantys su pernelyg didelėmis teisėmis. Programavimo klaida, buferio perpildymas arba prastas įvesties patvirtinimas gali paversti paslaugą greitkeliu į visą sistemą.
„SELinux“ prie DAC prideda privalomos prieigos kontrolės (MAC) sluoksnį . „Privalomas“ reiškia, kad prieigos kontrolę centralizuotai apibrėžia administratorius per politikas, ir nei vartotojai, nei procesai negali patys šių taisyklių sušvelninti. Operacinė sistema įgyvendina šias politikas įvertindama kiekvieną atitinkamą branduolio operaciją prieš ją leisdama.
Branduolys, naudodamas LSM kabliukus, pateikia užklausą „SELinux“ kiekvienam jautriam sistemos iškvietimui (failų atidarymas, lizdų kūrimas, failų sistemų prijungimas, bendravimas per IPC ir kt.). Kiekviename sprendimo priėmimo etape „SELinux“ įvertina operaciją pagal įkeltą politiką ir subjekto bei objekto saugumo kontekstą . Jei politika aiškiai nesuteikia leidimo, veiksmas atmetamas, neatsižvelgiant į tai, ar procesas yra root, ar ne.
Veikimo režimai: priverstinis, leidžiantis ir išjungtas
„SELinux“ gali veikti trimis aiškiai diferencijuotomis veikimo būsenomis, kurias svarbu suprasti, kad gamyboje nebūtų per daug problemų:
- Vykdymas„SELinux“ įjungta ir visiškai vykdo politiką. Visi veiksmai, kurių neleidžia taisyklės, yra blokuojami ir registruojami.
- LeidžiantisSELinux yra aktyvus, įkelia politiką ir pažymi failų sistemą, bet neblokuoja Jis įrašo tik tas operacijas, tarsi jos būtų atmestos. Tai idealiai tinka derinimo ir politikos koregavimo procesui.
- Išjungtas„SELinux“ yra išjungtas. Netaikoma jokia politika ir neatliekamas žymėjimas. Sistema veikia klasikiniu DAC modeliu.
Greitiems ir laikiniems perjungimams tarp priverstinio ir leidžiamojo režimų naudojama komanda `setenforce` , kur režimas nurodomas kaip 0 (leidžiamasis) arba 1 (vykdomasis). Svarbu žinoti, kad šis pakeitimas yra nepastovus: po kito perkrovimo režimas grįš į tą, kuris apibrėžtas konfigūracijoje.
Jei reikia nuolatinio pakeitimo, turite redaguoti failą. /etc/selinux/config (arba kai kuriuose platinimuose /etc/sysconfig/selinux) ir pakoreguokite direktyvos reikšmę SELINUX=disabled|permissive|enforcingPakeitimai bus pritaikyti kito paleidimo metu ir daugeliu atvejų apims failų sistemos pervadinimą.
Norėdami patikrinti aktyvųjį režimą, galite naudoti tokias komandas kaip „getenforce“ arba „sestatus“ . Pirmasis tiesiog grąžina „Enforcing“, „Permissive“ arba „Disabled“; antrasis pateikia išsamesnę SELinux būsenos, įkeltų politikų ir aktyvių modulių santrauką.
Saugumo kontekstai ir ženklinimo sistema
„SELinux“ pagrindas yra jos saugumo etikečių arba kontekstų sistema . Kiekvienas failas, procesas, tinklo prievadas, lizdas, įrenginys ir kt. turi susietą kontekstą, apibūdinantį, kaip jį galima naudoti. Šį kontekstą sudaro keli laukai, kurie kartu sudaro „SELinux“ objekto vaizdą.
Bendras konteksto formatas yra user_u:role_r:type_t:level , su tam tikrais niuansais, priklausomai nuo politikos (ypač jei naudojama MLS/MCS). Kiekvienas laukas turi konkrečią paskirtį: SELinux vartotojas, vaidmuo, tipas (dar vadinamas domenu, kai kalbama apie procesus) ir jautrumo lygis arba kategorija.
Praktiškai svarbiausias elementas yra tipas (trečiasis laukas), nes didžioji dauguma politikos taisyklių yra suformuluotos kaip ryšiai tarp tipų . Pavyzdžiui, leisti httpd_t tipo procesams pasiekti failus, pažymėtus httpd_sys_content_t, arba leisti konkrečiam domenui bendrauti su lizdais, pažymėtais http_port_t.
Šie kontekstai saugomi kaip išplėstiniai failų sistemos atributaiTodėl labai svarbu naudoti failų sistemas, kurios palaiko xattrs (pvz., ext4, XFS ir kt.). Procesų atveju dabartinis kontekstas ir kiti susiję kontekstai yra rodomi per pseudo failų sistemą. /proc/<pid>/attr/ tokiuose failuose kaip „current“, „exec“, „fscreate“, „prev“, „sockcreate“ arba „keycreate“.
Tipiniai kontekstų pavyzdžiai sistemoje su tiksline politika būtų:
- system_u:object_r:httpd_sys_content_t:s0 „Apache“ arba „Nginx“ teikiamam žiniatinklio turiniui.
- system_u:object_r:home_user_t:s0 vartotojų namų katalogams.
- system_u:system_r:httpd_t:s0 paties žiniatinklio serverio vykdymo sričiai.
SELinux konteksto komponentų išskaidymas
Kai susiduriate su tokiu kontekstu kaip „unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023“ , jis gali atrodyti kaip hieroglifai, tačiau kiekviena dalis atitinka konkrečią „SELinux“ koncepciją ir jos nuorodų politiką.
El SELinux vartotojas (pagal susitarimą su priesaga) _uTai nėra tas pats, kas „Unix“ vartotojas faile /etc/passwd. „SELinux“ tvarko savo vartotojų duomenų bazę ir susieja juos su „Linux“ vartotojais. „SELinux“ vartotojas gali sugrupuoti kelis „Unix“ vartotojus, nes idėja yra ta, kad MAC sluoksnis būtų nepriklausomas nuo DAC.
El SELinux vaidmuo (su priesaga _rTai apibrėžia, kokius vaidmenis gali prisiimti vartotojas arba domenas. Jei naudojamas griežtai, tai vadinama pilnu RBAC. Dauguma failų objektų naudoja object_r vaidmenį, o tokie vaidmenys kaip system_r, user_r, staff_r arba sysadm_r procesams taikomi atsižvelgiant į saugos kontekstą, kurį jie turi prisiimti.
El SELinux tipas arba domenas (priesaga _tPraktiškai tipas yra esminis elementas. Tipas apibūdina objekto klasę arba proceso vykdymo sritį. Politika nurodo, kokios sąveikos tarp tipų yra leidžiamos: kurios sritys gali skaityti, rašyti, vykdyti arba bendrauti su kurių tipų objektais.
Lygiai ir kategorijos naudojami, kai įjungtos daugiapakopės saugos (MLS) arba daugiakategorinės saugos (MCS) politikos. Jautrumo lygiai yra hierarchiniai (pvz., s0, s1 ir kt.), o kategorijos – ne (c0, c1, c2 ir kt.). Labai kritinėse aplinkose, pavyzdžiui, tam tikrose vyriausybinėse organizacijose, jie naudojami siekiant užtikrinti, kad duomenis būtų galima skaityti ir rašyti tik tuo pačiu arba aukštesniu lygiu , ir izoliuoti duomenis pagal labai konkrečius skyrius.
SELinux politikos: tikslinė, griežta, MLS/MCS ir modulinė
„SELinux“ užtikrinamas saugumas nustatomas pagal įkeltą politiką . Politika yra tiesiog didelis taisyklių rinkinys, apibūdinantis, kurie domenai gali ką daryti su kokiais tipais, taip pat kitus elementus (perėjimus, žymėjimo taisykles ir kt.). Distribucijose paprastai pateikiamos standartinės politikos, todėl nereikia visko rašyti nuo nulio.
Dažniausiai taikoma politika vadinama tiksline . Šiuo režimu tik tam tikri procesai – daugiausia tinklo paslaugos ir didelės rizikos demonai, tokie kaip „Apache“, „Nginx“, DNS, tarpiniai serveriai, SNMP, syslog ir kt. – veikia uždarose domenuose. Visi kiti vartotojų procesai veikia „neapibrėžtose“ domenuose, kur iš esmės taikoma standartinė „Linux“ apsauga ir tam tikrų veiksmų registravimas.
Taip pat yra griežta politika , pagal kurią praktiškai visi procesai yra apriboti konkrečios politikos. Ji yra daug saugesnė, tačiau ją gali būti gerokai sunkiau prižiūrėti, jei modelis nėra gerai suprantamas, nes bet koks ženklinimo ar taisyklių neatitikimas gali sutrikdyti standartinius darbo eigą.
Didelio saugumo aplinkoms taikomos MLS/MCS (daugiapakopio/daugiakategorinio saugumo) politikos , kurios pasitelkia jautrumą ir kategorijas, kad būtų galima taikyti dar tikslesnes kontrolės priemones. Jos būdingos labai griežtai karinei ar administracinei aplinkai ir dėl didelio operacinio sudėtingumo retai naudojamos už konkrečių kontekstų ribų.
Šiuolaikinės politikos yra paskirstomos moduliniu būdu . Vietoj vieno monolitinio politikos failo, atskiriems paslaugoms naudojami atskiri moduliai, o tai labai supaprastina valdymą ir atnaujinimus. Šie moduliai valdomi naudojant tokius įrankius kaip „semodule“ ir „semanage module“ , kurie leidžia įdiegti, pašalinti, įjungti arba išjungti politikos dalis nekompiliuojant visos politikos kiekvieną kartą iš naujo.
Kaip SELinux nusprendžia: subjektai, objektai, klasės ir teisės
Kai procesas (subjektas) bando pasiekti išteklių (objektą), „SELinux“ konceptualiai užduoda klausimą: „Ar X tipo domenas gali atlikti operaciją Y su Z tipo objektu, priklausančiu C klasei?“ . Atsakymo tada ieškoma politikoje, taikant apibrėžtas taisykles.
Tipo vykdymo (TE) politikose, kurias naudoja dauguma distribucijų ir „Android“, kiekvienas objektas priklauso klasei ( failui, katalogui, fifo_file, tcp_socket, procesui ir kt.), o politika apibrėžia, kokie leidimai galimi kiekvienai klasei: skaityti, rašyti, vykdyti, susiejimas, prisijungimas, „getattr“, atidarymas ir kt.
TE taisyklės yra išreikštos labai tiesiogiai. Paprastas pavyzdys būtų:
leisti httpd_t http_port_t:tcp_socket name_bind;
Šia taisykle politika nurodo, kad procesai domene httpd_t gali atlikti operaciją „name_bind“ TCP lizduose, pažymėtuose http_port_t. Šis metodas orientuotas į objektų tipus ir klases, o ne į konkrečius kelius , todėl išvengiama netikėtumų perkeliant failus ar keičiant katalogų struktūras.
Pavyzdžiui, „Android“ sistemoje „SELinux“ atributai naudojami tipams grupuoti po bendresnėmis etiketėmis, tokiomis kaip „appdomain“ , kad viena taisyklė galėtų būti taikoma keliems domenams („untrusted_app“, „isolated_app“ ir kt.) nekartojant apibrėžimų. Makrokomandos, tokios kaip „rw_file_perms“, taip pat naudojamos keliems įprastiems failų leidimams grupuoti ir sumažinti klaidų, atsirandančių dėl neatitikimų, skaičių.
Vidinės būsenos, AVC ir atmetimų registras
Kai pateikiama prieigos užklausa, „SELinux“ pirmiausia patikrina prieigos vektoriaus talpyklą (AVC) – talpyklą, kurioje saugomi naujausi prieigos sprendimai, siekiant pagreitinti procesą. Jei sprendimas jau yra talpykloje, jis naudojamas tiesiogiai; kitu atveju užklausiama užkarda (vidinė „SELinux“ dalis branduolyje), kuri įvertina operaciją pagal politiką ir subjekto bei objekto kontekstą.
Jei nėra taisyklės, kuri aiškiai leistų prašomą veiksmą, numatytasis sprendimas yra neigti . Ši „neigti pagal numatytuosius nustatymus“ filosofija yra vienas iš SELinux ramsčių ir suteikia jam atsparumą leidžiamoms konfigūracijos klaidoms.
Kai vykdymo režimu įvyksta neigimas, branduolys užregistruoja tipo pranešimą avc: atmesta sistemos žurnaluose. Priklausomai nuo platinimo, jis gali būti rodomas /var/log/audit/audit.logį /var/log/messages arba gali būti užfiksuotas auditd demono. Šie pranešimai apima proceso kontekstą (scontext), objekto kontekstą (tcontext), klasę, prašomą operaciją ir kitus duomenis, labai naudingus derinimui.
Leidžiamu režimu operacija leidžiama, bet įvykis „avc: denied“ vis tiek generuojamas , pažymėtas permissive=1. Tai grynas auksas kuriant ir koreguojant politikas, nes leidžia pamatyti, kas sugadintų sistemą, jei vykdymas būtų įgyvendintas nepertraukiant įprasto veikimo.
SELinux integravimas į distribucijas ir „Android“
„Linux“ serverių ir darbalaukio ekosistemoje „SELinux“ yra įjungtas pagal numatytuosius nustatymus Fedora, RHEL, CentOS ir išvestinės programos„Debian“ ir „Ubuntu“ teikia visišką palaikymą savo branduoliuose ir paketuose, nors aktyvinimas paprastai yra neprivalomas ir reikalauja įdiegti tokius paketus kaip „selinux-basics“, „selinux-policy-default“ ir „auditd“, o po to atlikti visuotinį peržymėjimą su fixfiles relabel.
„Android“ iš pradžių įtraukė „SELinux“ į 4.3 versiją leidžiamuoju režimu, 4.4 versijoje perėjo prie dalinio naudojimo (tik kritiniams domenams, pvz., „installd“, „netd“, „vold“ ir „zygote“) ir yra visiškai integruotas nuo „Android 5.0“ versijos . „Android“ politika orientuota į programų, sistemos paslaugų ir jautrių procesų izoliavimą naudojant tipus ir atributus, siekiant kuo labiau sumažinti kompromiso poveikį bet kuriam iš šių komponentų.
„Android“ naudoja tokias sąvokas kaip „untrusted_app“ tipas įprastiems programų procesams, „appdomain“ atributai programų domenams grupuoti ir MLS/MCS kategorijos duomenims tarp programų ir fizinių vartotojų izoliuoti. Visa tai veikia kartu, kad pažeista programa nepatektų į savo „smėlio dėžės“ aplinką, net jei ji gauna labai plačias vartotojų teises.
Svarbu: „Android“ supaprastina „SELinux“ modelį, ignoruodama naudotojus, vaidmenis ir išplėstinius jautrumo parametrus. Yra tik vienas „SELinux“ naudotojas (u), du pagrindiniai vaidmenys (r – subjektams ir object_r – objektams), o jautrumas visada yra s0. Kategorijos yra tai, kas lemia duomenų izoliaciją.
Palyginimas su „AppArmor“ ir kitais LSM
Daugelyje diskusijų neišvengiamai iškyla SELinux ir AppArmor palyginimas , nes abu yra „Linux“ saugumo moduliai ir siūlo MAC adresus. Tačiau jų požiūriai yra gana skirtingi, ir verta tai suprasti prieš renkantis vieną ar kitą savo aplinkai.
„SELinux“ apibrėžia politiką, pagrįstą objektais ir jų tipais: kiekvienam sistemos objektui (failams, procesams, lizdams, prievadams, įrenginiams, IPC ir kt.) priskiriama žymė. Prieigos sprendimai priimami atsižvelgiant į objekto ir objekto kontekstą, neatsižvelgiant į tikslų failo kelią. Tai padidina sistemos stabilumą keičiantis katalogų struktūrai arba naudojant alternatyvius failų sistemos rodinius („chroot“, konteinerius, susiejimo prijungimo elementus ir kt.).
Kita vertus, „AppArmor“ taiko užduotimis pagrįstą , keliais pagrįstą politiką. Ji apibrėžia kiekvienos programos profilius, nurodydama, kuriuos failų kelius, prievadus ir pan. ji gali pasiekti ir su kokiais leidimais. Ją intuityviau konfigūruoti ir paprastai patogiau naudoti administratoriams, kurie nenori tapti SELinux ekspertais, tačiau jos valdymas yra šiek tiek mažiau detalus ir labiau priklausomas nuo failų sistemos struktūros.
Abu jie taiko numatytojo draudimo principą, tačiau jį taiko skirtingai: „AppArmor“ pagal numatytuosius nustatymus atmeta tik tas užduotis, kurias apima profiliais, o „SELinux“, veikdama griežtuoju režimu, šį principą taiko visai sistemai ir visiems pažymėtiems objektams. Dėl to „SELinux“ paprastai siūlo gilesnį apribojimo lygį , tačiau taiko platesnę ir sudėtingesnę politiką.
Praktiniai SELinux valdymo įrankiai
Darbas su „SELinux“ remiasi daugybe komandinės eilutės įrankių, kurie supaprastina režimų, žymėjimo, loginių reikšmių ir politikos modulių valdymą. Nors iš pradžių tai gali atrodyti kaip didžiulis arsenalas, kelios priemonės apima daugumą kasdienių užduočių.
Norėdami peržiūrėti failų ir procesų saugos kontekstą, galite naudoti parinktį -Z įprastose komandose, tokiose kaip ls, ps arba id. Pavyzdžiui, ls -Z Be DAC leidimų, bus rodomas kiekvieno failo SELinux kontekstas, todėl galėsite greitai patikrinti, ar žymėjimas atliktas tinkamai.
Komanda „chcon“ („keisti kontekstą“) leidžia rankiniu būdu modifikuoti visą failo kontekstą arba tik tam tikras jo dalis (rolę, tipą, diapazoną) naudojant tokias parinktis kaip „-r“, „-to“ ir „-l“. Tai naudinga vienkartiniams pataisymams, tačiau svarbu atsiminti, kad pakeitimai gali būti prarasti, jei žymėjimas bus iš naujo pritaikytas pagal politiką naudojant tokius įrankius kaip „restorecon“ arba „fixfiles“.
„Semanage“ įrankis yra vykdymo laiko politikos valdymo šveicariškas peilis. Naudodami įvairias subkomandas, galite valdyti nuolatinius failų kontekstus (fcontext), prisijungimo susiejimus tarp „Linux“ ir „SELinux“ vartotojų (login), „SELinux“ vartotojus ir jų vaidmenis (user), pažymėtus prievadus (port), loginius kintamuosius ir net politikos modulius. Visa tai nereikalaujant iš naujo kompiliuoti visos politikos iš šaltinio.
Norint patikrinti ir pakeisti loginių parametrų (mažų jungiklių, kurie įjungia arba išjungia taisyklių blokus politikoje) būseną, naudojami „getsebool“ ir „setsebool“ , be paties „setebool“ loginio parametro . Tipinis loginis parametras yra „httpd_enable_homedirs“, kuris, kai aktyvus, leidžia žiniatinklio serveriui pasiekti vartotojų namų katalogus (naudinga ~user/public_html/).
Galiausiai, tokios komandos kaip „fixfiles“ leidžia priverstinai visiškai pakeisti failų sistemos žymėjimą pagal apibrėžtas taisykles, o „semodule“ rūpinasi politikos modulių (.pp), supakuotų ir platinamų pagal nuorodą arba administratorių, diegimu, sąrašo sudarymu, įjungimu arba išjungimu.
Individualių politikų kūrimas ir koregavimas
Kai programa neturi savo SELinux modulio arba jums reikia konkretesnio apribojimo, laikas imtis darbo ir kurti pasirinktines politikas . Tai gali skambėti sudėtingai, tačiau darbo eiga yra gana gerai apibrėžta, jei atidžiai atliekate tam tikrus veiksmus.
Pirmas žingsnis – užtikrinti, kad atitinkami objektai (vykdomieji failai, duomenų katalogai, lizdai ir kt.) būtų pažymėti atitinkamais tipais. Tai galima pasiekti apibrėžiant failų konteksto taisykles su „ semanage fcontext“ ir taikant jas su „restorecon“, naudojant reguliarias išraiškas, apimančias ištisus katalogų medžius.
Tada sistema paprastai perjungiama į leidimo režimą tam kompiuteriui (arba, kai kuriais atvejais, konkrečiam domenui) ir programai leidžiama veikti įprastai, o „SELinux“ registruoja visus „ avc: denied“ teiginius , kurie būtų įvykę. Šie žurnalai, paprastai analizuojami naudojant tokias priemones kaip „audit2allow“ , naudojami kandidatų taisyklėms išgauti.
Nuorodų politikos paprastai suskirstomos į tris failus kiekvienai programai: .te failą, kuriame yra TE taisyklės (allow, type, domain_type ir kt.), .fc failą, kuriame yra failo konteksto taisyklės, ir .if failą, kuriame yra viešosios sąsajos, kurias gali pakartotinai naudoti kiti moduliai. Visa tai sukompiliuojama į .pp modulius naudojant make ir įkeliama su semodule.
Labai svarbu aklai nepasitikėti viskuo, ką siūlo „audit2allow“: ji paprastai yra labiau leidžiama nei būtina . Idealiu atveju reikėtų rankiniu būdu peržiūrėti siūlomas taisykles, prireikus sukurti naujus tipus, kad būtų galima atskirti jautrius duomenis nuo nesvarbių duomenų, ir, kai uždrausta operacija nėra kritinė, apsvarstyti galimybę naudoti „dontaudit“ taisykles, kad sustabdytumėte triukšmo įrašymą nesuteikiant leidimų.
Tokiose aplinkose kaip „SUSE Linux Micro“ ar „Android“ teikiamos papildomos priemonės (pavyzdžiui, „Udica“, skirta konteinerių politikoms generuoti iš JSON aprašymų), kurios automatizuoja dalį proceso, greitai pritaikydamos politiką konkretiems konteineriams, nereikalaujant nuo nulio mokytis visos politikos kalbos.
Visa ši kontekstų, modulinių politikų, loginių kintamųjų ir valdymo įrankių ekosistema paverčia „SELinux“ itin patikima ir lanksčia saugumo platforma . Atlikus tam tikras pradines investicijas į mokymąsi, ji leidžia labai tiksliai apriboti kiekvienos paslaugos ar programos veiksmus, taip smarkiai sustiprinant sistemos atakų paviršių nuo spragų išnaudojimo, kenkėjiškų programų ir žmogiškųjų klaidų.
