Kas yra selinux būsena. SELinux – teorija

Kai kuriuose Linux platinimuose pagal numatytuosius nustatymus įjungtas SELinux, ir tai gali sukelti įvairių problemų. Jei nesuprantate, kaip veikia SELinux, ir nežinote, kaip jį teisingai sukonfigūruoti, geriausia jį išjungti, kol sužinosite pagrindinius jos veikimo principus

Išjungti SELinux galite naudoti bet kurį iš 4 aprašytų metodų.

Mes nesigilinsime į tai, kam naudojamas SELinux, ir tiesiogiai jį išjungsime. Jei sistema naudoja SELinux, tada paleisdami komandą ls -Z galite pamatyti tokį paveikslėlį.

# ls -Z /etc/-rw-r--r-- šakninė šakninė sistema_u:object_r:etc_t:s0 a2ps.cfg -rw-r--r-- root system_u:object_r:adjtime_t:s0 adjtime -rw-r--r-- root root system_u:object_r:etc_aliases_t:s0 slapyvardžiai drwxr-x--- root root system_u:object_r:auditd_etc_t:s0 auditas drwxr-xr-x root system_u:object_r:etc_runtime_t:s0 blkid drwxob root_xr- :bluetooth_conf_t:s0 bluetooth drwx------ root root system_u:object_r:system_cron_spool_t:s0 cron.d -rw-rw-r-- šakninis diskas system_u:object_r:amanda_dumpdates_t:s0 dumpdates

1 būdas: laikinai išjunkite SELinux

Norėdami laikinai išjungti SELinux, galite modifikuoti /selinux/enforce failą. Atminkite, kad tai laikinas išjungimas ir, kai sistema bus paleista iš naujo, SELinux vėl veiks.

# cat /selinux/enforce 1 # echo 0 > /selinux/enforce# cat /selinux/enforce 0

Taip pat galite naudoti komandą setenforce, kaip parodyta toliau pateiktame pavyzdyje. Galimos komandos setenforce parinktys yra šios: Vykdoma, Leidžiama, 1 (įjungti) arba 0 (išjungti).

#setenforce 0

2 būdas: visam laikui išjunkite SELinux

Norėdami visam laikui išjungti SELinux, redaguokite /etc/selinux/config failą ir nustatykite SELINUX=disabled, kaip parodyta toliau. Po to iš naujo paleiskite serverį.

# cat /etc/selinux/config SELINUX=išjungta SELINUXTYPE=nukreipta SETLOCALDEFS=0

3 būdas: SELinux išjungimas Grub Bootloader

Trečiasis metodas naudoja GRUB įkrovos programą, kad išjungtų SELinux. Pridėkite prie eilutės pabaigos selinux = 0

# cat /boot/grub/grub.conf default=0 timeout=5 splashimage=(hd0,0)/boot/grub/splash.xpm.gz hiddenmenu title Enterprise Linux Enterprise Linux Server (2.6.18-92.el5PAE) root (hd0,0) branduolys /boot/vmlinuz -2.6.18-92.el5PAE ro root=LABEL=/ rhgb tylus selinux = 0 initrd /boot/initrd-2.6.18-92.el5PAE.img title Enterprise Linux Enterprise Linux Server (2.6.18-92.el5) šakninis (hd0,0) branduolys /boot/vmlinuz-2.6.18-92.el5 ro root=LABEL=/ rhgb tylus selinux = 0 initrd /boot/initrd-2.6.18-92.el5.img

4 būdas: išjunkite SELinux tik tam tikroms paslaugoms – HTTP/Apache

Jei jums nereikia visiškai išjungti SELinux, o tik tam tikroms paslaugoms, turite šią parinktį. Pavyzdžiui, išjunkite SELinux HTTP/Apache, pakeisdami kintamojo reikšmę httpd_disable_trans faile /etc/selinux/targeted/booleans.

# grep httpd /etc/selinux/targeted/booleans httpd_builtin_scripting=1 httpd_disable_trans=1 httpd_enable_cgi=1 httpd_enable_homedirs=1 httpd_ssi_exec=1 httpd_tty_comm=0 httpd_unified=1

Taip pat nustatykite kintamąjį naudodami komandą setsebool. Po to iš naujo paleiskite httpd, kad pakeitimai įsigaliotų.

Sveiki visi, pakalbėkime šiek tiek apie SELinux, bet prieš tai šiek tiek apibrėžimo tiems, kurie negirdėjo, kas tai yra. SELinux yra anglų kalbos santrumpa. žodžiai Security-Enhanced Linux, o tai reiškia Linux su patobulinta sauga. Kitaip tariant, tai yra priverstinės prieigos kontrolės sistemos, kuri gali veikti lygiagrečiai su klasikine atrankinės prieigos kontrolės sistema, įdiegimas. Skirtumas yra tas, kad SELinux sistemoje per tam tikras strategijas prieigos teises nustato pati sistema, savo ruožtu selektyvinė prieigos kontrolės sistema atskiria proceso prieigą prie išteklių pagal vartotojo teises, kad būtų lengviau suprasti, tai yra trijų lygių rwx teisės - savininkas , savininkų grupė ir kiti vartotojai.
Po nedidelio aprašymo pabandykime pažvelgti į kai kurias SELinux komandas ir parinktis. Mūsų pavyzdžiai bus demonstruojami operacinėje sistemoje Linux CentOS 6. Bene pirmosios ir bene populiariausios yra SELinux būsenos tikrinimo komandos.

/usr/sbin/getenforce

/usr/sbin/sestatus

