Një udhëzues fillestar për SELinux

Një udhëzues fillestar për SELinux

Përkthimi i artikullit të përgatitur për studentët e kursit "Siguria Linux"

SELinux ose Security Enhanced Linux është një mekanizëm i përmirësuar i kontrollit të aksesit i zhvilluar nga Agjencia e Sigurisë Kombëtare e SHBA (NSA) për të parandaluar ndërhyrjet me qëllim të keq. Ai zbaton një model të kontrollit të aksesit të detyruar (ose të detyrueshëm) (Anglisht Mandatory Access Control, MAC) në krye të modelit ekzistues diskrecional (ose selektiv) (English Discretionary Access Control, DAC), domethënë lejet për të lexuar, shkruar, ekzekutuar.

SELinux ka tre mënyra:

  1. zbatimin e — Refuzimi i aksesit bazuar në rregullat e politikave.
  2. Lejuese — mbajtja e një regjistri veprimesh që shkelin politikën, të cilat do të ndaloheshin në modalitetin e zbatimit.
  3. I paaftë — çaktivizimi i plotë i SELinux.

Si parazgjedhje, cilësimet janë në /etc/selinux/config

Ndryshimi i mënyrave SELinux

Për të zbuluar modalitetin aktual, ekzekutoni

$ getenforce

Për të ndryshuar modalitetin në lejues, ekzekutoni komandën e mëposhtme

$ setenforce 0

ose, për të ndryshuar modalitetin nga tolerant mbi zbatimin, ekzekuto

$ setenforce 1

Nëse keni nevojë të çaktivizoni plotësisht SELinux, atëherë kjo mund të bëhet vetëm përmes skedarit të konfigurimit

$ vi /etc/selinux/config

Për ta çaktivizuar, ndryshoni parametrin SELINUX si më poshtë:

SELINUX=disabled

Konfigurimi i SELinux

Çdo skedar dhe proces shënohet me një kontekst SELinux, i cili përmban informacion shtesë si përdoruesi, roli, lloji, etj. Nëse kjo është hera e parë që aktivizoni SELinux, fillimisht do t'ju duhet të konfiguroni kontekstin dhe etiketat. Procesi i caktimit të etiketave dhe kontekstit njihet si etiketim. Për të filluar shënimin, në skedarin e konfigurimit ne ndryshojmë modalitetin në tolerant.

$ vi /etc/selinux/config
SELINUX=permissive

Pas vendosjes së modalitetit tolerant, krijoni një skedar të fshehur bosh në rrënjë me emrin autorelabel

$ touch /.autorelabel

dhe rinisni kompjuterin

$ init 6

Shënim: Ne përdorim modalitetin tolerant për shënimin, që nga përdorimi i modalitetit zbatimin mund të shkaktojë rrëzimin e sistemit gjatë rindezjes.

Mos u shqetësoni nëse shkarkimi ngec në ndonjë skedar, shënimi kërkon pak kohë. Pasi të përfundojë shënimi dhe sistemi juaj të jetë nisur, mund të shkoni te skedari i konfigurimit dhe të vendosni modalitetin zbatimindhe gjithashtu drejtoni:

$ setenforce 1

Tani keni aktivizuar me sukses SELinux në kompjuterin tuaj.

Monitorimi i regjistrave

Mund të keni hasur në disa gabime gjatë shënimit ose gjatë funksionimit të sistemit. Për të kontrolluar nëse SELinux-i juaj po funksionon siç duhet dhe nëse nuk po bllokon aksesin në ndonjë port, aplikacion, etj., duhet të shikoni regjistrat. Regjistri SELinux ndodhet në /var/log/audit/audit.log, por nuk keni nevojë të lexoni të gjithë për të gjetur gabime. Ju mund të përdorni mjetin audit2why për të gjetur gabime. Ekzekutoni komandën e mëposhtme:

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

Si rezultat, do të merrni një listë gabimesh. Nëse nuk ka pasur gabime në regjistër, atëherë nuk do të shfaqen mesazhe.

Konfigurimi i politikës SELinux

Një politikë SELinux është një grup rregullash që rregullojnë mekanizmin e sigurisë SELinux. Një politikë përcakton një sërë rregullash për një mjedis specifik. Tani do të mësojmë se si të konfigurojmë politikat për të lejuar aksesin në shërbimet e ndaluara.

1. Vlerat logjike (çelsat)

Switches (booleans) ju lejojnë të ndryshoni pjesë të një politike në kohën e ekzekutimit, pa pasur nevojë të krijoni politika të reja. Ato ju lejojnë të bëni ndryshime pa rindezur ose ripërpiluar politikat SELinux.

