Vodnik za SELinux za začetnike

Vodnik za SELinux za začetnike

Prevod članka pripravljen za študente "Varnost Linuxa"

SELinux ali Security Enhanced Linux je izboljšan mehanizem za nadzor dostopa, ki ga je razvila ameriška Agencija za nacionalno varnost (NSA) za preprečevanje zlonamernih vdorov. Implementira model prisilnega (ali obveznega) nadzora dostopa (angleško Mandatory Access Control, MAC) poleg obstoječega diskrecijskega (ali selektivnega) modela (angleško Discretionary Access Control, DAC), to je dovoljenj za branje, pisanje, izvajanje.

SELinux ima tri načine:

  1. Izvrševanje — zavrnitev dostopa na podlagi pravil politike.
  2. Permisivno — vodenje dnevnika dejanj, ki kršijo pravilnik, kar bi bilo v načinu izvajanja prepovedano.
  3. onemogočeno — popolno onemogočanje SELinuxa.

Privzeto so nastavitve v /etc/selinux/config

Spreminjanje načinov SELinux

Če želite izvedeti trenutni način, zaženite

$ getenforce

Če želite način spremeniti v permisivni, zaženite naslednji ukaz

$ setenforce 0

ali, da spremenite način iz permisivna o uveljavljanje, izvršiti

$ setenforce 1

Če morate popolnoma onemogočiti SELinux, lahko to storite samo prek konfiguracijske datoteke

$ vi /etc/selinux/config

Če želite onemogočiti, spremenite parameter SELINUX na naslednji način:

SELINUX=disabled

Nastavitev SELinuxa

Vsaka datoteka in proces sta označena s kontekstom SELinux, ki vsebuje dodatne informacije, kot so uporabnik, vloga, vrsta itd. Če prvič omogočate SELinux, boste morali najprej konfigurirati kontekst in oznake. Postopek dodeljevanja oznak in konteksta je znan kot označevanje. Za začetek označevanja v konfiguracijski datoteki spremenimo način v permisivna.

$ vi /etc/selinux/config
SELINUX=permissive

Po nastavitvi načina permisivna, ustvarite prazno skrito datoteko v korenu z imenom autorelabel

$ touch /.autorelabel

in znova zaženite računalnik

$ init 6

Opomba: uporabljamo način permisivna za označevanje, od uporabe načina uveljavljanje lahko povzroči zrušitev sistema med ponovnim zagonom.

Ne skrbite, če se prenos zatakne na kakšni datoteki, označevanje traja nekaj časa. Ko je označevanje končano in se sistem zažene, lahko odprete konfiguracijsko datoteko in nastavite način uveljavljanjein tudi zaženite:

$ setenforce 1

Zdaj ste uspešno omogočili SELinux na vašem računalniku.

Spremljanje dnevnikov

Morda ste med označevanjem ali med delovanjem sistema naleteli na nekaj napak. Če želite preveriti, ali vaš SELinux deluje pravilno in ali ne blokira dostopa do vrat, aplikacij itd., morate pogledati dnevnike. Dnevnik SELinux se nahaja v /var/log/audit/audit.log, vendar vam ni treba prebrati vsega, da bi našli napake. Za iskanje napak lahko uporabite pripomoček audit2why. Zaženite naslednji ukaz:

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

Kot rezultat boste prejeli seznam napak. Če v dnevniku ni bilo napak, potem ne bo prikazano nobeno sporočilo.

Konfiguriranje pravilnika SELinux

Politika SELinux je nabor pravil, ki urejajo varnostni mehanizem SELinux. Politika določa nabor pravil za določeno okolje. Zdaj se bomo naučili, kako konfigurirati pravilnike, ki omogočajo dostop do prepovedanih storitev.

1. Logične vrednosti (stikala)

Stikala (logične vrednosti) vam omogočajo spreminjanje delov pravilnika med izvajanjem, ne da bi morali ustvariti nove pravilnike. Omogočajo vam spreminjanje brez ponovnega zagona ali ponovnega prevajanja pravilnikov SELinux.