Grąžina komandos getenforce reikšmes
Vykdymas– rodo, kad SELinux suaktyvintas ir politikos taisyklės yra vykdomos;
Leidžiantis– rodo, kad SELinux suaktyvintas, bet politikos taisyklės nėra vykdomos ir naudojamos tik DAC taisyklės;
Išjungta– rodo, kad SELinux išjungtas.

Grąžina sestatus komandos reikšmes
Ši komanda, be SELinux būsenos, grąžina naudotą SELinux politiką, pavyzdžiui:

$ /usr/sbin/sestatus SELinux būsena: įjungta SELinuxfs prijungimas: /selinux Dabartinis režimas: vykdymo režimas iš konfigūracijos failo: vykdomas politikos versija: 23 Politika iš konfigūracijos failo: tikslinė

SELinux būsena: įjungta – reiškia, kad SELinux įjungtas;
Dabartinis režimas: enforcing – reiškia, kad SELinux įjungtas priverstiniu režimu;
Politika iš konfigūracijos failo: tikslinė – nurodo, kad naudojama SELinux tikslinė politika.

SELinux įgalinimas
Įjungti / išjungti SELinux operacinėje sistemoje konfigūracijos faile
/etc/selinux/config

# Šis failas valdo SELinux būseną sistemoje. # SELINUX= gali turėti vieną iš šių trijų reikšmių: # enforcing – SELinux saugos politika yra vykdoma. # permissive – SELinux spausdina įspėjimus, o ne vykdydamas. # išjungtas – neįkelta jokia SELinux politika. SELINUX=išjungta # SELINUXTYPE= gali turėti vieną iš šių dviejų reikšmių: # targeted – tiksliniai procesai apsaugoti, # mls – kelių lygių apsauga. SELINUXTYPE = nukreipta

Parinktis SELINUX=disabled reiškia, kad SELinux yra išjungtas. Prieš paleisdami SELinux, turite atlikti keletą manipuliacijų.
1. Patikrinkite SELinux paketų įdiegimą

Rpm -qa | grep selinux rpm -q policycoreutils rpm -qa | grep nustatymo trikčių šalinimas

Taip pat įsitikinkite, kad įdiegti šie paketai: selinux-policy-targeted, selinux-policy, libselinux, libselinux-python, libselinux-utils, policycoreutils, setroubleshoot, setroubleshoot-server, setroubleshoot-plugins. Paketai policycoreutils-gui, setroubleshoot, selinux-policy-devel, Ir mcstrans neprivaloma.
Trūkstamus paketus galima įdiegti naudojant komandą (kaip root)

Yum įdiegti paketo pavadinimas

2. Prieš paleisdami kiekvienas failų sistemos failas turi būti pažymėtas SELinux kontekstu. Iki šio momento apribotiems domenams gali būti uždrausta prieiga, todėl operacinė sistema gali būti netinkamai įkelta. Situaciją galima ištaisyti nustatant parinktį SELINUX=permissive konfigūracijos faile /etc/selinux/config.

3. Failas bus pažymėtas kito sistemos perkrovimo metu. Visų failų etiketės nustatomos SELinux kontekste proceso metu. Paskutinėje eilutėje kiekvienas simbolis * reiškia 1000 pažymėtų failų. Proceso trukmė priklauso nuo failų skaičiaus sistemoje, taip pat nuo diskų greičio.

*** Įspėjimas – reikalingas SELinux tikslinės politikos peržymėjimas. *** Peržymėjimas gali užtrukti labai ilgai, priklausomai nuo failo *** sistemos dydžio ir standžiųjų diskų greičio. ****

4. Tuo atveju, kai SELinux politika nėra priskirta priverstinai, o darbas vyksta išplėtimo režimu, draudimai įrašomi į žurnalą kaip veiksmai, kurie būtų draudžiami priverstiniu režimu. Įsitikinkite, kad SELinux nedraudžia veiksmų paskutinio sistemos įkrovimo metu, kad tai padarytumėte, paleiskite komandą

Grep "SELinux neleidžia" /var/log/messages

Išvestis turi būti tuščia, o tai reiškia, kad viskas gerai ir SELinux nedraudžia veiksmo.
5. Įsitikinę, kad žurnaluose nėra pranešimų apie draudimus, nustatykite SELINUX parametrą vykdymo (failas /etc/selinux/config):

# Šis failas valdo SELinux būseną sistemoje. # SELINUX= gali turėti vieną iš šių trijų reikšmių: # enforcing – SELinux saugos politika yra vykdoma. # permissive – SELinux spausdina įspėjimus, o ne vykdydamas. # išjungtas – neįkelta jokia SELinux politika. SELINUX=įgaliojimas # SELINUXTYPE= gali turėti vieną iš šių dviejų reikšmių: # targeted – tiksliniai procesai apsaugoti, # mls – kelių lygių apsauga. SELINUXTYPE = nukreipta

6. Po to operacinė sistema turi būti paleista iš naujo. Paleidę iš naujo, turite patikrinti „Enforcing“ grąžinimo vertę naudodami komandą getenforce.

$ /usr/sbin/getenforce vykdymas

7. Norėdami peržiūrėti sąsajas tarp SELinux ir sistemos vartotojų, paleiskite komandą

/usr/sbin/semanage login –l

Komandos išvestis turėtų būti tokia:

Prisijungimo vardas SELinux vartotojo MLS / MCS diapazonas __default__ unconfined_u s0-s0:c0.c1023 root unconfined_u s0-s0:c0.c1023 system_u system_u s0-s0:c0.c1023

Taip pat reikėtų atsižvelgti į kai kurias funkcijas. Kai SELinux išjungtas, vartotojo sukurti failai nėra pažymėti, todėl gali kilti problemų, kai jie įjungiami į vykdymo būseną. Failai bus pažymėti pakeitus parinktį iš išjungtos į leistiną / vykdymo režimą, taip išvengiant nepažymėtų failų problemos.