Shembull
Le të themi se duam të ndajmë direktorinë kryesore të një përdoruesi përmes leximit/shkrimit të FTP, dhe tashmë e kemi ndarë atë, por kur përpiqemi t'i qasemi, nuk shohim asgjë. Kjo është për shkak se politika SELinux pengon serverin FTP të lexojë dhe të shkruajë në direktorinë kryesore të përdoruesit. Ne duhet të ndryshojmë politikën në mënyrë që serveri FTP të mund të hyjë në drejtoritë kryesore. Le të shohim nëse ka ndonjë ndërprerës për këtë duke bërë

$ semanage boolean -l

Kjo komandë do të listojë çelësat e disponueshëm me gjendjen e tyre aktuale (ndezur ose fikur) dhe përshkrimin. Ju mund të rafinoni kërkimin tuaj duke shtuar grep për të gjetur rezultate vetëm ftp:

$ semanage boolean -l | grep ftp

dhe do të gjeni sa vijon

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

Ky ndërprerës është i çaktivizuar, kështu që ne do ta aktivizojmë me setsebool $ setsebool ftp_home_dir on

Tani daemon ynë ftp do të jetë në gjendje të hyjë në direktorinë kryesore të përdoruesit.
Shënim: Ju gjithashtu mund të merrni një listë të çelsave të disponueshëm pa përshkrim duke bërë getsebool -a

2. Etiketat dhe konteksti

Kjo është mënyra më e zakonshme për të zbatuar politikën SELinux. Çdo skedar, dosje, proces dhe port shënohet me kontekstin SELinux:

  • Për skedarët dhe dosjet, etiketat ruhen si atribute të zgjeruara në sistemin e skedarëve dhe mund të shikohen me komandën e mëposhtme:
    $ ls -Z /etc/httpd
  • Për proceset dhe portet, etiketimi menaxhohet nga kerneli dhe ju mund t'i shikoni këto etiketa si më poshtë:

procesi

$ ps –auxZ | grep httpd

port

$ netstat -anpZ | grep httpd

Shembull
Tani le të shohim një shembull për të kuptuar më mirë etiketat dhe kontekstin. Le të themi se kemi një server në internet që, në vend të një drejtorie /var/www/html/ использует /home/dan/html/. SELinux do ta konsiderojë këtë një shkelje të politikës dhe ju nuk do të jeni në gjendje të shikoni faqet tuaja të internetit. Kjo është për shkak se ne nuk kemi vendosur kontekstin e sigurisë të lidhur me skedarët HTML. Për të parë kontekstin e paracaktuar të sigurisë, përdorni komandën e mëposhtme:

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

Këtu kemi arritur httpd_sys_content_t si kontekst për skedarët html. Ne duhet të vendosim këtë kontekst sigurie për direktorinë tonë aktuale, e cila aktualisht ka kontekstin e mëposhtëm:

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

Një komandë alternative për të kontrolluar kontekstin e sigurisë së një skedari ose drejtorie:

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

Ne do të përdorim gjithashtu semanage për të ndryshuar kontekstin pasi të kemi gjetur kontekstin e duhur të sigurisë. Për të ndryshuar kontekstin e /home/dan/html, ekzekutoni komandat e mëposhtme:

$ 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

Pasi të ndryshohet konteksti duke përdorur semanage, komanda restorecon do të ngarkojë kontekstin e paracaktuar për skedarët dhe drejtoritë. Serveri ynë i uebit tani do të jetë në gjendje të lexojë skedarë nga dosja /home/dan/htmlsepse konteksti i sigurisë për këtë dosje është ndryshuar në httpd_sys_content_t.

3. Krijoni politika lokale

Mund të ketë situata kur metodat e mësipërme nuk janë të dobishme për ju dhe ju merrni gabime (avc/denial) në audit.log. Kur kjo të ndodhë, ju duhet të krijoni një politikë lokale. Ju mund t'i gjeni të gjitha gabimet duke përdorur audit2why, siç përshkruhet më sipër.

Ju mund të krijoni një politikë lokale për të zgjidhur gabimet. Për shembull, marrim një gabim që lidhet me httpd (apache) ose smbd (samba), ne i kuptojmë gabimet dhe krijojmë një politikë për to:

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

Këtu http_policy и smb_policy janë emrat e politikave lokale që kemi krijuar. Tani duhet t'i ngarkojmë këto politika lokale të krijuara në politikën aktuale SELinux. Kjo mund të bëhet si më poshtë:

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

Politikat tona lokale janë shkarkuar dhe ne nuk duhet të marrim më asnjë avc ose denail në audit.log.

Kjo ishte përpjekja ime për t'ju ndihmuar të kuptoni SELinux. Shpresoj që pasi të keni lexuar këtë artikull do të ndiheni më rehat me SELinux.

Burimi: www.habr.com

Shto një koment