Vodič za SELinux za početnike

Vodič za SELinux za početnike

Prijevod članka pripremljen za studente kolegija "Linux sigurnost"

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:

  1. izvršenje — odbijanje pristupa na temelju pravila politike.
  2. Permisivno — vođenje dnevnika radnji koje krše politiku, a koje bi bile zabranjene u načinu provedbe.
  3. 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/htmljer 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

Dodajte komentar