Kurso studentams parengto straipsnio vertimas
SELinux arba Security Enhanced Linux yra patobulintas prieigos kontrolės mechanizmas, sukurtas JAV Nacionalinės saugumo agentūros (NSA), kad būtų išvengta kenkėjiškų įsilaužimų. Jis įgyvendina priverstinį (arba privalomą) prieigos kontrolės modelį (angl. Mandatory Access Control, MAC), papildantį esamą diskrecinį (arba atrankinį) modelį (angl. Discretionary Access Control, DAC), ty leidimus skaityti, rašyti, vykdyti.
SELinux turi tris režimus:
- Vykdymas — prieigos atsisakymas remiantis politikos taisyklėmis.
- Leidžiantis — politiką pažeidžiančių veiksmų žurnalo vedimas, kuris būtų draudžiamas vykdymo režimu.
- Išjungtas - visiškai išjungti SELinux.
Pagal numatytuosius nustatymus nustatymai yra /etc/selinux/config
SELinux režimų keitimas
Norėdami sužinoti esamą režimą, paleiskite
$ getenforce
Norėdami pakeisti režimą į leistiną, paleiskite šią komandą
$ setenforce 0
arba, norėdami pakeisti režimą iš leidžiamas apie vykdymo, vykdyti
$ setenforce 1
Jei reikia visiškai išjungti SELinux, tai galima padaryti tik naudojant konfigūracijos failą
$ vi /etc/selinux/config
Norėdami išjungti, pakeiskite SELINUX parametrą taip:
SELINUX=disabled
SELinux nustatymas
Kiekvienas failas ir procesas yra pažymėti SELinux kontekstu, kuriame yra papildomos informacijos, tokios kaip vartotojas, vaidmuo, tipas ir kt. Jei pirmą kartą įgalinate SELinux, pirmiausia turėsite sukonfigūruoti kontekstą ir etiketes. Etikečių ir konteksto priskyrimo procesas žinomas kaip žymėjimas. Norėdami pradėti žymėjimą, konfigūracijos faile pakeičiame režimą į leidžiamas.
$ vi /etc/selinux/config
SELINUX=permissive
Nustačius režimą leidžiamas, sukurkite tuščią paslėptą failą šaknyje su pavadinimu autorelabel
$ touch /.autorelabel
ir iš naujo paleiskite kompiuterį
$ init 6
Pastaba: mes naudojame režimą leidžiamas žymėjimui, nuo režimo naudojimo vykdymo gali sukelti sistemos gedimą perkrovimo metu.
Nesijaudinkite, jei atsisiuntimas užstringa kokiame nors faile, žymėjimas užtrunka. Kai žymėjimas bus baigtas ir jūsų sistema bus paleista, galite pereiti į konfigūracijos failą ir nustatyti režimą vykdymoir taip pat paleisti:
$ setenforce 1
Dabar sėkmingai įjungėte SELinux savo kompiuteryje.
Žurnalų stebėjimas
Žymėdami arba kai sistema veikia, galėjo atsirasti klaidų. Norėdami patikrinti, ar jūsų SELinux veikia tinkamai ir ar jis neblokuoja prieigos prie jokio prievado, programos ir pan., turite peržiūrėti žurnalus. SELinux žurnalas yra /var/log/audit/audit.log
, bet nereikia perskaityti viso teksto, kad rastumėte klaidų. Klaidoms rasti galite naudoti įrankį audit2why. Vykdykite šią komandą:
$ audit2why < /var/log/audit/audit.log
Dėl to gausite klaidų sąrašą. Jei žurnale klaidų nebuvo, pranešimai nebus rodomi.
SELinux strategijos konfigūravimas
SELinux politika yra taisyklių rinkinys, valdantis SELinux saugos mechanizmą. Politika apibrėžia tam tikros aplinkos taisyklių rinkinį. Dabar sužinosime, kaip sukonfigūruoti politiką, leidžiančią pasiekti draudžiamas paslaugas.
1. Loginės reikšmės (jungikliai)
Jungikliai (loginės vertės) leidžia keisti politikos dalis vykdymo metu, nekuriant naujų strategijų. Jie leidžia atlikti pakeitimus neperkraunant ir nekompiliuojant SELinux politikos.
Pavyzdys
Tarkime, kad norime dalytis vartotojo namų katalogu per FTP skaitymą/rašymą ir jau bendriname, bet bandydami prieiti prie jo nieko nematome. Taip yra todėl, kad SELinux politika neleidžia FTP serveriui skaityti ir rašyti į vartotojo namų katalogą. Turime pakeisti politiką, kad FTP serveris galėtų pasiekti namų katalogus. Pažiūrėkime, ar yra kokių nors jungiklių
$ semanage boolean -l
Ši komanda pateiks galimų jungiklių sąrašą su jų dabartine būsena (įjungta arba išjungta) ir aprašymu. Galite patikslinti paiešką pridėdami grep, kad rastumėte tik ftp rezultatus:
$ semanage boolean -l | grep ftp
ir rasite toliau nurodytus dalykus
ftp_home_dir -> off Allow ftp to read & write file in user home directory
Šis jungiklis išjungtas, todėl įjungsime jį naudodami setsebool $ setsebool ftp_home_dir on
Dabar mūsų ftp demonas galės pasiekti vartotojo namų katalogą.
Pastaba: taip pat galite gauti galimų jungiklių sąrašą be aprašymo getsebool -a
2. Etiketės ir kontekstas
Tai yra labiausiai paplitęs SELinux politikos įgyvendinimo būdas. Kiekvienas failas, aplankas, procesas ir prievadas yra pažymėtas SELinux kontekstu:
- Failų ir aplankų etiketės saugomos kaip išplėstiniai atributai failų sistemoje ir jas galima peržiūrėti naudojant šią komandą:
$ ls -Z /etc/httpd
- Procesų ir prievadų žymėjimą tvarko branduolys, o šias etiketes galite peržiūrėti taip:
procesą
$ ps –auxZ | grep httpd
uostas
$ netstat -anpZ | grep httpd
Pavyzdys
Dabar pažvelkime į pavyzdį, kad geriau suprastume etiketes ir kontekstą. Tarkime, kad turime ne katalogą, o žiniatinklio serverį /var/www/html/ использует /home/dan/html/
. SELinux laikys tai politikos pažeidimu ir jūs negalėsite peržiūrėti savo tinklalapių. Taip yra todėl, kad nenustatėme su HTML failais susieto saugos konteksto. Norėdami peržiūrėti numatytąjį saugos kontekstą, naudokite šią komandą:
$ ls –lz /var/www/html
-rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/
Štai mes gavome httpd_sys_content_t
kaip html failų kontekstą. Turime nustatyti šį saugos kontekstą mūsų dabartiniam katalogui, kuriame šiuo metu yra toks kontekstas:
-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/
Alternatyvi komanda failo ar katalogo saugos kontekstui patikrinti:
$ semanage fcontext -l | grep '/var/www'
Mes taip pat naudosime semanažą, norėdami pakeisti kontekstą, kai tik surasime tinkamą saugos kontekstą. Norėdami pakeisti /home/dan/html kontekstą, paleiskite šias komandas:
$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html
Pakeitus kontekstą naudojant semanage, komanda restorecon įkels numatytąjį failų ir katalogų kontekstą. Mūsų žiniatinklio serveris dabar galės skaityti failus iš aplanko /home/dan/html
nes šio aplanko saugos kontekstas buvo pakeistas į httpd_sys_content_t
.
3. Sukurkite vietinę politiką
Gali būti situacijų, kai aukščiau pateikti metodai jums nenaudingi ir audit.log rasite klaidų (avc/denial). Kai taip nutinka, turite sukurti vietinę politiką. Visas klaidas galite rasti naudodami audit2why, kaip aprašyta aukščiau.
Galite sukurti vietinę politiką, kad išspręstumėte klaidas. Pavyzdžiui, gauname klaidą, susijusią su httpd (apache) arba smbd (samba), mes grep klaidas ir sukuriame joms politiką:
apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy
Čia http_policy
и smb_policy
yra vietinės politikos, kurią sukūrėme, pavadinimai. Dabar turime įkelti šias sukurtas vietines strategijas į dabartinę SELinux politiką. Tai galima padaryti taip:
$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp
Mūsų vietinė politika buvo atsisiųsta ir nebeturėtume gauti jokių avc arba denail audit.log.
Tai buvo mano bandymas padėti jums suprasti SELinux. Tikiuosi, kad perskaitę šį straipsnį jausitės patogiau naudodami SELinux.
Šaltinis: www.habr.com