Prijevod članka pripremljen je posebno za studente tečaja .

Ovdje ćete dobiti odgovore na važna pitanja o životu, svemiru i svemu tome u Linuxu s poboljšanom sigurnošću.
„Važna istina je da stvari ne izgledaju uvijek onako kako se čine, opće je poznata…“
―Douglas Adams, Autostoperskim vodičem kroz Galaksiju
Sigurnost. Povećanje pouzdanosti. Usklađenost. Politika. Četiri jahača apokalipse sistemskog administratora. Osim naših svakodnevnih zadataka — praćenja, sigurnosnog kopiranja, implementacije, konfiguracije, ažuriranja itd. — također smo odgovorni za sigurnost naših sustava. Čak i onih sustava gdje treća strana preporučuje da onemogućimo pojačanu sigurnost. To je slično poslu iz „Nemoguće misije“.
Suočeni s tom dilemom, neki sistemski administratori odlučuju uzeti , jer misle da nikada neće saznati odgovor na veliko pitanje života, svemira i svega toga. I, kao što svi znamo, taj odgovor je 42.
U duhu „Autostoperskog vodiča kroz galaksiju“, ovdje je 42 odgovora na važna pitanja o upravljanju i korištenju u vašim sustavima.
1. SELinux je sustav obaveznog upravljanja pristupom, što znači da svaki proces ima oznaku (label). Svaka datoteka, direktorij i sistemski objekt također imaju oznake. Pravila politike upravljaju pristupom između označenih procesa i objekata. Jezgra osigurava usklađenost s tim pravilima.
2. Dvije najvažnije koncepte su: Labeling — označavanje (datoteke, procesi, portovi itd.) i Type enforcement (koji izolira procese jedne od drugih na temelju tipova).
3. Ispravan format oznake user:role:type:level (opcionalno).
4. Cilj osiguravanja višeslojne sigurnosti (Multi-Level Security — MLS) je upravljanje procesima (domenima) na temelju nivoa sigurnosti podataka koje će koristiti. Na primjer, tajni proces ne može čitati strogo tajne podatke.
5. Osiguranje višekategorijske sigurnosti (Multi-Category Security — MCS) štiti slične procese jedne od drugih (npr. virtualne mašine, OpenShift mehanizme, SELinux sandboxes, kontejnere itd.).
6. Opcije jezgre za promjenu SELinux režima pri pokretanju:
autorelabel=1→ prisiljava sistem da izvrši ponovnu oznakuselinux=0→ jezgra ne učitava SELinux infrastrukturuenforcing=0→ pokretanje u permisivnom režimu
7. Ako vam je potrebno ponovno označiti cijeli sustav:
# touch /.autorelabel
#reboot
Ako sistemska oznaka sadrži mnogo grešaka, možda će vam biti potrebna učitavanje u permisivnom modu kako bi ponovno označavanje prošlo uspješno.
8. Da biste provjerili je li SELinux uključen: # getenforce
9. Da biste privremeno uključili/isključili SELinux: # setenforce [1|0]
10. Provjera statusa SELinux-a: # sestatus
11. Konfiguracijska datoteka: /etc/selinux/config
12. Kako radi SELinux? Evo primjera označavanja za web poslužitelj Apache:
- Binarni prikaz:
/usr/sbin/httpd→httpd_exec_t - Katalog konfiguracije:
/etc/httpd→httpd_config_t - Katalog datoteka dnevnika:
/var/log/httpd → httpd_log_t - Katalog sadržaja:
/var/www/html → httpd_sys_content_t - Pokretačka skripta:
/usr/lib/systemd/system/httpd.service → httpd_unit_file_d - Proces:
/usr/sbin/httpd -DFOREGROUND → httpd_t - Portovi:
80/tcp, 443/tcp → httpd_t, http_port_t
Proces pokrenut u kontekstu httpd_t, može komunicirati s objektom označenim httpd_something_t.
13. M mnoge naredbe prihvaćaju argument -Z za pregled, kreiranje i izmjenu konteksta:
ls -Zid -Zps -Znetstat -Zcp -Zmkdir -Z
Konteksti se postavljaju kada se datoteke kreiraju na temelju konteksta njihovog roditeljskog kataloga (uz neka izuzeća). RPM mogu postavljati kontekste tijekom instalacije.
14. Postoje četiri glavna uzroka grešaka SELinux-a koji su detaljnije opisani u točkama 15-21 u nastavku:
- Problemi s označavanjem
- Zbog nečega što SELinux mora znati
- Greška u politici/aplikaciji SELinux
- Vaše informacije mogu biti ugrožene
15. Problem s označavanjem: ako su vaše datoteke u /srv/myweb neispravno označene, pristup može biti odbijen. Evo nekoliko načina kako to popraviti:
- Ako znate oznaku:
# semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?' - Ako znate datoteku s ekvivalentnom oznakom:
# semanage fcontext -a -e /srv/myweb /var/www - Obnovite kontekst (za oba slučaja):
# restorecon -vR /srv/myweb
16. Problem s označavanjem: ako premjestite datoteku umjesto da je kopirate, datoteka će zadržati svoj izvorni kontekst. Da biste to ispravili:
- Promijenite kontekstnu naredbu s oznakom:
# chcon -t httpd_system_content_t /var/www/html/index.html - Promijenite kontekstnu naredbu s oznakom veze:
# chcon --reference /var/www/html/ /var/www/html/index.html - Obnovite kontekst (za oba slučaja):
# restorecon -vR /var/www/html/
17. Ako SELinux treba znati, da HTTPD sluša port 8585, obavijestite SELinux:
# semanage port -a -t http_port_t -p tcp 8585
18. SELinux treba znati logičke vrijednosti koje omogućuju promjenu dijelova politike SELinux tijekom izvođenja bez znanja o prepisivanju politike SELinux. Na primjer, ako želite da httpd šalje e-poštu, upišite: # setsebool -P httpd_can_sendmail 1
19. SELinux treba znati logičke vrijednosti za uključivanje/isključivanje postavki SELinux:
- Da biste vidjeli sve logičke vrijednosti:
# getsebool -a - Da biste vidjeli opis svake:
# semanage boolean -l - Da biste postavili logičku vrijednost:
# setsebool [_boolean_] [1|0] - Za trajno postavljanje dodajte
-P. Na primjer:# setsebool httpd_enable_ftp_server 1 -P
20. Politike/aplikacije SELinux mogu sadržavati greške, uključujući:
- Neobični putovi koda
- Konfiguracije
- Preusmjeravanje stdout
- Istekli deskriptori datoteka
- Izvršna memorija
- Loše konstruirane biblioteke
Otvorite tikete (ne šaljite izvještaj u Bugzillu; u Bugzilli nema SLA).
21. Vaše informacije mogu biti ugrožene, ako imate ograničene domene koje pokušavaju:
- Učitati module kernela
- Isključiti enforced režim SELinux
- Pisati u
etc_t/shadow_t - Promijeniti pravila iptables
22. Alati SELinux za razvoj modula politika:
# yum -y install setroubleshoot setroubleshoot-server
Ponovo pokrenite ili restartujte auditd nakon instalacije.
23. Koristite
journalctl za ispis popisa svih logova povezanih s setroubleshoot:
# journalctl -t setroubleshoot --since=14:20
24. Koristite journalctl za ispis popisa svih logova povezanih sa određenom oznakom SELinux. Na primjer:
# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0
25. U slučaju greške SELinux, koristite log setroubleshoot sa prijedlogom nekoliko mogućih rješenja.
Na primjer, iz journalctl:
Jun 14 19:41:07 web1 setroubleshoot: SELinux sprječava httpd pristup s getattr na datoteku /var/www/html/index.html. Za cijelu poruku pokrenite: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux sprječava httpd pristup s getattr na datoteku /var/www/html/index.html.
***** Plugin restorecon (99.5 povjerenja) sugerira ************************
Ako želite ispraviti oznaku,
/var/www/html/index.html zadana oznaka treba biti httpd_syscontent_t.
Tada možete restorecon.
Učinite
# /sbin/restorecon -v /var/www/html/index.html26. Logiranje: SELinux zapisuje informacije na mnogim mestima:
- /var/log/messages
- /var/log/audit/audit.log
- /var/lib/setroubleshoot/setroubleshoot_database.xml
27. Logiranje: pronađite greške SELinux u audit logu:
# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
28. Da biste pronašli poruke SELinux Access Vector Cache (AVC) za određenu uslugu:
# ausearch -m avc -c httpd
29. Alat audit2allow prikuplja informacije iz logova zabranjenih operacija, a zatim generira pravila politike dozvola SELinux. Na primjer:
- Da biste kreirali čitljivi opis razloga za odbijen pristup:
# audit2allow -w -a - Da biste pregledali pravilo prisilnog korištenja vrsta koje omogućava zabranjeni pristup:
# audit2allow -a - Da biste kreirali korisnički modul:
# audit2allow -a -M mypolicy - Opcija
-Mkreira datoteku prisilnog korištenja vrste (.te) s navedenim imenom i kompajlira pravilo u paket politike (.pp):mypolicy.pp mypolicy.te - Da biste instalirali korisnički modul:
# semodule -i mypolicy.pp
30. Da biste konfigurirali pojedinačni proces (domen) da radi u permissive režimu: # semanage permissive -a httpd_t
31. Ako više ne želite da domen bude permissive: # semanage permissive -d httpd_t
32. Da biste isključili sve permissive domene: # semodule -d permissivedomains
33. Uključivanje MLS politike SELinux: # yum install selinux-policy-mls
u /etc/selinux/config:
SELINUX=permissive
SELINUXTYPE=mls
Provjerite da li SELinux radi u permissive režimu: # setenforce 0
Koristite skriptu fixfiles, kako biste osigurali da će datoteke biti ponovno označene prilikom sljedećeg pokretanja:
# fixfiles -F onboot # reboot
34. Kreirati korisnika s određenim rasponom MLS: # useradd -Z staff_u john
Koristeći naredbu useradd, povežite novog korisnika sa postojećim korisnikom SELinux (u ovom slučaju, staff_u).
35. Da biste pregledali usklađenost između korisnika SELinux i Linuxa: # semanage login -l
36. Odredite određeni opseg za korisnika: # semanage login --modify --range s2:c100 john
37. Da biste ispravili oznaku u korisničkom home direktoriju (ako je potrebno): # chcon -R -l s2:c100 /home/john
38. Za pregled trenutnih kategorija: # chcat -L
39. Da biste promenili kategorije ili započeli kreiranje vlastitih, izmenite datoteku na sledeći način:
/etc/selinux/_<selinuxtype>_/setrans.conf
40. Da biste pokrenuli komandu ili skript u određenom datoteci, ulozi i korisničkom kontekstu:
# runcon -t initrc_t -r system_r -u user_u yourcommandhere
-tkontekst datoteke-rkontekst uloge-ukontekst korisnika
41. Kontejneri koji rade sa onemogućenim SELinux-om:
- Podman:
# podman run --security-opt label=disable … - Docker:
# docker run --security-opt label=disable …
42. Ako vam je potrebno dati kontejneru potpuni pristup sistemu:
- Podman:
# podman run --privileged … - Docker:
# docker run --privileged …
I sada već znate odgovor. Zato, molim vas: ne paničite i uključite SELinux.
Linkovi:
- uklanjanjem nepotrebnih datoteka iz vaših sigurnosnih kopija
- od Dana Walsha
- uklanjanjem nepotrebnih datoteka iz vaših sigurnosnih kopija
- uklanjanjem nepotrebnih datoteka iz vaših sigurnosnih kopija
Izvor: habr.com
