Sprievodca SELinuxom pre začiatočníkov

Sprievodca SELinuxom pre začiatočníkov

Preklad článku pripraveného pre študentov kurzu "Bezpečnosť Linuxu"

SELinux alebo Security Enhanced Linux je vylepšený mechanizmus kontroly prístupu vyvinutý americkou Národnou bezpečnostnou agentúrou (NSA) na zabránenie škodlivým prienikom. Implementuje vynútený (alebo povinný) model riadenia prístupu (anglicky Mandatory Access Control, MAC) nad existujúci diskrečný (alebo selektívny) model (anglický Discretionary Access Control, DAC), teda povolenia na čítanie, zápis, vykonávanie.

SELinux má tri režimy:

  1. presadzovanie — odmietnutie prístupu na základe pravidiel politiky.
  2. Povoľný — vedenie denníka akcií, ktoré porušujú politiku, čo by bolo v režime presadzovania zakázané.
  3. invalidný — úplné vypnutie SELinuxu.

Štandardne sú nastavenia in /etc/selinux/config

Zmena režimov SELinux

Ak chcete zistiť aktuálny režim, spustite

$ getenforce

Ak chcete zmeniť režim na povolený, spustite nasledujúci príkaz

$ setenforce 0

alebo na zmenu režimu liberálne na vymáhanie, vykonať

$ setenforce 1

Ak potrebujete úplne vypnúť SELinux, môžete to urobiť iba prostredníctvom konfiguračného súboru

$ vi /etc/selinux/config

Ak chcete vypnúť, zmeňte parameter SELINUX nasledovne:

SELINUX=disabled

Nastavenie SELinuxu

Každý súbor a proces je označený kontextom SELinux, ktorý obsahuje ďalšie informácie, ako je používateľ, rola, typ atď. Ak povoľujete SELinux prvýkrát, musíte najskôr nakonfigurovať kontext a štítky. Proces priraďovania štítkov a kontextu je známy ako značkovanie. Ak chcete začať označovať, v konfiguračnom súbore zmeníme režim na liberálne.

$ vi /etc/selinux/config
SELINUX=permissive

Po nastavení režimu liberálne, vytvorte prázdny skrytý súbor v koreňovom adresári s názvom autorelabel

$ touch /.autorelabel

a reštartujte počítač

$ init 6

Poznámka: Používame režim liberálne na značenie, od používania režimu vymáhanie môže spôsobiť zlyhanie systému počas reštartu.

Nerobte si starosti, ak sa sťahovanie zasekne na nejakom súbore, označovanie chvíľu trvá. Po dokončení označovania a zavedení systému môžete prejsť do konfiguračného súboru a nastaviť režim vymáhaniea tiež spustiť:

$ setenforce 1

Teraz ste úspešne povolili SELinux na vašom počítači.

Monitorovanie protokolov

Počas označovania alebo počas chodu systému ste mohli naraziť na nejaké chyby. Ak chcete skontrolovať, či váš SELinux funguje správne a či neblokuje prístup k žiadnemu portu, aplikácii atď., musíte sa pozrieť na protokoly. Protokol SELinux sa nachádza v /var/log/audit/audit.log, ale na nájdenie chýb nemusíte čítať celé. Na nájdenie chýb môžete použiť pomôcku audit2why. Spustite nasledujúci príkaz:

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

V dôsledku toho dostanete zoznam chýb. Ak v protokole neboli žiadne chyby, nezobrazia sa žiadne správy.

Konfigurácia SELinux Policy

Politika SELinux je súbor pravidiel, ktorými sa riadi bezpečnostný mechanizmus SELinux. Politika definuje súbor pravidiel pre konkrétne prostredie. Teraz sa naučíme, ako nakonfigurovať politiky, aby umožnili prístup k zakázaným službám.

1. Logické hodnoty (prepínače)

Prepínače (booleans) vám umožňujú meniť časti politiky za behu bez toho, aby ste museli vytvárať nové politiky. Umožňujú vám vykonávať zmeny bez reštartovania alebo rekompilácie politík SELinux.

