1. Predgovor
Varnostno izboljšani Linux (SELinux) je modul jedra Linuxa in varnostni podsistem Linuxa.
SELinux je bil predvsem razvit s strani NSA. Linux jedra 2.6 in novejši že vključujejo SELinux module.
SELinux je zelo kompleksen in vsebuje veliko konceptualnih stvari, ki jih je težko osvojiti. Veliko Linux sistemskih administratorjev je izklopilo SELinux, ker jim povzroča težave.
Če obvladaš SELinux in ga pravilno uporabljaš, mislim, da lahko celoten sistem doseže točko, ko postane "neuničljiv" (vedno ne pozabi, da ni absolutne varnosti).
Obvladovanje osnovnih konceptov SELinuxa ter preprostih metod konfiguracije je obvezen predmet za vsakega Linux sistemskega administratorja.
Ta članek temelji na CentOS 7.4.1708.
Ta članek je zgolj osebna izkušnja, deljenje in izmenjava učnih izkušenj, napake so neizogibne, le za referenco! Če najdete napako, jo prosim opozorite, najlepša hvala!
2. Vloga SELinuxa in mehanizem upravljanja dovoljenj
2.1 Vloga SELinuxa
Glavna funkcija SELinuxa je zmanjšati vire, do katerih lahko dostopajo servisni procesi v sistemu (načelo najmanjših privilegijev).
Predstavljajte si, da ima omrežna storitev, ki teče kot root, ranljivost 0day, hekerji pa lahko to ranljivost izkoristijo in počnejo karkoli želijo na vašem strežniku kot root. Ali ni strašljivo?
SELinux je tukaj, da reši ta problem.
2.2 DAC
V operacijskem sistemu, ki ne uporablja SELinuxa, je dejavnik, ki določa, ali je vir dostopen, ali ima vir dovoljenja ustreznega uporabnika (branje, pisanje, izvajanje).
Dokler proces, ki dostopa do tega vira, izpolnjuje zgoraj navedene pogoje, je dostopen do njega.
Najbolj usodna težava je, da root uporabniki niso podvrženi nobeni regulaciji, vsi viri v sistemu pa so dostopni brez omejitev.
Glavni del tega mehanizma za upravljanje dovoljenj je uporabnik, znan tudi kot avtonomni nadzor dostopa (DAC).
2.3 MAC
V operacijskem sistemu, ki uporablja SELinux, dejavniki, ki določajo, ali je vir dostopen, niso le zgoraj navedeni dejavniki, temveč tudi, ali ima vsaka vrsta procesa dostop do določene vrste vira.
Na ta način, tudi če proces teče kot koren, je treba določiti vrsto procesa in vrste virov, do katerih je dovoljen dostop, preden se odločimo, ali dovoliti dostop do vira. Aktivni prostor procesa je mogoče prav tako stisniti na minimum.
Tudi storitveni proces, ki teče kot root, ima običajno dostop le do potrebnih virov. Tudi če je program ranljiv, je obseg vpliva omejen na vire, do katerih ima dostop. Varnost je močno povečana.
Glavni del tega mehanizma za upravljanje dovoljenj je proces, znan tudi kot obvezni nadzor dostopa (MAC).
MAC je razdeljen na dva načina: eden se imenuje Category Security (MCS) način, drugi pa Multi-Level Security (MLS) način.
Naslednje akcije so v načinu MCS.
2.4 Primerjava DAC in MAC
Tukaj je slika za ilustracijo.
Kot lahko vidite, je v načinu DAC, dokler ima ustrezna mapa dovoljenja ustreznega uporabnika, dostopna do nje. V MAC načinu je omejen tudi z obsegom imenikov, do katerih lahko procesi dostopajo.
3. Osnovni koncepti SELinuxa
3.1 Tema
Lahko ga popolnoma enačimo s procesom.
Opomba: Za lažje razumevanje, razen če ni drugače navedeno, se postopek šteje kot glavno telo spodaj.
3.2 Namen
Viri, do katerih dostopa ravnatelj. Lahko so datoteke, imeniki, porti, naprave itd.
Opomba: Za lažje razumevanje, razen če ni drugače navedeno, se naslednji dokumenti ali imeniki štejejo za predmete.
3.3 Politika in pravila
V sistemu je običajno veliko datotek in procesov, zato za prihranek časa in režije običajno selektivno reguliramo le določene procese.
In katere procese je treba regulirati ter kako jih nadzorovati, določa politika.
V polici je več pravil. Nekatera pravila je mogoče omogočiti ali onemogočiti po potrebi (v nadaljevanju Booleova pravila).
Pravila so modularna in razširljiva. Pri namestitvi nove aplikacije lahko aplikacija doda pravila z dodajanjem novih modulov. Uporabniki lahko pravila tudi ročno dodajajo ali odvzemajo.
V sistemu CentOS 7 obstajajo trije sklopi politik, in sicer:
1. Ciljno: Nadzoruje večino procesov omrežnih storitev. To je politika, ki jo sistem privzeto uporablja (uporabljene so vse spodaj).
2. Minimum: Na podlagi ciljnih storitev so regulirani le izbrani omrežni storitveni procesi. Na splošno ne.
3. MLS: večnivojska varnostna zaščita. Uravnavajte vse procese. To je najstrožja politika, konfiguracija pa je zelo zahtevna. Na splošno se ne uporablja, razen če obstajajo izjemno visoke varnostne zahteve.
Politike je mogoče nastaviti v /etc/selinux/config.
3.4 Varnostni kontekst
Varnostni kontekst je v središču SELinuxa.
Varnostni kontekst razdelim na "kontekst varnosti procesov" in "kontekst varnosti dokumentov".
Kontekst varnosti procesov običajno ustreza več kontekstom varnosti dokumentov.
Le kadar varnostni kontekst obeh ustrezuje, lahko proces dostopa do datoteke. Njuna korespondenca je določena s pravili v polici.
Kontekst varnosti datoteke določa kraj, kjer je bila datoteka ustvarjena, in proces, ki jo je ustvaril. Sistem ima nabor privzetih vrednosti, uporabniki pa lahko nastavijo tudi privzete vrednosti.
Pomembno je poudariti, da samo premikanje datotek ne spremeni varnostnega konteksta vaših datotek.
Struktura in pomen varnostnega konteksta
Varnostni kontekst ima štiri polja, ločena z dvopičji. Oblika, kot je: system_u:object_r:admin_home_t:s0.
3.5 Delovni način SELinuxa
SELinux ima tri načine delovanja, in sicer:
1. uveljavljanje: Prisilni način. Kršitve pravil SELinux bodo blokirane in zabeležene v dnevnike.
2. Permisivno: način tolerance. Kršitve pravil SELinux se beležijo le v dnevnikih. Na splošno za razhroščevanje.
3. onemogočen: Izklopite SELinux.
SELinux delovni način lahko nastavite v /etc/selinux/config.
Če želite preklopiti iz onemogočenega na izvrševanje ali permisivno, boste morali sistem znova zagnati. In obratno.
Načine izvrševanja in dovoljenja je mogoče hitro preklopiti z ukazom Setenforce 1|0.
Pomembno je poudariti, da če je sistem že nekaj časa deloval z izklopljenim SELinuxom, je prvi ponovni zagon po vklopu lahko počasnejši. Ker mora sistem ustvariti varen kontekst za datoteke na disku (rekel sem, da sem ponovno zagnal za približno 10 minut in mislil, da je pokvarjen...... )。
SELinux dnevnike je treba beležiti s pomočjo auditd.service, prosimo, da jih ne onemogočite.
3.6 Potek dela SELinux
Tukaj je citat s slike, brez večje razlage.
Opomba: Zgornje varnostno besedilo se nanaša na varnostni kontekst.
4. Osnovne operacije SELinuxa
4.1 Poizvedba o varnostnem kontekstu datoteke ali mape
Osnovna uporaba ukazov
ls -Z
Primeri uporabe
Poizvedba o varnostnem kontekstu /etc/host.
ls -Z /itd/gostitelji
Rezultati izvedbe
-rw-r--r--. Root system_u:object_r:net_conf_t:s0 /etc/hosts
4.2 Poizvedba o varnostnem kontekstu procesa
Osnovna uporaba ukazov
ps auxZ | grep -v grep | grep
Primeri uporabe
Poizvedba o varnostnem kontekstu procesov, povezanih z Nginxom.
ps auxZ | grep -v grep | Grep Nginx
Rezultati izvedbe
system_u:system_r:httpd_t:s0 koren 7997 0.0 0.0 122784 2156 ? SS 14:31 0:00 nginx: glavni proces /usr/sbin/nginx
system_u:system_r:httpd_t:s0 nginx 7998 0.0 0.0 125332 7560 ? S 14:31 0:00 nginx: delavski proces
4.3 Ročna sprememba varnostnega konteksta datoteke ali mape
Osnovna uporaba ukazov
CHCON [...]
Funkcija možnosti -u Spremeni uporabniško polje varnostnega konteksta -r Spremeni polje vloge varnostnega konteksta -t Spremeni polje tipa varnostnega konteksta -l Spremeni polje nivoja varnostnega konteksta --referenca Spremeni varnostni kontekst, skladen z določeno datoteko ali imenikom -R Rekurzivna operacija -h Spremeni varnostni kontekst mehke povezave (spremeni ustrezno datoteko mehke povezave brez te možnosti)
Primeri uporabe
Spremenite varnostni kontekst testa v aaa_u:bbb_r:ccc_t:s0.
chcon -u aaa_u -r bbb_r -t ccc_t test
4.4 Povrniti varnostni kontekst datoteke ali mape na privzeto vrednost
Osnovna uporaba ukazov
RestoreCon [možnosti] [...]
Funkcija možnosti - V postopek tiskanja - R rekurzivna operacija
Primeri uporabe
Ko dodate nekaj spletnih datotek v mapo vašega Nginx strežnika, nastavite pravilen varnostni kontekst za te nove datoteke.
restorecon -R /usr/share/nginx/html/
4.5 Poizvedba Booleovih pravil in njihov status v sistemu
Osnovna uporaba ukazov
getsebool -a
Ker ukaz poizveduje bodisi vsa pravila ali samo eno pravilo, običajno najprej povpraša vsa pravila in nato filtrira z grep.
Primeri uporabe
Poizvedba po Booleovih pravilih, povezanih s httpd.
getsebool -a | grep httpd
Rezultati izvedbe
httpd_anon_write --> stran
httpd_builtin_scripting -->
httpd_can_check_spam -->
httpd_can_connect_ftp -->
#以下省略
4.6 Zamenjava Booleovega pravila
Osnovna uporaba ukazov
Setsebool [možnost]
Funkcija možnosti -P ponovni zagon še vedno deluje
Primeri uporabe
Vklopi httpd_anon_write pravila.
setsebool -P httpd_anon_write on
4.7 Dodaj privzeti varnostni kontekst za imenik
Osnovna uporaba ukazov
semanage fcontext -a -t "(/.*)?"
Opomba: Privzeti varnostni kontekst mape ali datoteke je mogoče videti z uporabo ukaza semanage fcontext -l v povezavi z grep filtriranjem.
Primeri uporabe
Ko v Nginx dodate novo imenik za spletno stran /usr/share/nginx/html2, morate zanj nastaviti isti privzeti varnostni kontekst kot za izvirno mapo.
semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html2(/.*)?"
4.8 Dodajte priključke, ki jih dovoljujejo določene vrste procesov
Osnovna uporaba ukazov
semanage port -a -t -p
Opomba: Dovoljene številke vrat za različne vrste storitev je mogoče videti z uporabo ukaza semanage port -l z grep filtriranjem.
Primeri uporabe
Za Nginx morate uporabiti port 10080 za HTTP storitve.
semanage port -a -t http_port_t -p tcp 10080
5. Analiza in reševanje napak SELinux
5.1 Razumevanje SELinux dnevnikov
Ko je SELinux omogočen, se nekatera običajna vedenja mnogih storitev štejejo za kršitev (tako v naslovu kot v spodnjih napakah).
Trenutno moramo uporabiti dnevnike kršitev SELinuxa za njihovo analizo in rešitev.
Dnevniki kršitev SELinuxa so shranjeni v /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" ime gostitelja=? addr=? terminal=cron res=uspeh'
...
Datoteka vsebuje veliko vsebine in je pomešana z veliko dnevniki sistemskih revizij, ki nimajo nobene zveze s SELinux napakami. Uporabili bomo orodje sealert za pomoč pri analizi (če poziv ne najde ukaza, namestimo paket setroubleshoot).
5.2 Analiza napak s sealertom
Osnovna uporaba ukazov
sealert -a /var/log/audit/audit.log
Po izvedbi ukaza mora sistem vzeti nekaj časa za analizo kršitev v dnevnikih in pripravo analiznega poročila. |