Prijevod članka pripremljen za studente kolegija
SELinux ili Security Enhanced Linux je poboljšani mehanizam kontrole pristupa koji je razvila Agencija za nacionalnu sigurnost SAD-a (NSA) za sprječavanje zlonamjernih upada. Implementira model prisilne (ili obvezne) kontrole pristupa (engleski Mandatory Access Control, MAC) povrh postojećeg diskrecijskog (ili selektivnog) modela (engleski Discretionary Access Control, DAC), to jest dopuštenja za čitanje, pisanje, izvršavanje.
SELinux ima tri načina rada:
- izvršenje — odbijanje pristupa na temelju pravila politike.
- Permisivno — vođenje dnevnika radnji koje krše politiku, a koje bi bile zabranjene u načinu provedbe.
- onesposobljen — potpuno onesposobljavanje SELinuxa.
Postavke su prema zadanim postavkama unutar /etc/selinux/config
Mijenjanje SELinux modova
Da biste saznali trenutni način rada, pokrenite
$ getenforce
Da biste promijenili način rada u dopustivi, pokrenite sljedeću naredbu
$ setenforce 0
ili, za promjenu načina rada iz popustljiv na provođenje, izvršiti
$ setenforce 1
Ako trebate potpuno onemogućiti SELinux, to možete učiniti samo putem konfiguracijske datoteke
$ vi /etc/selinux/config
Za onemogućavanje promijenite parametar SELINUX na sljedeći način:
SELINUX=disabled
Postavljanje SELinuxa
Svaka datoteka i proces označeni su SELinux kontekstom, koji sadrži dodatne informacije kao što su korisnik, uloga, vrsta itd. Ako vam je ovo prvi put da omogućujete SELinux, prvo ćete morati konfigurirati kontekst i oznake. Proces dodjele oznaka i konteksta poznat je kao označavanje. Za početak označavanja, u konfiguracijskoj datoteci promijenimo način na popustljiv.
$ vi /etc/selinux/config
SELINUX=permissive
Nakon postavljanja moda popustljiv, stvorite praznu skrivenu datoteku u korijenu s imenom autorelabel
$ touch /.autorelabel
i ponovno pokrenite računalo
$ init 6
Napomena: koristimo način popustljiv za označavanje, od upotrebe načina provođenje može uzrokovati pad sustava tijekom ponovnog pokretanja.
Ne brinite ako preuzimanje zapne na nekoj datoteci, označavanje traje neko vrijeme. Nakon što je označavanje dovršeno i vaš sustav je pokrenut, možete otići do konfiguracijske datoteke i postaviti način rada provođenjei također pokrenuti:
$ setenforce 1
Sada ste uspješno omogućili SELinux na svom računalu.
Praćenje dnevnika
Možda ste naišli na neke pogreške tijekom označavanja ili tijekom rada sustava. Kako biste provjerili radi li vaš SELinux ispravno i ne blokira li pristup bilo kojem portu, aplikaciji itd., morate pogledati zapise. Dnevnik SELinuxa nalazi se u /var/log/audit/audit.log
, ali ne morate pročitati cijelu stvar da biste pronašli pogreške. Za pronalaženje pogrešaka možete koristiti uslužni program audit2why. Pokrenite sljedeću naredbu:
$ audit2why < /var/log/audit/audit.log
Kao rezultat toga, dobit ćete popis pogrešaka. Ako u zapisniku nije bilo pogrešaka, neće biti prikazane poruke.
Konfiguriranje SELinux pravila
SELinux politika je skup pravila koja upravljaju SELinux sigurnosnim mehanizmom. Pravila definiraju skup pravila za određeno okruženje. Sada ćemo naučiti kako konfigurirati pravila za dopuštanje pristupa zabranjenim uslugama.
1. Logičke vrijednosti (prekidači)
Prekidači (booleovi) omogućuju vam da promijenite dijelove pravila tijekom izvođenja, bez potrebe za stvaranjem novih pravila. Omogućuju vam da napravite promjene bez ponovnog pokretanja ili ponovnog kompajliranja SELinux pravila.
Primjer
Recimo da želimo podijeliti korisnički matični direktorij putem FTP čitanja/pisanja, i već smo ga podijelili, ali kada mu pokušamo pristupiti, ne vidimo ništa. To je zato što SELinux politika sprječava FTP poslužitelj da čita i piše u korisnički matični direktorij. Moramo promijeniti pravilo tako da FTP poslužitelj može pristupiti kućnim imenicima. Da vidimo postoje li prekidači za to
$ semanage boolean -l
Ova naredba izlistat će dostupne prekidače s njihovim trenutnim stanjem (uključeno ili isključeno) i opisom. Možete suziti svoju pretragu dodavanjem grepa da biste pronašli rezultate samo za ftp:
$ semanage boolean -l | grep ftp
i naći ćete sljedeće
ftp_home_dir -> off Allow ftp to read & write file in user home directory
Ovaj prekidač je onemogućen, pa ćemo ga omogućiti pomoću setsebool $ setsebool ftp_home_dir on
Sada će naš ftp demon moći pristupiti početnom direktoriju korisnika.
Napomena: Također možete dobiti popis dostupnih prekidača bez opisa tako što ćete to učiniti getsebool -a
2. Oznake i kontekst
Ovo je najčešći način implementacije SELinux politike. Svaka datoteka, mapa, proces i port označeni su SELinux kontekstom:
- Za datoteke i mape, oznake su pohranjene kao prošireni atributi u datotečnom sustavu i mogu se pregledati sljedećom naredbom:
$ ls -Z /etc/httpd
- Za procese i priključke, označavanjem upravlja kernel, a te oznake možete vidjeti na sljedeći način:
postupak
$ ps –auxZ | grep httpd
luka
$ netstat -anpZ | grep httpd
Primjer
Sada pogledajmo primjer kako bismo bolje razumjeli oznake i kontekst. Recimo da imamo web poslužitelj koji umjesto imenika /var/www/html/ использует /home/dan/html/
. SELinux će ovo smatrati kršenjem pravila i nećete moći vidjeti svoje web stranice. To je zato što nismo postavili sigurnosni kontekst povezan s HTML datotekama. Da biste vidjeli zadani sigurnosni kontekst, koristite sljedeću naredbu:
$ ls –lz /var/www/html
-rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/
Evo nas httpd_sys_content_t
kao kontekst za html datoteke. Moramo postaviti ovaj sigurnosni kontekst za naš trenutni direktorij, koji trenutno ima sljedeći kontekst:
-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/
Alternativna naredba za provjeru sigurnosnog konteksta datoteke ili direktorija:
$ semanage fcontext -l | grep '/var/www'
Također ćemo koristiti semanage za promjenu konteksta nakon što pronađemo ispravan sigurnosni kontekst. Za promjenu konteksta /home/dan/html, pokrenite sljedeće naredbe:
$ 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
Nakon što se kontekst promijeni korištenjem semanage, naredba restorecon će učitati zadani kontekst za datoteke i direktorije. Naš web poslužitelj sada će moći čitati datoteke iz mape /home/dan/html
jer je sigurnosni kontekst za ovu mapu promijenjen u httpd_sys_content_t
.
3. Stvorite lokalne politike
Mogu postojati situacije u kojima vam gore navedene metode nisu od koristi i dobivate pogreške (avc/denial) u audit.log. Kada se to dogodi, trebate izraditi lokalnu politiku. Možete pronaći sve pogreške koristeći audit2why, kao što je gore opisano.
Možete stvoriti lokalna pravila za rješavanje pogrešaka. Na primjer, dobijemo pogrešku povezanu s httpd (apache) ili smbd (samba), grepamo pogreške i stvaramo politiku za njih:
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
Ovdje http_policy
и smb_policy
nazivi su lokalnih pravila koja smo izradili. Sada moramo učitati ove kreirane lokalne politike u trenutnu SELinux politiku. To se može učiniti na sljedeći način:
$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp
Naša lokalna pravila su preuzeta i više ne bismo trebali primati avc ili denail u audit.log.
Ovo je bio moj pokušaj da vam pomognem razumjeti SELinux. Nadam se da ćete se nakon čitanja ovog članka osjećati ugodnije sa SELinuxom.
Izvor: www.habr.com