SELinux (Security-Enhanced Linux – Linux su patobulinta sauga) yra priverstinės prieigos kontrolės sistemos įgyvendinimas, kuris gali veikti lygiagrečiai su klasikine diskrecine prieigos kontrolės sistema. Įtrauktas į standartinį Linux branduolį. Taip pat, kad SELinux veiktų, reikalingos modifikuotos kai kurių paslaugų versijos (ps, ls ir kt.), kurios palaiko naujas branduolio funkcijas ir palaiko failų sistemą.

1 būdas: laikinai išjunkite SELinux

Norėdami laikinai išjungti SELinux, galite modifikuoti /selinux/enforce failą. Atminkite, kad tai laikinas išjungimas ir, kai sistema bus paleista iš naujo, SELinux vėl veiks.

# cat /selinux/enforce 1 # echo 0 > /selinux/enforce# cat /selinux/enforce 0 Taip pat galite naudoti komandą setenforce, kaip parodyta toliau pateiktame pavyzdyje. Galimos komandos setenforce parinktys yra šios: Vykdoma, Leidžiama, 1 (įjungti) arba 0 (išjungti).
#setenforce 0

2 būdas: visam laikui išjunkite SELinux

Norėdami visam laikui išjungti SELinux, redaguokite /etc/selinux/config failą ir nustatykite SELINUX=disabled, kaip parodyta toliau. Po to iš naujo paleiskite serverį.

# cat /etc/selinux/config SELINUX=išjungta SELINUXTYPE=nukreipta SETLOCALDEFS=0

3 būdas: SELinux išjungimas Grub Bootloader

Trečiasis metodas naudoja GRUB įkrovos programą, kad išjungtų SELinux. Pridėkite prie eilutės pabaigos selinux = 0

# cat /boot/grub/grub.conf default=0 timeout=5 splashimage=(hd0,0)/boot/grub/splash.xpm.gz hiddenmenu title Enterprise Linux Enterprise Linux Server (2.6.18-92.el5PAE) root (hd0,0) branduolys /boot/vmlinuz -2.6.18-92.el5PAE ro root=LABEL=/ rhgb tylus selinux = 0 initrd /boot/initrd-2.6.18-92.el5PAE.img title Enterprise Linux Enterprise Linux Server (2.6.18-92.el5) šakninis (hd0,0) branduolys /boot/vmlinuz-2.6.18-92.el5 ro root=LABEL=/ rhgb tylus selinux = 0 initrd /boot/initrd-2.6.18-92.el5.img

4 būdas: išjunkite SELinux tik tam tikroms paslaugoms – HTTP/Apache

Jei jums nereikia visiškai išjungti SELinux, o tik tam tikroms paslaugoms, turite šią parinktį. Pavyzdžiui, išjunkite SELinux HTTP/Apache, pakeisdami kintamojo reikšmę httpd_disable_trans faile /etc/selinux/targeted/booleans.

# grep httpd /etc/selinux/targeted/booleans httpd_builtin_scripting=1 httpd_disable_trans=1 httpd_enable_cgi=1 httpd_enable_homedirs=1 httpd_ssi_exec=1 httpd_tty_comm=0 httpd_unified=1 Taip pat nustatykite kintamąjį naudodami komandą setsebool. Po to iš naujo paleiskite httpd, kad pakeitimai įsigaliotų.

# setsebool httpd_disable_trans 1# paslauga httpd paleisti iš naujo

Saugumo patobulintas Linux (SELinux) yra naujas prieigos kontrolės metodas Linux sistemoje, pagrįstas Linux saugos branduolio moduliu (LSM). SELinux pagal numatytuosius nustatymus įjungtas daugelyje Red Hat pagrįstų paskirstymų, naudojančių rpm paketų bazę, pvz., Fedora, CentOS, OpenSUSE ir kt.

Šiame straipsnyje apžvelgsime SELinux nustatymą; nekalbėsime apie naujų strategijų kūrimą, o pabandysime pažvelgti į sistemą iš kitos pusės, pažiūrėsime, kuo ji gali būti naudinga paprastam Linux vartotojui, apsvarstysime jos veikimo pagrindus, įgalindami , išjungiant ir keičiant būsenas.

SELinux pagrindai

SELinux yra ženklinimo sistema, kiekvienas procesas turi etiketę. Kiekvienas sistemos failas, katalogas ar net vartotojas turi etiketę. Net prievadams ir įrenginiams bei pagrindinio kompiuterio pavadinimams sistemoje yra priskirtos etiketės. SELinux apibrėžia taisykles, skirtas procesui pasiekti objektus su konkrečiomis etiketėmis. Tai vadinama politika. Šerdis vykdo taisykles. Kartais tai dar vadinama privaloma prieigos kontrole (MAC)

Failo savininkas visiškai nekontroliuoja saugos atributų. Standartiniai prieigos kontrolės atributai, tokie kaip grupė ir savininkas, SELinux nieko nereiškia. Viskas yra visiškai kontroliuojama etiketėmis. Atributų reikšmes galima nustatyti be šakninių teisių, tačiau tam turite turėti specialius SELinux leidimus.

Dabar pakalbėkime šiek tiek apie politikus. Mes apibrėžiame etiketę tam tikro tipo procesams, taip pat tam tikro tipo failų sistemos objektams. Įsivaizduokite sistemą, kurioje objektai (procesai) yra katės ir šunys. Tai yra procesų tipai. Ir mes turime patalpas, kurias jie nori turėti – maistą. Tačiau jų maistas skiriasi – maistas_katės ir maistas_šunys. Būtina, kad objektai turėtų prieigą tik prie savo maisto.