Primer
Recimo, da želimo deliti uporabnikov domači imenik prek FTP branja/pisanja in smo ga že dali v skupno rabo, vendar ko poskušamo dostopati do njega, ne vidimo ničesar. To je zato, ker pravilnik SELinux strežniku FTP preprečuje branje in pisanje v domači imenik uporabnika. Politiko moramo spremeniti tako, da lahko strežnik FTP dostopa do domačih imenikov. Poglejmo, ali obstajajo kakšna stikala za to

$ semanage boolean -l

Ta ukaz prikaže seznam razpoložljivih stikal z njihovim trenutnim stanjem (vklopljeno ali izklopljeno) in opisom. Iskanje lahko izboljšate tako, da dodate grep za iskanje rezultatov samo za ftp:

$ semanage boolean -l | grep ftp

in našli boste naslednje

ftp_home_dir        -> off       Allow ftp to read & write file in user home directory

To stikalo je onemogočeno, zato ga bomo omogočili z setsebool $ setsebool ftp_home_dir on

Zdaj bo naš ftp demon lahko dostopal do uporabnikovega domačega imenika.
Opomba: Seznam razpoložljivih stikal brez opisa lahko dobite tudi tako, da to storite getsebool -a

2. Oznake in kontekst

To je najpogostejši način izvajanja politike SELinux. Vsaka datoteka, mapa, proces in vrata so označeni s kontekstom SELinux:

  • Za datoteke in mape so oznake shranjene kot razširjeni atributi v datotečnem sistemu in si jih je mogoče ogledati z naslednjim ukazom:
    $ ls -Z /etc/httpd
  • Za procese in vrata označevanje upravlja jedro, te oznake pa si lahko ogledate na naslednji način:

Postopek

$ ps –auxZ | grep httpd

pristanišča

$ netstat -anpZ | grep httpd

Primer
Zdaj pa si oglejmo primer za boljše razumevanje oznak in konteksta. Recimo, da imamo spletni strežnik, ki namesto imenika /var/www/html/ использует /home/dan/html/. SELinux bo to obravnaval kot kršitev pravilnika in ne boste si mogli ogledati svojih spletnih strani. To je zato, ker nismo nastavili varnostnega konteksta, povezanega z datotekami HTML. Za ogled privzetega varnostnega konteksta uporabite naslednji ukaz:

$ ls –lz /var/www/html
 -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

Tukaj smo httpd_sys_content_t kot kontekst za datoteke html. Ta varnostni kontekst moramo nastaviti za naš trenutni imenik, ki ima trenutno naslednji kontekst:

-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

Alternativni ukaz za preverjanje varnostnega konteksta datoteke ali imenika:

$ semanage fcontext -l | grep '/var/www'

Uporabili bomo tudi semanage za spreminjanje konteksta, ko bomo našli pravilen varnostni kontekst. Če želite spremeniti kontekst /home/dan/html, zaženite naslednje ukaze:

$ 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

Ko je kontekst spremenjen s semanage, bo ukaz restorecon naložil privzeti kontekst za datoteke in imenike. Naš spletni strežnik bo zdaj lahko prebral datoteke iz mape /home/dan/htmlker je bil varnostni kontekst za to mapo spremenjen v httpd_sys_content_t.

3. Ustvarite lokalne politike

Lahko pride do situacij, ko vam zgornji načini ne koristijo in se v audit.log prikažejo napake (avc/denial). Ko se to zgodi, morate ustvariti lokalni pravilnik. Vse napake lahko najdete z uporabo audit2why, kot je opisano zgoraj.

Ustvarite lahko lokalni pravilnik za odpravljanje napak. Na primer, dobimo napako, povezano s httpd (apache) ali smbd (samba), grep napake in ustvarimo pravilnik zanje:

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

Tukaj http_policy и smb_policy so imena lokalnih pravilnikov, ki smo jih ustvarili. Zdaj moramo te ustvarjene lokalne pravilnike naložiti v trenutni pravilnik SELinux. To je mogoče storiti na naslednji način:

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

Naši lokalni pravilniki so bili preneseni in v audit.log ne bi smeli več prejemati nobenih avc ali denail.

To je bil moj poskus, da bi vam pomagal razumeti SELinux. Upam, da se boste po branju tega članka bolje počutili s SELinuxom.

Vir: www.habr.com

Dodaj komentar