1. Eessõna
Turvalisusega tugevdatud Linux (SELinux) on Linuxi tuumamoodul ja Linuxi turvaalamsüsteem.
SELinuxi arendas peamiselt NSA. Linuxi kernelid 2.6 ja uuemad integreerivad juba SELinux mooduleid.
SELinux on väga keeruline ja sisaldab palju kontseptuaalseid asju, mida on raske õppida. Paljud Linuxi süsteemiadministraatorid on SELinuxi välja lülitanud, sest see tekitab neile probleeme.
Kui suudad SELinuxi valdada ja seda õigesti kasutada, võib kogu süsteem jõuda põhimõtteliselt "purunematu" tasemele (pea alati meeles, et absoluutset turvalisust ei ole).
SELinuxi põhikontseptsioonide ja lihtsate konfiguratsioonimeetodite valdamine on kohustuslik kursus igale Linuxi süsteemiadministraatorile.
See artikkel põhineb CentOS 7.4.1708-l.
See artikkel on puhtalt isikliku õpikogemuse jagamine ja vahetus, vead on vältimatud, ainult viitamiseks! Kui leiad vea, palun osuta sellele, suur tänu!
2. SELinuxi roll ja õiguste haldamise mehhanism
2.1 SELinuxi roll
SELinuxi peamine ülesanne on minimeerida ressursse, mida teenuseprotsessid süsteemis saavad kasutada (väikseima privileegi printsiip).
Kujutage ette, et kui root-võrguteenusel on 0day haavatavus, saavad häkkerid seda haavatavust ära kasutada, et teha root-serveris mida iganes soovivad. Kas pole hirmutav?
SELinux on siin, et seda probleemi lahendada.
2.2 DAC
Operatsioonisüsteemis, mis ei kasuta SELinuxi, määrab see, kas ressursile pääseb ligi, see, kas ressursil on vastava kasutaja õigused (lugemine, kirjutamine, käivitamine).
Kui selle ressursi ligipääsu protsess vastab ülaltoodud tingimustele, on sellele ligipääsetav.
Kõige saatuslikum probleem on see, et juurkasutajad ei allu mingitele regulatsioonidele ning kõik süsteemi ressursid on piiranguteta kättesaadavad.
Selle õiguste haldusmehhanismi peamine osa on kasutaja, tuntud ka kui autonoomne juurdepääsukontroll (DAC).
2.3 MAC
SELinuxit kasutavas operatsioonisüsteemis määravad tegurid, kas ressursile pääseb ligi, mitte ainult ülaltoodud tegurid, vaid ka see, kas igal protsessitüübil on juurdepääs teatud tüüpi ressursile.
Nii on isegi kui protsess töötab root-failina, enne kui otsustatakse, kas lubada juurdepääsu ressursile, määrata protsessi tüüp ja milliseid ressursse on lubatud. Protsessi aktiivset ruumi saab samuti minimaalseks suruda.
Isegi root-teenusel on tavaliselt ligipääs ainult vajalikele ressurssidele. Isegi kui programm on haavatav, on mõju ulatus piiratud ressurssidega, millele tal on lubatud ligi pääseda. Turvalisus on oluliselt suurendatud.
Selle õiguste haldamise mehhanismi peamine osa on protsess, tuntud ka kui kohustuslik juurdepääsukontroll (MAC).
MAC jaguneb kaheks osaks: üks on kategooria turvalisuse (MCS) režiim ja teine mitmetasandiline turvalisus (MLS) režiim.
Järgnevad tegevused on MCS-režiimis.
2.4 DAC-i ja MAC-i võrdlus
Siin on illustreerimiseks üks pilt.
Nagu näha, DAC-režiimis, kui vastaval kataloogil on vastava kasutaja õigused, on sellele ligipääsetav. MAC-režiimis on see piiratud ka kataloogide hulgaga, millele protsessidel on lubatud ligi pääseda.
3. SELinuxi põhimõisted
3.1 Teema
Seda saab täielikult seostada protsessiga.
Märkus: Lihtsama arusaamise huvides, kui pole teisiti märgitud, käsitletakse protsessi allpool peamise osana.
3.2 Eesmärk
Ressursid, millele pääseb ligi direktor. See võib olla failid, kataloogid, pordid, seadmed jne.
Märkus: Lihtsama arusaamise huvides, kui pole teisiti märgitud, loetakse järgmised dokumendid või kataloogid objektideks.
3.3 Poliitika ja reegel
Süsteemis on tavaliselt palju faile ja protsesse ning aja ja kulude säästmiseks reguleerime tavaliselt ainult teatud protsesse valikuliselt.
Ja milliseid protsesse tuleb reguleerida ja kuidas neid kontrollida, määrab poliitika.
Poliisis on mitu reeglit. Mõningaid reegleid saab vajadusel lubada või keelata (edaspidi Boole'i reeglid).
Reeglid on modulaarsed ja laiendatavad. Uue rakenduse paigaldamisel saab rakendus lisada reegleid, lisades uusi mooduleid. Kasutajad saavad ka reegleid käsitsi lisada või eemaldada.
CentOS 7 süsteemis on kolm poliitikate komplekti, nimelt:
1. sihitud: Kontrollib enamikku võrguteenuse protsesse. See on süsteemi vaikimisi kasutatav poliitika (kõik allpool toodud on kasutusel).
2. Miinimum: Sihitud andmete põhjal reguleeritakse ainult valitud võrguteenuse protsesse. Üldiselt mitte.
3. MLS: Mitmetasandiline turvakaitse. Reguleeri kõiki protsesse. See on kõige rangem poliitika ja konfiguratsioon on väga keeruline. Üldiselt seda ei kasutata, välja arvatud juhul, kui turvalisuse nõuded on äärmiselt kõrged.
Poliitikaid saab määrata /etc/selinux/config.
3.4 Turvalisuse kontekst
Turvakontekst on SELinuxi keskmes.
Turvalisuse kontekst jagan selle "protsessi turvalisuse kontekstiks" ja "dokumenditurvalisuse kontekstiks".
Protsessiturbe kontekst vastab tavaliselt mitmele dokumenditurvalisuse kontekstile.
Ainult siis, kui nende kahe turvalisuse kontekst vastab sellele, saab protsess failile ligi pääseda. Nende kirjavahetust määravad poliisi reeglid.
Faili turvalisuse kontekst sõltub sellest, kus fail loodi ja milline protsess selle lõi. Ja süsteemil on vaikimisi väärtuste komplekt ning kasutajad saavad ka vaikimisi väärtusi määrata.
Oluline on märkida, et pelgalt failide liigutamine ei muuda sinu failide turvakonteksti.
Turvalisuse konteksti struktuur ja tähendus
Turvakontekstis on neli välja, mis on eraldatud koolonidega. Kuju nagu: system_u:object_r:admin_home_t:s0.
3.5 SELinux töörežiim
SELinuxil on kolm töörežiimi, nimelt:
1. jõustamine: Jõustatud režiim. SELinuxi reeglite rikkumised blokeeritakse ja logitakse logidesse.
2. Lubav: Tolerantsi režiim. SELinuxi reeglite rikkumised logitakse ainult logidesse. Üldiselt silumiseks.
3. välja lülitatud: lülita SELinux välja.
SELinuxi töörežiimi saab määrata /etc/selinux/config.
Kui soovid üle minna keelatud olekust jõustamise või lubamise vastu, pead süsteemi taaskäivitama. Ja vastupidi.
Jõustamise ja lubamise režiime saab kiiresti vahetada käsuga Setenforce 1|0.
Oluline on märkida, et kui süsteem on mõnda aega töötanud SELinuxi väljalülitamisega, võib esimene taaskäivitus pärast SELinuxi sisselülitamist olla aeglasem. Sest süsteem peab looma failidele kettal turvalise konteksti (ütlesin, et taaskäivitasin umbes 10 minutiks ja arvasin, et see on surnud...... )。
SELinuxi logid tuleb logida auditd.service abiga, palun ära keela neid.
3.6 SELinux töövoog
Siin on tsitaat pildilt, ilma suurema selgituseta.
Märkus: ülaltoodud turvatekst viitab turvakontekstile.
4. Põhilised SELinuxi operatsioonid
4.1 Faili või kataloogi turvakonteksti päring
Käsu põhikasutus
ls -Z
Kasutusnäited
Küsi /etc/hostide turvakonteksti.
ls -Z /jne/hostid
Täitmise tulemused
-rw-r--r--. juurjuur system_u:object_r:net_conf_t:s0 /jne/hostid
4.2 Protsessi turvakonteksti päring
Käsu põhikasutus
ps auxZ | Grep -v grep | grep
Kasutusnäited
Küsi Nginxiga seotud protsesside turvakonteksti.
ps auxZ | Grep -v grep | Grep Nginx
Täitmise tulemused
system_u:system_r:httpd_t:s0 juur 7997 0,0 0,0 122784 2156 ? Ss 14:31 0:00 nginx: peamine protsess /usr/sbin/nginx
system_u:system_r:httpd_t:s0 nginx 7998 0.0 0.0 125332 7560 ? S 14:31 0:00 nginx: töötajate protsess
4.3 Faili või kataloogi turvakonteksti käsitsi muutmine
Käsu põhikasutus
CHCON [...]
Valikufunktsioon -u Muuda turvakonteksti kasutajavälja -r Muuda turvakonteksti rollivälja -t Muuda turvakonteksti tüübivälja -l Muuda turvakonteksti tasemevälja --viide Muuda turvakonteksti vastavuses määratud faili või kataloogiga -R Rekursiivne operatsioon -h Muuda pehme lingi turvakonteksti (muuda vastavat faili ilma selle valikuta)
Kasutusnäited
Muuda testi turvakontekst aaa_u:bbb_r:ccc_t:s0-ks.
chcon -u aaa_u -r bbb_r -t ccc_t test
4.4 Faili või kataloogi turvakontekst tagasi vaikimisi väärtusele
Käsu põhikasutus
RestoreCon [valikud] [...]
Valikufunktsioon - V printimise protseduuri protseduur - R rekursiivne operatsioon
Kasutusnäited
Kui oled lisanud mõned veebifailid oma Nginx serveri kataloogi, sea nende uute failide jaoks õige turvakontuur.
restorecon -R /usr/share/nginx/html/
4.5 Päringu Boole'i reeglid ja nende staatus süsteemis
Käsu põhikasutus
getsebool -a
Kuna käsk pärib kas kõiki reegleid või ainult ühte reeglit, pärib ta tavaliselt kõigepealt kõik reeglid ja seejärel filtreerib grepiga.
Kasutusnäited
Päring Boole'i reeglite kohta, mis on seotud httpd-ga.
Getsebool -a | grep httpd
Täitmise tulemused
httpd_anon_write --> minema
httpd_builtin_scripting -->
httpd_can_check_spam -->
httpd_can_connect_ftp --> ära
#以下省略
4.6 Boole'i reegli vahetamine
Käsu põhikasutus
Setsebool [valik]
Valikufunktsioon -P taaskäivitamine kehtib endiselt
Kasutusnäited
Lülita sisse httpd_anon_write reeglid.
setsebool -P httpd_anon_write sisse
4.7 Lisa kataloogile vaikimisi turvakontekst
Käsu põhikasutus
semanage fcontext -a -t "(/.*)?"
Märkus: Kataloogi või faili vaikimisi turvakonteksti saab vaadata, kasutades käsu semanage fcontext -l koos grep filtreerimisega.
Kasutusnäited
Kui lisad Nginxile uue saidikataloogi /usr/share/nginx/html2, pead seadistama sama vaikimisi turvakonteksti nagu algses kataloogis.
Semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html2(/.*)?"
4.8 Lisa pordid, mida teatud tüüpi protsessid lubavad
Käsu põhikasutus
semanage port -a -t -p
Märkus: Erinevate teenusetüüpide jaoks lubatud pordinumbreid saab vaadata, kasutades käsu semanage port -l koos grep filtreerimisega.
Kasutusnäited
Nginxi jaoks pead HTTP teenuste jaoks kasutama porti 10080.
Semanage port -a -t http_port_t -p TCP 10080
5. SELinuxi veaanalüüs ja lahendamine
5.1 SELinuxi logide mõistmine
Kui SELinux on lubatud, loetakse paljude teenuste normaalne käitumine rikkumiseks (nii pealkirjas kui ka allolevates vigades).
Praegu peame kasutama SELinuxi rikkumislogisid nende analüüsimiseks ja lahendamiseks.
SELinuxi rikkumislogid salvestatakse /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=(none) 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=edu'
...
Fail sisaldab palju sisu ja on segatud paljude süsteemiauditi logidega, millel pole SELinuxi vigadega mingit pistmist. Analüüsi tegemiseks kasutame sealert utiliiti (kui käsk ei leia, paigalda se-tõrkeotsingu pakett).
5.2 Analüüsi vigu sealertiga
Käsu põhikasutus
sealert -a /var/log/audit/audit.log
Pärast käsu täitmist peab süsteem võtma aega, et logides olevaid rikkumisi analüüsida ja esitada analüüsiraport. |