Šuo turi leidimą ėsti savo maistą, o katė – savo maistą. SELinux politikoje tai atrodys taip:

leisti katei valgyti kačių maistą

leisti šuniui valgyti šunų maistą

Branduolys dabar užtikrins, kad būtų laikomasi šių taisyklių. SELinux sistemoje pagal numatytuosius nustatymus viskas išjungta, todėl jei šuo bandys ėsti kačių maistą, branduolys to neleis.

Tarkime, kad „Apache“ procesas pažymėtas httpd_t, o failams, kuriuos „Apache“ turėtų turėti prieigą, pavadinome httpd_sys_content. Taip pat turime kredito kortelės duomenis, kurie yra saugomi mysql duomenų bazėje. Jei įsilaužėlis įsilaužė į Apache procesą ir turi root prieigą, jis vis tiek negalės pasiekti failų iš mysql.

Sistemoje gana dažnai yra tų pačių tipų procesai. Norint tai apeiti ir sukonfigūruoti skirtingų to paties tipo procesų leidimus, buvo išrasta saugos kategorijų sistema „Multi Category Security“ (MCS). Priklausomai nuo šios kategorijos galime pridėti kategoriją prie objekto ir konfigūruoti teises.

SELinux gali sukelti daug problemų sistemos administratoriams, daugelis tiesiog ją išjungia, taip išspręsdami problemą ir sumažindami saugumą. Kaip minėta aukščiau, pagal numatytuosius nustatymus SELinux blokuoja viską ir visus. Tai atitinka griežtos politikos aprašymą. Tačiau, kad sistemos administratoriams būtų lengviau dirbti, buvo sukurtos kitos standartinės strategijos. Daugelis platinimų naudoja tikslinę politiką; ji apima apie 200 tinklo paslaugų ir procesų, tačiau visos kitos programos paleidžiamos ir veikia laisvai, joms netaikomi jokie SELinux modeliai.

SELinux gali veikti trimis režimais – išjungta, sistema visiškai išjungta ir neveikia, Įvykdančio apribojimo režimas – programa aktyvuojama ir blokuoja visus veiksmus, kurie neatitinka strategijų, o trečiasis Permissive režimas – tik fiksuoja pažeidimus.

Teorija aptariama bendrais bruožais. Dabar pereikime prie praktinės dalies.

SELinux nustatymas

SELinux sistema yra iš anksto įdiegta kartu su platinimu Red Hat pagrindu veikiančiose sistemose; greičiausiai visi komponentai jau yra įdiegti, tačiau Ubuntu ir kituose panašiuose platinimuose viską turėsite padaryti patys. Norėdami įdiegti SELInux Ubuntu, paleiskite komandą:

sudo apt-get install selinux

Kai diegimas bus baigtas, sistemą reikės perkrauti, kad visi nustatymai įsigaliotų, nes Grub konfigūracijos failas bus perrašytas, kad branduoliui būtų perduoti reikalingi parametrai.

Po perkrovimo matome SELinux būseną:

SELinux būsena: įjungta
SELinuxfs prijungimas: /sys/fs/selinux
SELinux šakninis katalogas: /etc/selinux
Įkeltos politikos pavadinimas: ubuntu
Dabartinis režimas: leistinas
Režimas iš konfigūracijos failo: leistinas
Politikos MLS būsena: įjungta
Politikos deny_unknown būsena: leidžiama
Maksimali branduolio politikos versija: 29

Čia matome, kad sistema įjungta SELinux būsena: įjungta, Dabartinis režimas yra leistinas, tai yra, mes gausime tik pranešimus apie pažeidimus žurnale. Šiuo metu naudojama Ubuntu politika.

Dabar įgalinkime aktyvųjį režimą, kad tai padarytumėte, paleiskite komandą:

sudo setenforce 1

Aktyvųjį režimą galite išjungti perduodami 0 tai pačiai komandai:

sudo setenforce 0

Taip pat galite peržiūrėti šiuo metu naudojamą režimą naudodami panašią komandą:

Visa pagrindinė SELinux konfigūracija atliekama naudojant /etc/selinux/config failą. Čia galite visiškai išjungti Selinux arba sukonfigūruoti naudojamą saugos politiką.

sudo vi /etc/selinux/config

Šis parametras reiškia SELinux veikimo režimą, čia galite nurodyti vieną iš trijų parametrų: vykdyti, leistinas ir išjungtas.

SELINUX = leistinas

Naudokite išjungtą, kad visiškai išjungtumėte SELinux arba bet kurią kitą parinktį, kad įjungtumėte SELinux atgal. Šis režimas pagal numatytuosius nustatymus bus taikomas paleidžiant sistemą.

SELinux strategijos taip pat sukonfigūruotos šiame faile. Parametras SELINUXTYPE yra atsakingas už politiką:

SELINUXTYPE=ubuntu

Galite nurodyti bet kurią politiką, esančią /etc/selinux kataloge.

Galima naudoti tris pagrindines strategijas:

  • tikslingas(arba čia ubuntu) apsaugo pagrindines sistemos paslaugas, pavyzdžiui, žiniatinklio serverį, DHCP, DNS, bet neliečia visų kitų programų.
  • minimumas- tai yra eksperimentavimo politika, pagrįsta tiksline, tačiau jos taisyklės nėra įjungtos pagal numatytuosius nustatymus, galite ją įjungti ir išjungti pagal poreikį, taip pat dažnai naudojama mobiliuosiuose įrenginiuose.
  • griežtas- griežčiausia politika, kontroliuoja ne tik tinklo paslaugas, bet ir vartotojo programas.
  • mls- yra ne tik taisyklės, bet ir įvairūs saugumo lygiai. Tai leidžia įdiegti kelių lygių apsaugos sistemą, pagrįstą SELinux.

