1. Preambulė
"Security-Enhanced Linux" (SELinux) yra "Linux" branduolio modulis ir "Linux" saugos posistemis.
SELinux pirmiausia sukūrė NSA. Linux branduoliai 2.6 ir naujesnės versijos jau integruoja SELinux modulius.
SELinux yra labai sudėtingas ir turi daug konceptualių dalykų, kuriuos sunku išmokti. Daugelis Linux sistemos administratorių išjungė SELinux, nes jiems tai kelia problemų.
Jei sugebėsite įvaldyti SELinux ir teisingai jį naudoti, manau, kad visa sistema iš esmės gali pasiekti "nesunaikinamą" tašką (visada atminkite, kad nėra absoliutaus saugumo).
Pagrindinių SELinux sąvokų ir paprastų konfigūravimo metodų įsisavinimas yra privalomas kursas kiekvienam Linux sistemos administratoriui.
Šis straipsnis pagrįstas CentOS 7.4.1708.
Šis straipsnis yra grynai asmeninis mokymosi patirties dalijimasis ir mainai, klaidos yra neišvengiamos, tik nuoroda! Jei radote klaidą, atkreipkite dėmesį į ją, labai ačiū!
2. SELinux vaidmuo ir leidimų valdymo mechanizmas
2.1 SELinux vaidmuo
Pagrindinė SELinux funkcija yra sumažinti išteklius, kuriuos gali pasiekti sistemos aptarnavimo procesai (mažiausių privilegijų principas).
Įsivaizduokite, kad jei tinklo paslauga, veikianti kaip root, turi 0day pažeidžiamumą, įsilaužėliai gali išnaudoti šį pažeidžiamumą ir padaryti viską, ko nori jūsų serveryje kaip root. Argi ne baisu?
SELinux yra čia, kad išspręstų šią problemą.
2.2 DAC
Operacinėje sistemoje, kuri nenaudoja SELinux, veiksnys, lemiantis, ar išteklius gali būti pasiekiamas, yra tai, ar išteklius turi atitinkamo vartotojo leidimus (skaityti, rašyti, vykdyti).
Jei procesas, pasiekiantis šį šaltinį, atitinka aukščiau nurodytas sąlygas, jį galima pasiekti.
Lemtingiausia problema yra ta, kad root vartotojams netaikomas joks reguliavimas, o bet kokie sistemos ištekliai gali būti pasiekiami be apribojimų.
Pagrindinė šio leidimų valdymo mechanizmo dalis yra vartotojas, dar žinomas kaip autonominė prieigos kontrolė (DAC).
2.3 MAC
Operacinėje sistemoje, naudojančioje SELinux, veiksniai, lemiantys, ar galima pasiekti išteklius, yra ne tik aukščiau išvardyti veiksniai, bet ir tai, ar kiekvienas proceso tipas turi prieigą prie tam tikro tipo išteklių.
Tokiu būdu, net jei procesas veikia kaip root, prieš nusprendžiant, ar leisti prieigą prie išteklių, būtina nustatyti proceso tipą ir išteklių, kuriuos leidžiama pasiekti, tipus. Aktyvią proceso erdvę taip pat galima suspausti iki minimumo.
Net paslaugos procesas, veikiantis kaip root, paprastai turi prieigą tik prie reikiamų išteklių. Net jei programa yra pažeidžiama, poveikio mastas apsiriboja ištekliais, kuriuos jai leidžiama pasiekti. Saugumas labai padidėja.
Pagrindinis šio leidimų valdymo mechanizmo elementas yra procesas, dar žinomas kaip privaloma prieigos kontrolė (MAC).
MAC yra padalintas į du būdus: vienas vadinamas kategorijos saugumo (MCS) režimu, o kitas - daugiapakopio saugumo (MLS) režimu.
Šie veiksmai atliekami MCS režimu.
2.4 DAC ir MAC palyginimas
Štai paveikslėlis iliustracijai.
Kaip matote, DAC režimu, kol atitinkamas katalogas turi atitinkamo vartotojo leidimus, jį galima pasiekti. MAC režimu jį taip pat riboja katalogų, kuriuos leidžiama pasiekti procesams, asortimentas.
3. Pagrindinės SELinux sąvokos
3.1 Objektas
Tai gali būti visiškai prilyginta procesui.
Pastaba: Kad būtų lengviau suprasti, jei nenurodyta kitaip, procesas laikomas pagrindiniu žemiau pateiktu tekstu.
3.2 Objektas
Direktoriaus prieinami ištekliai. Tai gali būti failai, katalogai, prievadai, įrenginiai ir kt.
Pastaba: Kad būtų lengviau suprasti, jei nenurodyta kitaip, objektais laikomi šie dokumentai arba katalogai.
3.3 Politika ir taisyklės
Paprastai sistemoje yra daug failų ir procesų, o norėdami sutaupyti laiko ir pridėtinių išlaidų, paprastai selektyviai reguliuojame tik tam tikrus procesus.
Kokius procesus reikia reguliuoti ir kaip juos kontroliuoti, nustato politika.
Strategijoje yra kelios taisyklės. Kai kurias taisykles galima įjungti arba išjungti pagal poreikį (toliau – Bulio taisyklės).
Taisyklės yra modulinės ir išplečiamos. Diegdama naują programą, programa gali pridėti taisykles pridėdama naujų modulių. Vartotojai taip pat gali rankiniu būdu pridėti arba atimti taisykles.
"CentOS 7" sistemoje yra trys politikos rinkiniai, būtent:
1. tikslinis: valdo daugumą tinklo paslaugų procesų. Tai yra strategija, kurią sistema naudoja pagal numatytuosius nustatymus (naudojamos visos toliau pateiktos).
2. Minimalus: Remiantis tiksliniais, reguliuojami tik pasirinkti tinklo paslaugų procesai. Paprastai ne.
3. MLS: daugiapakopė saugumo apsauga. Reguliuokite visus procesus. Tai yra griežčiausia politika, o konfigūracija yra labai sudėtinga. Paprastai jis nenaudojamas, nebent yra itin aukšti saugumo reikalavimai.
Strategijas galima nustatyti /etc/selinux/config.
3.4 Saugumo kontekstas
Saugumo kontekstas yra SELinux pagrindas.
Saugumo kontekstas Aš jį skirstau į "proceso saugumo kontekstą" ir "dokumentų saugumo kontekstą".
Proceso saugos kontekstas paprastai atitinka kelis dokumentų saugos kontekstus.
Tik tada, kai abiejų saugos kontekstas sutampa, procesas gali pasiekti failą. Jų atitikimą lemia politikos taisyklės.
Failo saugos kontekstas nustatomas pagal tai, kur failas buvo sukurtas ir procesas, kuris jį sukūrė. Sistema turi numatytųjų reikšmių rinkinį, o vartotojai taip pat gali nustatyti numatytąsias reikšmes.
Svarbu pažymėti, kad paprasčiausias failų perkėlimas nepakeičia failų saugos konteksto.
Saugumo konteksto struktūra ir reikšmė
Saugos kontekste yra keturi laukai, atskirti dvitaškiais. Forma, pvz.: system_u:object_r:admin_home_t:s0.
3.5 SELinux darbo režimas
SELinux turi tris veikimo režimus, būtent:
1. vykdymas: priverstinis režimas. SELinux taisyklių pažeidimai bus blokuojami ir registruojami žurnaluose.
2. Leistinas: tolerancijos režimas. SELinux taisyklių pažeidimai registruojami tik žurnaluose. Paprastai derinimui.
3. išjungta: išjunkite SELinux.
SELinux darbo režimą galima nustatyti /etc/selinux/config.
Jei norite perjungti iš išjungto į vykdomąjį arba leistiną, turėsite iš naujo paleisti sistemą. Ir atvirkščiai.
Vykdymo ir leidimo režimus galima greitai perjungti naudojant komandą Setenforce 1|0.
Svarbu pažymėti, kad jei sistema kurį laiką veikė išjungus SELinux, pirmasis paleidimas iš naujo įjungus SELinux gali būti lėtesnis. Nes sistema turi sukurti saugų kontekstą diske esantiems failams (sakiau, kad paleidau iš naujo apie 10 minučių ir maniau, kad jis negyvas...... )。
SELinux žurnalai turi būti registruojami auditd.service pagalba, prašome jo neišjungti.
3.6 SELinux darbo eiga
Štai citata iš nuotraukos, be didelio paaiškinimo.
Pastaba: Aukščiau pateiktas saugos tekstas nurodo saugos kontekstą.
4. Pagrindinės SELinux operacijos
4.1 Užklauskite failo ar katalogo saugos konteksto
Komandos pagrindinis naudojimas
ls -z
Naudojimo pavyzdžiai
Užklauskite /etc/hosts saugos kontekstą.
ls -Z /etc/hosts
Vykdymo rezultatai
-rw-r--r--. šakninė šaknis system_u:object_r:net_conf_t:s0 /etc/hosts
4.2 Užklauskite proceso saugos konteksto
Komandos pagrindinis naudojimas
ps auxZ | grep -v grep | grep
Naudojimo pavyzdžiai
Užklauskite su "Nginx" susijusių procesų saugos konteksto.
ps auxZ | grep -v grep | grep nginx
Vykdymo rezultatai
system_u:system_r:httpd_t:s0 šaknis 7997 0.0 0.0 122784 2156 ? Ss 14:31 0:00 nginx: pagrindinis procesas /usr/sbin/nginx
system_u:system_r:httpd_t:s0 nginx 7998 0.0 0.0 125332 7560 ? S 14:31 0:00 nginx: darbo procesas
4.3 Rankiniu būdu pakeiskite failo ar katalogo saugos kontekstą
Komandos pagrindinis naudojimas
CHCON [...]
Parinktis funkcija -u Modifikuoti saugos konteksto vartotojo lauką -r Modifikuoti saugos konteksto vaidmens lauką -t Modifikuoti saugos konteksto tipo lauką -l Modifikuoti saugos konteksto lygio lauką --reference Modifikuoti saugos kontekstą, atitinkantį nurodytą failą arba katalogą -R Rekursinė operacija -h Modifikuoti minkštosios nuorodos saugos kontekstą (modifikuoti atitinkamą minkštosios nuorodos failą be šios parinkties)
Naudojimo pavyzdžiai
Pakeiskite bandymo saugos kontekstą į aaa_u:bbb_r:ccc_t:s0.
CHCON -u aaa_u -r bbb_r -t ccc_t testas
4.4 Grąžinkite failo ar katalogo saugos kontekstą į numatytąją reikšmę
Komandos pagrindinis naudojimas
restorecon [parinktys] [...]
Parinktis Funkcija - V Spausdinimo operacija Procedūra - R Rekursinė operacija
Naudojimo pavyzdžiai
Pridėję keletą žiniatinklio failų į "Nginx" serverio katalogą, nustatykite tinkamą šių naujų failų saugos kontekstą.
restorecon -R /usr/share/nginx/html/
4.5 Užklauskite Bulio logikos taisykles ir jų būseną sistemoje
Komandos pagrindinis naudojimas
getsebool -a
Kadangi komanda užklausia visas taisykles arba tik vieną taisyklę, ji paprastai pirmiausia užklausia visas taisykles, o tada filtruoja grep.
Naudojimo pavyzdžiai
Užklausti Bulio logikos taisykles, susijusias su httpd.
getsebool -a | grep httpd
Vykdymo rezultatai
httpd_anon_write --> išjungti
httpd_builtin_scripting --> įjungta
httpd_can_check_spam --> išjungti
httpd_can_connect_ftp --> išjungti
#以下省略
4.6 Bulio taisyklės perjungimas
Komandos pagrindinis naudojimas
setsebool [parinktis]
Parinkties funkcija -P paleidimas iš naujo vis tiek įsigalioja
Naudojimo pavyzdžiai
Įjunkite httpd_anon_write taisykles.
setsebool -P httpd_anon_write įjungta
4.7 Pridėkite numatytąjį katalogo saugos kontekstą
Komandos pagrindinis naudojimas
semanage fcontext -a -t "(/.*)?"
Pastaba: Numatytąjį katalogo ar failo saugos kontekstą galima peržiūrėti naudojant komandą semanage fcontext -l kartu su grep filtravimu.
Naudojimo pavyzdžiai
Prie "Nginx" pridėję naują svetainės katalogą /usr/share/nginx/html2, turite nustatyti tą patį numatytąjį saugos kontekstą kaip ir pradiniame kataloge.
semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html2(/.*)?"
4.8 Pridėkite prievadus, kuriuos leidžia tam tikrų tipų procesai
Komandos pagrindinis naudojimas
semanage port -a -t -p
Pastaba: Įvairių tipų paslaugoms leidžiamus prievadų numerius galima peržiūrėti naudojant komandą semanage port -l su grep filtravimu.
Naudojimo pavyzdžiai
"Nginx" HTTP paslaugoms reikia naudoti 10080 prievadą.
SEMANAGE prievadas -a -t http_port_t -p TCP 10080
5. SELinux klaidų analizė ir sprendimas
5.1 SELinux žurnalų supratimas
Kai SELinux įjungtas, kai kurie normalūs daugelio paslaugų elgesys laikomi pažeidimu (tiek pavadinime, tiek žemiau esančiose klaidose).
Šiuo metu turime naudoti SELinux pažeidimų žurnalus, kad juos analizuotume ir išspręstume.
SELinux pažeidimų žurnalai išsaugomi /var/log/audit/audit.log.
/var/log/audit/audit.log 的内容大概是这样的。
type=LOGIN msg=audit(1507898701.391:515): pid=8523 uid=0 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 old-auid=4294967295 auid=0 tty=(nėra) old-ses=4294967295 ses=25 res=1
type=USER_START msg=audit(1507898701.421:516): pid=8523 uid=0 auid=0 ses=25 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:session_open grantors=pam_loginuid,pam_ keyinit,pam_limits,pam_systemd acct="root" exe="/usr/sbin/crond" hostname=? addr=? terminal=cron res=sėkmė'
...
Failas yra daug turinio ir sumaišytas su daugybe sistemos audito žurnalų, kurie neturi nieko bendra su SELinux klaidomis. Analizei padėti naudosime "sealert" įrankį (jei raginimas neranda komandos, įdiekite trikčių šalinimo paketą).
5.2 Analizuokite klaidas naudodami "sealert"
Komandos pagrindinis naudojimas
sealert -a /var/log/audit/audit.log
Įvykdžius komandą, sistema turi šiek tiek laiko išanalizuoti žurnalų pažeidimus ir pateikti analizės ataskaitą. |