Vodič za početnike za SELinux

Vodič za početnike za SELinux

Prijevod članka pripremljen za studente kursa "Linux sigurnost"

SELinux ili Security Enhanced Linux je poboljšani mehanizam kontrole pristupa koji je razvila Američka agencija za nacionalnu sigurnost (NSA) za sprječavanje zlonamjernih upada. Implementira prisilni (ili obavezni) model kontrole pristupa (English Mandatory Access Control, MAC) povrh postojećeg diskrecionog (ili selektivnog) modela (English Discretionary Access Control, DAC), odnosno dozvole za čitanje, pisanje, izvršavanje.

SELinux ima tri načina rada:

  1. Sprovođenje — uskraćivanje pristupa na osnovu pravila politike.
  2. Dozvoljeno — vođenje evidencije radnji koje krše politiku, što bi bilo zabranjeno u načinu sprovođenja.
  3. invaliditetom — potpuno onemogućavanje SELinuxa.

Podrazumevano su podešavanja uključena /etc/selinux/config

Promjena SELinux načina rada

Da biste saznali trenutni način rada, pokrenite

$ getenforce

Da promijenite način rada u dopušteni, pokrenite sljedeću naredbu

$ setenforce 0

ili, da promijenite način rada permisivna na sprovođenje, izvršiti

$ setenforce 1

Ako trebate potpuno onemogućiti SELinux, to se može učiniti samo putem konfiguracijske datoteke

$ vi /etc/selinux/config

Da biste onemogućili, promijenite SELINUX parametar na sljedeći način:

SELINUX=disabled

Postavljanje SELinuxa

Svaki fajl i proces su označeni SELinux kontekstom, koji sadrži dodatne informacije kao što su korisnik, uloga, tip, itd. Ako vam je ovo prvi put da omogućavate SELinux, prvo ćete morati da konfigurišete kontekst i oznake. Proces dodjeljivanja oznaka i konteksta poznat je kao označavanje. Za početak označavanja, u konfiguracijskoj datoteci mijenjamo način rada u permisivna.

$ vi /etc/selinux/config
SELINUX=permissive

Nakon podešavanja režima permisivna, kreirajte praznu skrivenu datoteku u korijenu s imenom autorelabel

$ touch /.autorelabel

i ponovo pokrenite računar

$ init 6

Napomena: Koristimo način rada permisivna za označavanje, od upotrebe moda sprovođenje može uzrokovati pad sistema tokom ponovnog pokretanja.

Ne brinite ako se preuzimanje zaglavi na nekom fajlu, označavanje potraje. Kada se označavanje završi i vaš sistem se pokrene, možete otići do konfiguracijske datoteke i postaviti način rada sprovođenjei također pokrenite:

$ setenforce 1

Sada ste uspješno omogućili SELinux na svom računaru.

Nadgledanje dnevnika

Možda ste naišli na neke greške tokom označavanja ili tokom rada sistema. Da biste provjerili da li vaš SELinux radi ispravno i da li ne blokira pristup nijednom portu, aplikaciji itd., morate pogledati dnevnike. SELinux log se nalazi u /var/log/audit/audit.log, ali ne morate čitati cijelu stvar da biste pronašli greške. Možete koristiti audit2why uslužni program da pronađete greške. Pokrenite sljedeću naredbu:

$ audit2why < /var/log/audit/audit.log

Kao rezultat, dobit ćete listu grešaka. Ako nije bilo grešaka u dnevniku, neće biti prikazane poruke.

Konfiguriranje SELinux politike

SELinux politika je skup pravila koja upravljaju sigurnosnim mehanizmom SELinuxa. Politika definira skup pravila za određeno okruženje. Sada ćemo naučiti kako konfigurirati politike za omogućavanje pristupa zabranjenim uslugama.

1. Logičke vrijednosti (prekidači)

Prekidači (booleans) vam omogućavaju da promijenite dijelove politike u vrijeme izvođenja, bez potrebe za kreiranjem novih politika. Oni vam omogućavaju da napravite promjene bez ponovnog pokretanja ili ponovnog kompajliranja SELinux politika.

Primjer:
Recimo da želimo da dijelimo korisnikov početni direktorij preko FTP-a za čitanje/pisanje i već smo ga podijelili, ali kada pokušamo da mu pristupimo, ne vidimo ništa. To je zato što politika SELinuxa onemogućava FTP serveru da čita i upisuje u kućni direktorij korisnika. Moramo da promenimo politiku tako da FTP server može da pristupi kućnim direktorijumima. Hajde da vidimo da li postoje prekidači za ovo

$ semanage boolean -l

Ova komanda će prikazati dostupne prekidače sa njihovim trenutnim stanjem (uključeno ili isključeno) i opisom. Možete precizirati pretragu dodavanjem grep za pronalaženje rezultata 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 sa setsebool $ setsebool ftp_home_dir on

Sada će naš ftp demon moći pristupiti korisničkom kućnom direktoriju.
Napomena: Takođe možete dobiti listu dostupnih prekidača bez opisa tako što ćete uraditi getsebool -a

2. Oznake i kontekst

Ovo je najčešći način implementacije SELinux politike. Svaki fajl, folder, proces i port su označeni SELinux kontekstom:

  • Za datoteke i mape, naljepnice se pohranjuju kao prošireni atributi na sistemu datoteka i mogu se vidjeti pomoću sljedeće naredbe:
    $ ls -Z /etc/httpd
  • Za procese i portove, označavanjem upravlja kernel, a ove oznake možete vidjeti na sljedeći način:

proces

$ ps –auxZ | grep httpd

luka

$ netstat -anpZ | grep httpd

Primjer:
Pogledajmo sada primjer kako bismo bolje razumjeli oznake i kontekst. Recimo da imamo web server koji umjesto direktorija /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 vidite 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 fajlove. 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 kada pronađemo ispravan sigurnosni kontekst. Da promijenite kontekst /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 pomoću semanage-a, naredba restorecon će učitati zadani kontekst za datoteke i direktorije. Naš web server će sada moći čitati datoteke iz foldera /home/dan/htmljer je sigurnosni kontekst za ovaj folder promijenjen u httpd_sys_content_t.

3. Kreirajte lokalne politike

Mogu postojati situacije u kojima vam gore navedene metode nisu od koristi i dobijate greške (avc/denial) u audit.log. Kada se to dogodi, morate kreirati lokalnu politiku. Sve greške možete pronaći koristeći audit2why, kao što je gore opisano.

Možete kreirati lokalnu politiku za rješavanje grešaka. Na primjer, dobijamo grešku koja se odnosi na httpd (apache) ili smbd (samba), grepamo greške i kreiramo 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

to je http_policy и smb_policy su nazivi lokalnih politika koje smo kreirali. Sada moramo učitati ove kreirane lokalne politike u trenutnu SELinux politiku. To se može uraditi na sljedeći način:

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

Naše lokalne politike su preuzete i više ne bismo trebali primati avc ili denail u audit.log.

Ovo je bio moj pokušaj da vam pomognem da razumete SELinux. Nadam se da ćete se nakon čitanja ovog članka osjećati ugodnije sa SELinuxom.

izvor: www.habr.com

Dodajte komentar