Ubuntu strategijos turi būti įdiegtos atskirai; jei norite tikslingos ir griežtos, įdiekite paketą:

sudo apt-get install selinux-policy-default

Norėdami taikyti politiką, turite iš naujo paleisti kompiuterį ir pageidautina, kad per šį paleidimą SELinux būtų audito režimu (leidžiamas). Be to, norint, kad sistema atnaujintų visas failų sistemos etiketes, gali tekti sukurti tuščią failą šaknyje:

sudo vi ~/.autolabel

Ar norite pajusti visą SELinux galią ir tuo pačiu trūkumus? Nustatykite SELINUXTYPE griežtą ir paleiskite sistemą iš naujo:

SELINUXTYPE=numatytasis

Tiesiog įsitikinkite, kad SELinux veikia leistinuoju režimu, kitaip bus problemų. Numatytoji politika įgyvendina ir tikslinę, ir griežtą; kad būtų griežta, tereikia iškrauti neapribotą modulį:

sudo semoule -r neapribota

Tada pradedame aktyvųjį režimą:

sudo setenforce 1

Na, dabar galite pabandyti perskaityti sistemos žurnalus arba vėl įjungti audito režimą. Niekas neveikia? Teisingai, SELinux blokuoja bet kokius neleistinus veiksmus. Mano terminalo langas iškart užsidarė ir aš nebegalėjau valdyti savo sistemos. Norėdami atgauti kompiuterio kontrolę, turite jį paleisti iš naujo.

Dabar žinote, kaip įjungti ir išjungti SELinux, taip pat kaip pakeisti programos politiką ar veikimo režimą. Visa kita nepatenka į mūsų trumpo straipsnio taikymo sritį.

Mes jau rašėme apie SELinux svetainėje Habré, tačiau nebuvo paskelbta daug išsamių šios sistemos vadovų. Šiandien skelbiame būtent tokį išsamų SELinux vadovą, pradedant nuo informacijos apie sistemą ir baigiant lanksčia politikos konfigūracija.
Kad įrašas nepavirstų sunkiai suprantamu „lapu“, vadovą nusprendėme padalinti į dvi dalis. Pirmajame bus kalbama apie pačią sistemą ir kai kurias jos funkcijas. Antrasis susijęs su politikos kūrimu. Dabar publikuojame pirmąją dalį, antroji bus kiek vėliau.

1. Įvadas

SELinux (SELinux) yra priverstinės prieigos kontrolės sistema, įdiegta branduolio lygiu. Ši sistema pirmą kartą pasirodė ketvirtoje CentOS versijoje, o 5 ir 6 versijose diegimas buvo žymiai papildytas ir patobulintas. Šie patobulinimai leido SELinux tapti universalia sistema, galinčia efektyviai išspręsti daugybę dabartinių problemų. Verta prisiminti, kad pirmiausia taikoma klasikinė Unix teisių sistema, o valdymas SELinux bus perduotas tik tada, kai šis pradinis patikrinimas bus sėkmingas.

1.1 Kai kurios dabartinės problemos.

Norėdami suprasti praktinę SELinux vertę, pažvelkime į keletą pavyzdžių, kai standartinės prieigos kontrolės sistemos nepakanka. Jei SELinux išjungtas, turite prieigą tik prie klasikinio pasirinkto prieigos valdymo, į kurį įeina DAC (pasirenkama prieigos kontrolė) arba ACL (prieigos kontrolės sąrašai). Tai yra, mes kalbame apie manipuliavimą rašymo, skaitymo ir vykdymo teisėmis vartotojų ir vartotojų grupių lygmeniu, o kai kuriais atvejais to gali visiškai nepakakti. Pavyzdžiui:

– Administratorius negali visiškai kontroliuoti vartotojo veiksmų. Pavyzdžiui, vartotojas gali suteikti visiems kitiems vartotojams skaitymo teises į savo jautrius failus, pvz., SSH raktus.

Procesai gali pakeisti saugos nustatymus. Pavyzdžiui, failus, kuriuose yra vartotojo paštas, turėtų skaityti tik vienas konkretus vartotojas, tačiau pašto programa gali pakeisti prieigos teises, kad šiuos failus galėtų skaityti visi.

Procesai paveldi juos paleidusio vartotojo teises. Pavyzdžiui, Trojos arkliu užkrėsta Firefox naršyklės versija gali nuskaityti vartotojo SSH raktus, nors neturi tam jokios priežasties.

Iš esmės tradiciniame selektyvaus prieigos valdymo (DAC) modelyje gerai įgyvendinti tik du prieigos lygiai – vartotojo ir supervartotojo. Nėra paprasto metodo, kuris leistų kiekvienam vartotojui turėti reikiamas minimalias teises.
Žinoma, yra daug būdų, kaip išspręsti šias problemas klasikiniame saugumo modelyje, tačiau nė vienas iš jų nėra universalus.

1.1.1 Pagrindiniai SELinux vartojami terminai:

Domenas- veiksmų, kuriuos procesas gali atlikti, sąrašas. Paprastai domenas apibrėžiamas kaip minimalus galimas veiksmų rinkinys, per kurį gali veikti procesas. Tokiu būdu, jei procesas bus diskredituotas, užpuolikas negalės padaryti daug žalos.

Vaidmuo- domenų, kuriuos galima pritaikyti, sąrašas. Jei tam tikro domeno nėra vaidmens domenų sąraše, veiksmai iš to domeno negali būti taikomi.