Príklad
Povedzme, že chceme zdieľať domovský adresár používateľa cez FTP čítanie/zápis a už sme ho zdieľali, ale keď sa k nemu pokúsime dostať, nič nevidíme. Je to preto, že politika SELinux bráni FTP serveru čítať a zapisovať do domovského adresára používateľa. Musíme zmeniť politiku, aby mal FTP server prístup k domovským adresárom. Pozrime sa, či na to existujú nejaké prepínače

$ semanage boolean -l

Tento príkaz zobrazí zoznam dostupných prepínačov s ich aktuálnym stavom (zapnuté alebo vypnuté) a popisom. Svoje vyhľadávanie môžete spresniť pridaním grep, aby ste našli výsledky iba pre ftp:

$ semanage boolean -l | grep ftp

a nájdete nasledujúce

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

Tento prepínač je deaktivovaný, takže ho povolíme pomocou setsebool $ setsebool ftp_home_dir on

Teraz bude mať náš ftp démon prístup k domovskému adresáru používateľa.
Poznámka: Zoznam dostupných prepínačov môžete získať aj bez popisu getsebool -a

2. Označenia a kontext

Toto je najbežnejší spôsob implementácie politiky SELinux. Každý súbor, priečinok, proces a port je označený kontextom SELinux:

  • Pre súbory a priečinky sú štítky uložené ako rozšírené atribúty v systéme súborov a možno ich zobraziť pomocou nasledujúceho príkazu:
    $ ls -Z /etc/httpd
  • V prípade procesov a portov je označovanie riadené jadrom a tieto označenia môžete zobraziť takto:

proces

$ ps –auxZ | grep httpd

prístav

$ netstat -anpZ | grep httpd

Príklad
Teraz sa pozrime na príklad, aby sme lepšie pochopili označenia a kontext. Povedzme, že máme webový server, ktorý namiesto adresára /var/www/html/ использует /home/dan/html/. SELinux to bude považovať za porušenie pravidiel a nebudete môcť prezerať svoje webové stránky. Dôvodom je, že sme nenastavili bezpečnostný kontext spojený so súbormi HTML. Ak chcete zobraziť predvolený kontext zabezpečenia, použite nasledujúci príkaz:

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

Tu to máme httpd_sys_content_t ako kontext pre html súbory. Tento kontext zabezpečenia musíme nastaviť pre náš aktuálny adresár, ktorý má momentálne nasledujúci kontext:

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

Alternatívny príkaz na kontrolu bezpečnostného kontextu súboru alebo adresára:

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

Po nájdení správneho bezpečnostného kontextu tiež použijeme semanage na zmenu kontextu. Ak chcete zmeniť kontext /home/dan/html, spustite nasledujúce príkazy:

$ 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

Po zmene kontextu pomocou semanage príkaz restorecon načíta predvolený kontext pre súbory a adresáre. Náš webový server bude teraz môcť čítať súbory z priečinka /home/dan/htmlpretože kontext zabezpečenia pre tento priečinok bol zmenený na httpd_sys_content_t.

3. Vytvorte miestne politiky

Môžu nastať situácie, keď vám vyššie uvedené metódy nebudú k ničomu a v audit.log sa vám zobrazia chyby (avc/odmietnutie). Keď sa to stane, musíte vytvoriť lokálnu politiku. Všetky chyby môžete nájsť pomocou audit2why, ako je popísané vyššie.

Môžete vytvoriť lokálnu politiku na riešenie chýb. Napríklad dostaneme chybu súvisiacu s httpd (apache) alebo smbd (samba), chyby grepujeme a vytvoríme pre ne politiku:

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

Tu http_policy и smb_policy sú názvy miestnych pravidiel, ktoré sme vytvorili. Teraz musíme tieto vytvorené lokálne politiky načítať do aktuálnej politiky SELinux. Dá sa to urobiť nasledovne:

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

Naše miestne pravidlá boli stiahnuté a už by sme nemali dostávať žiadne avc ani denail v audit.log.

Toto bol môj pokus pomôcť vám pochopiť SELinux. Dúfam, že po prečítaní tohto článku sa budete so SELinuxom cítiť pohodlnejšie.

Zdroj: hab.com

Pridať komentár