Tipas- veiksmų, kurie yra leistini objekto atžvilgiu, visuma. Tipas skiriasi nuo domeno tuo, kad jis gali būti taikomas vamzdžiams, katalogams ir failams, o domenas taikomas procesams.

Saugumo kontekstas- visi SELinux atributai - vaidmenys, tipai ir domenai.

1.2 Tradicinio saugumo modelio problemų sprendimas.

SELinux daug griežčiau laikosi kiekvienos paslaugos, vartotojo ir programos minimalių privilegijų modelio. Pagal numatytuosius nustatymus nustatytas „draudžiamasis režimas“, kai kiekvienas sistemos elementas turi tik tas teises, kurios yra būtinos jam funkcionuoti. Jei vartotojas, programa ar paslauga bando pakeisti failą arba pasiekti šaltinį, kuris nėra aiškiai reikalingas jam išspręsti, tada jiems tiesiog bus uždrausta prieiga ir toks bandymas bus užregistruotas.

SELinux yra įdiegtas branduolio lygiu, todėl taikomosios programos gali visiškai nieko nežinoti apie šios priverstinės prieigos kontrolės sistemos versiją, jos veikimo ypatybes ir pan. Jei sukonfigūruota teisingai, SELinux neturės įtakos trečiųjų šalių programų ir paslaugų veikimui. Nors, jei programa gali perimti klaidų pranešimus iš šios prieigos kontrolės sistemos, programos naudojimo patogumas žymiai padidėja. Iš tiesų, jei bandoma pasiekti apsaugotą šaltinį ar failą, SELinux siunčia klaidą iš šeimos „prieiga uždrausta“ į pagrindinę programą. Tačiau kelios programos naudoja sistemos skambučių grąžinimo kodus, gautus iš SELinux.

Štai keli SELinux naudojimo pavyzdžiai, siekiant parodyti, kaip galite pagerinti visos sistemos saugumą.

- Programų, kurios gali nuskaityti ssh raktus, sąrašo kūrimas ir konfigūravimas.

Užkirsti kelią neteisėtai prieigai prie duomenų per pašto programą.

Naršyklės konfigūravimas taip, kad ji galėtų skaityti tik tuos failus ir aplankus, kurie būtini vartotojo namų aplanke.

2. SELinux darbo režimai

SELinux turi tris pagrindinius veikimo režimus, pagal numatytuosius nustatymus nustatytas vykdymo režimas. Tai gana griežtas režimas, kurį prireikus galima pakeisti į patogesnį galutiniam vartotojui.

Vykdymas: numatytasis režimas. Pasirinkus šį režimą, visi veiksmai, kurie kažkaip pažeidžia esamą saugumo politiką, bus blokuojami, o bandymas pažeisti įrašomas į žurnalą.

Leidžiantis: Naudojant šį režimą informacija apie visus veiksmus, kurie pažeidžia esamą saugumo politiką, bus įrašoma į žurnalą, tačiau patys veiksmai nebus blokuojami.

Išjungta: Visiškas priverstinės prieigos kontrolės sistemos išjungimas.

Galite peržiūrėti esamą režimą ir kitus SELinux nustatymus (ir, jei reikia, pakeisti) naudodami specialų GUI įrankį, esantį Administravimo meniu (sistema-konfigūracija-selinux). Jei esate įpratę dirbti konsolėje, dabartinę būseną galite peržiūrėti naudodami komandą sestatus.

# sestatus SELinux būsena: įjungta SELinuxfs mount: /selinux Dabartinis režimas: vykdymo režimas iš konfigūracijos failo: vykdomas politikos versija: 21 Politika iš konfigūracijos failo: tikslinė

SELinux būseną taip pat galite sužinoti naudodami komandą getenforce.
Komanda „setenforce“ leidžia greitai persijungti tarp priverstinio ir leistino režimų, pakeitimai įsigalios neperkraunant. Bet jei įjungiate arba išjungiate SELinux, reikia iš naujo paleisti, nes saugos etiketės turi būti iš naujo įdiegtos failų sistemoje.
Norėdami pasirinkti numatytąjį režimą, kuris bus taikomas kiekvieną kartą paleidžiant sistemą, faile /etc/selinux/config nustatykite eilutės "SELINUX=" reikšmę, nurodydami vieną iš režimų - "enforcing", "permissive" arba " neįgalus“. Pavyzdžiui: „SELINUX=permissive“.

3. SELinux politika

Kaip minėta anksčiau, SELinux pagal numatytuosius nustatymus veikia vykdymo režimu, kai automatiškai blokuojami bet kokie kiti veiksmai, nei leidžiami, kiekviena programa, vartotojas ar paslauga turi tik tas teises, kurių jiems reikia, bet nieko daugiau. Tai gana griežta politika, kuri turi ir privalumų – aukščiausią informacijos saugumo lygį, ir trūkumų – sistemos konfigūravimas šiuo režimu siejamas su daug darbo sistemos administratoriams, be to, yra didelė rizika, kad vartotojai susidurs su prieigos apribojimais, jei nori naudotis sistema bent kokiu nors nereikšmingu būdu. Šis metodas yra priimtinas įmonių sektoriuje, bet nepriimtinas galutinio vartotojo kompiuteriuose. Daugelis administratorių tiesiog išjungia SELinux savo darbo vietose, kad išvengtų tokių problemų.

Siekiant to išvengti, pagrindinėms programoms ir paslaugoms, tokioms kaip, pavyzdžiui, httpd, named, dhcpd, mysqld, apibrėžiama iš anksto sukonfigūruota tikslinė politika, kuri neleis užpuolikui pasiekti svarbių duomenų. Tos programos, kurių politika neapibrėžta, veikia domene unconfined_t ir nėra apsaugotos SELinux. Taigi, teisingai parinktos tikslinės strategijos leidžia pasiekti priimtiną saugumo lygį nesukeliant vartotojui nereikalingų problemų.

4. Prieigos valdymas SELinux

SELinux siūlo šiuos prieigos valdymo modelius:

Tipo vykdymas (TE): pagrindinis prieigos kontrolės mechanizmas, naudojamas tikslinėse politikose. Leidžia tvarkyti leidimus išsamiai, žemiausiu lygiu. Pats lankstiausias, bet kartu ir daugiausiai darbo reikalaujantis mechanizmas sistemos administratoriui.

Vaidmenimis pagrįstas prieigos valdymas (RBAC): Šiame modelyje prieigos teisės įgyvendinamos kaip vaidmenys. Vaidmuo yra leidimas atlikti tam tikrus vieno ar kelių sistemos elementų veiksmus, palyginti su kitomis sistemos dalimis. Iš esmės RBAC yra tolesnė TE plėtra.

Multi-Level Security (MLS): kelių lygių apsaugos modelis, kuriame visiems sistemos objektams priskiriamas tam tikras prieigos lygis. Prieigos leidimą arba atsisakymą leisti jam nulemia tik ryšys tarp šių lygių.

Visi SELinux procesai ir failai turi saugos kontekstą.
Pažvelkime į kontekstą praktikoje, atidžiau pažvelgdami į Apache žiniatinklio serverio pradžios puslapį, esantį /var/www/html/index.html

$ ls -Z /var/www/html/index.html -rw-r--r-- vartotojo vardas vartotojo vardas system_u:object_r:httpd_sys_content_t /var/www/html/index.html

Be standartinių failų leidimų, galime matyti SELinux saugos kontekstą: system_u: object_r: httpd_sys_content_t.

Kontekstas pagrįstas user:role:type:mls, bet laukai user:role:type rodomi, kol mls laukas yra paslėptas. Taip pat galime matyti tikslinę politiką, šiuo atveju httpd_sys_content_t.

Dabar pažvelkime į SELinux saugos kontekstą „httpd“ procesui („Apache“ žiniatinklio serveris):

$ps axZ | grep httpd system_u:system_r:httpd_t 3234 ? Ss 0:00 /usr/sbin/httpd

Kaip matome, šis procesas vykdomas httpd_t domene.

Na, o dabar pažvelkime į failo, esančio mūsų namų kataloge, saugos kontekstą:

$ ls -Z /home/naudotojovardas/manofailas.txt -rw-r--r-- vartotojo vardas vartotojo vardas user_u:object_r:user_home_t /home/username/myfile.txt

Matome, kad failo tipas yra user_home_t, šis tipas pagal numatytuosius nustatymus priskiriamas visiems namų katalogo failams.
Prieiga leidžiama tik tarp to paties tipo elementų, todėl „Apache“ žiniatinklio serveris gali lengvai nuskaityti failą /var/www/html/index.html, kurio tipas yra httpd_sys_content_t. Tuo pačiu metu, kadangi „Apache“ veikia httpd_t domene ir neužpildytų laukų userid:username, ji negali pasiekti failo home/username/myfile.txt, nors šį failą gali skaityti procesai, kurie neturi nustatytas tikslas. Tokiu būdu, jei „Apache“ žiniatinklio serveris bus pažeistas, užpuolikas negalės pasiekti failų ar paleisti procesų, kurie nėra httpd_t domene.

5. SELinux trikčių šalinimas

Anksčiau ar vėliau atsiras situacija, kai susidursite su situacija, kai SELinux neleidžia jums pasiekti kažko. Yra kelios pagrindinės prieigos atmetimo priežastys:

Neteisingai pažymėtas failas.
– Procesas vyksta netinkamame kontekste
– Politikos klaida. Procesui reikalinga prieiga prie failo, į kurį nebuvo atsižvelgta kuriant politiką.
- Bandyta įsiveržti.

Pirmosios trys prieigos uždraudimo priežastys išsprendžiamos gana nesunkiai, o bandant įsilaužti pasigirsta pavojaus signalas ir vartotojui išsiunčiamas atitinkamas pranešimas.
Norėdami išspręsti bet kokią problemą, tiesiog pažiūrėkite į SELinux žurnalą. Pagal numatytuosius nustatymus auditd procesas jį įrašo į failą /var/log/audit/audit.log. Jei šis procesas nevyksta, tada SELinux registruojasi į failą /var/log/messages, tokiu atveju visi prieigos kontrolės sistemos pranešimai yra pažymėti AVC raktu, kuris leidžia greitai išfiltruoti, pavyzdžiui, reikiamas eilutes. naudojant grep komandą.
Naujausiose platinimo versijose (pradedant nuo „CentOS 5“) yra programa su grafine vartotojo sąsaja, leidžiančia rodyti SELinux žurnalą patogia ir patogia forma. Ją galite iškviesti iš konsolės įvesdami sealert -b. Priemonė yra trikčių šalinimo paketo dalis. Jei X serveris neveikia, galite generuoti žmonėms skaitomas ataskaitas naudodami šią komandą:

Sealert -a /var/log/audit/audit.log > /path/to/mylogfile.txt

5.1 Failų saugos konteksto etikečių keitimas.

Komanda „chcon“ leidžia keisti failų ar katalogų SELinux kontekstą taip pat, kaip komandos „chown“ ir „chmod“ leidžia pakeisti failo savininką arba prieigos teises standartinėje prieigos kontrolės sistemoje.

Pažvelkime į kelis pavyzdžius.
Tarkime, kad sistemoje yra įdiegtas Apache žiniatinklio serveris ir turime pakeisti aplanką, kuriame saugomos svetainės (pagal numatytuosius nustatymus tai yra /var/www/html/) į, tarkime, /html/ ir sukurti indeksą. html failą šiame kataloge.
# mkdir /html # touch /html/index.html # ls -Z /html/index.html -rw-r--r-- root root user_u:object_r:default_t /html/index.html # ls -Z | grep html drwxr-xr-x root root user_u:object_r:default_t html

Aukščiau matome, kad ir /html katalogas, ir /html/index.html failas saugos kontekste yra default_t tipo. Tai reiškia, kad jei paleisime „Apache“ ir bandysime dirbti su šiuo katalogu ar failu, „SELinux“ uždraus mums prieigą. Ir tai bus visiškai teisinga, nes teisingas saugos kontekstas failams, sąveikaujantiems su Apache, yra httpd_sys_content_t.
Pakeiskime kontekstą ir patikrinkime, ar viskas padaryta teisingai:

# chcon -v --type=httpd_sys_content_t /html kontekstas /html pakeistas į user_u:object_r:httpd_sys_content_t # chcon -v --type=httpd_sys_content_t /html/index.html /html/index.html kontekstas pakeistas į user_u:object_r :httpd_sys_content_t # ls -Z /html/index.html -rw-r--r-- root root user_u:object_r:httpd_sys_content_t /html/index.html # ls -Z | grep html drwxr-xr-x root root user_u:object_r:httpd_sys_content_t html
Nebūtina rankiniu būdu apdoroti kiekvieno failo ir kiekvieno katalogo; galite tiesiog naudoti parinktį -R rekursinis katalogo perėjimas:

# chcon -Rv --type=httpd_sys_content_t /html

Tokie saugos konteksto pakeitimai išliks tarp paleidimų iš naujo, tačiau, jei bus pakeistos failų sistemos etiketės, pakeitimai bus prarasti. Techninės priežiūros ir eksploatavimo metu tai nėra neįprasta. Teisingas sprendimas tokioje situacijoje būtų (žinoma, po bandymo) sukurti papildomą taisyklę, o tada sujungti ją su vietinėmis vietinėmis taisyklėmis. Taigi jis turės didesnį prioritetą nei pagrindinės taisyklės.

Kad SELinux veiktų tinkamai net pakeitus failų sistemos etiketes, galime naudoti tiek SELinux valdymo įrankius su GUI sąsaja, tiek semanage console įrankį:

Semanuoti fcontext -a -t httpd_sys_content_t "/html(/.*)?"

Aukščiau pateiktame pavyzdyje mes priskyrėme kontekstą httpd_sys_content_t visiems failams, esantiems /html kataloge.

5.2 SELinux saugos konteksto atkūrimas.

Komanda „restorecon“ leidžia pakeisti saugos kontekstą į tą, kuris buvo priskirtas pagal numatytuosius nustatymus.
Vėlgi, kaip pavyzdį naudojame „Apache“ žiniatinklio serverį. Tarkime, kad vartotojas redagavo index.html failo kopiją savo namų kataloge ir perkėlė ją (su komanda mv) į katalogą, kuriame saugomos svetainės (/var/www/html).

Atkreipkite dėmesį, kad kopijuojant (cp komanda), failo saugos kontekstas sutaps su paskirties katalogo kontekstu, o perkeliant saugos kontekstas sutaps su šaltinio kontekstu. Žinoma, galime naudoti komandą chcon, kad pakeistume saugos kontekstą, bet kadangi perkelti failai dabar yra /var/www/html kataloge, galime tiesiog atkurti konteksto nustatymus visiems tame kataloge esantiems failams.

Norėdami atkurti kontekstą tik failo index.html, galime naudoti komandą:

# restorecon -v /var/www/html/index.html

Jei norime rekursyviai pereiti visą katalogą ir pakeisti visų jame esančių failų kontekstą, naudojame šią komandą:

# Restorecon -Rv /var/www/html

5.3 Etikečių keitimas visai failų sistemai.

Kartais reikia iš naujo nustatyti saugos etiketes visoje failų sistemoje. Dažniausiai ši operacija atliekama iš naujo įjungiant SELinux, kai sistema kurį laiką buvo išjungta. Tai taip pat reikalinga, jei politikos valdymo tipą pakeičiame į griežtą (šiuo atveju visi procesai veikia savo specialiose srityse; niekas negali dirbti unconfined_t domene).

Norėdami automatiškai perskirstyti failų sistemą, kai kitą kartą paleisite iš naujo, įveskite šias komandas:
# palieskite /.autorelabel # paleiskite iš naujo
Kartais automatinis perskirstymas neveikia (dažniausiai tais atvejais, kai buvo atnaujintas platinimo rinkinys su išjungtu SELinux). Tokiu atveju naudokite šią komandą:

# genhomedircon # touch /.autorelabel # paleisti iš naujo

5.4 Prieigos prie uostų suteikimas.

Dažnai norime, kad tokios paslaugos kaip Apache galėtų klausytis nestandartinių prievadų ir priimti įeinančius ryšius. Pagrindinės SELinux strategijos leidžia pasiekti tik iš anksto nustatytus prievadus, kurie yra glaudžiai susiję su tam tikra paslauga. Tarkime, kad norime, kad „Apache“ klausytųsi per 81 prievadą. Tokiu atveju turime pridėti taisyklę naudodami komandą semanage:

# semanage port -a -t http_port_t -p tcp 81

Visą prievadų, prie kurių SELinux suteikia prieigą, sąrašą galima peržiūrėti taip:

# semanage port -l

Kitoje, antroje vadovo dalyje parodysime galimybę lanksčiai konfigūruoti sistemos politiką.

Dalintis