Një nga arsyet e suksesit të madh të sistemit operativ Linux në pajisjet e integruara, mobile dhe serverat është niveli i lartë i sigurisë së kernelit, shërbimeve përkatëse dhe aplikacioneve. Por nëse arkitekturën e kernelit Linux, nuk do të gjeni një katror që përgjigjet për sigurinë, si një e tillë. Ku fshihet, pra, nën-sistemi i sigurisë në Linux dhe nga çfarë përbëhet ai?
Historia e Moduleve të Sigurisë në Linux dhe SELinux
Security Enhanced Linux paraqet njĂ« grup rregullash dhe mekanizmash qasjeje, tĂ« bazuar nĂ« modelet e qasjes obliguese dhe rolit, pĂ«r tĂ« mbrojtur sistemet Linux nga kĂ«rcĂ«nimet e mundshme dhe pĂ«r tĂ« rregulluar mangĂ«sitĂ« e Discretionary Access Control (DAC) â sistemit tradicional tĂ« sigurisĂ« Unix. Projekti u lind nĂ« brendĂ«si tĂ« AgjencisĂ« KombĂ«tare tĂ« SigurisĂ« sĂ« Shteteve tĂ« Bashkuara, ndĂ«rsa zhvillimi u krye kryesisht nga kontraktorĂ«t e Secure Computing Corporation dhe MITRE, si dhe disa laboratorĂ« kĂ«rkimorĂ«.

Linux Security Modules
Linus Torvalds ka bërë një sërë vërejtjesh mbi zhvillimet e reja të NSA, me qëllim që ato të mund të përfshihen në degën kryesore të kernelit Linux. Ai përshkroi një ambient të përgjithshëm, me një grup interceptuesish për të menaxhuar operacionet me objekte dhe një grupp fushash mbrojtëse në strukturat e të dhënave të kernelit për të ruajtur atributet përkatëse. Më pas, ky ambient mund të përdoret nga modulet e ngarkueshme të kernelit për të zbatuar çdo model sigurie të dëshiruar. LSM u integrua plotësisht në kernelin Linux v2.6 në vitin 2003.
Korniza LSM përfshin fusha mbrojtëse në strukturat e të dhënave dhe thirrje funksionesh interceptimi në pika kritike të kodit të kernelit për t'i menaxhuar ato dhe për të kryer kontrollin e aksesit. Ajo gjithashtu shton funksione për regjistrimin e moduleve të sigurisë. Interfaces /sys/kernel/security/lsm përmban një listë të moduleve aktive në sistem. Hooks LSM ruhen në lista, të cilat thirren në rendin e specifikuar në CONFIG_LSM. Dokumentacioni i detajuar mbi hooks përfshihet në skedarin përfshirës include/linux/lsm_hooks.h.
Sistemi LSM ka lejuar përfundimin e integrimit të plotë të SELinux së njëjtës version të bërthamës stabil Linux v2.6. Menjëherë, SELinux u bë standardi de-facto i mjedisit të sigurt të Linux dhe u përfshi në distribucione më të njohura: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.
Fjalori i SELinux
- Identiteti â PĂ«rdoruesi i SELinux nuk Ă«shtĂ« i njĂ«jtĂ« me identifikuesin e zakonshĂ«m tĂ« pĂ«rdoruesit Unix/Linux, ata mund tĂ« koegzistojnĂ« nĂ« tĂ« njĂ«jtĂ«n sistem, por janĂ« krejtĂ«sisht tĂ« ndryshĂ«m nĂ« thelb. Ădo llogari standarde e Linux mund tĂ« pĂ«rputhet me njĂ« ose mĂ« shumĂ« nĂ« SELinux. Identiteti i SELinux Ă«shtĂ« njĂ« pjesĂ« pĂ«rbĂ«rĂ«se e kontekstit tĂ« pĂ«rgjithshĂ«m tĂ« sigurisĂ«, qĂ« pĂ«rcakton nĂ« cilat domenĂ« mund tĂ« hyhet dhe nĂ« cilat â jo.
- Domenet â NĂ« SELinux, njĂ« domain Ă«shtĂ« konteksti nĂ« tĂ« cilin ekzekutohet njĂ« subjekt, pra, njĂ« proces. Domaini pĂ«rcakton drejtpĂ«rdrejt qasjen qĂ« ka procesi. Domaini Ă«shtĂ« nĂ« thelb njĂ« listĂ« e asaj qĂ« mund tĂ« bĂ«jnĂ« proceset ose cilat veprime mund tĂ« kryejnĂ« proceset mbi tipe tĂ« ndryshme. Disa shembuj tĂ« domainĂ«ve janĂ«: sysadm_t pĂ«r administratĂ«n e sistemit, dhe user_t, i cili Ă«shtĂ« njĂ« domain i zakonshĂ«m i pĂ«rdoruesit pa privilegji. Sistemi i inicializimit init ekzekutohet nĂ« domainin init_t, ndĂ«rsa procesi named ekzekutohet nĂ« domainin named_t.
- Rollet â Ajo qĂ« shĂ«rben si njĂ« ndĂ«rmjetĂ«s mes domainĂ«ve dhe pĂ«rdoruesve tĂ« SELinux. Role tĂ« pĂ«rcaktojnĂ« nĂ« cilĂ«t domainĂ« mund tĂ« pĂ«rfshihet njĂ« pĂ«rdorues dhe cilit lloj objektesh do t'i ketĂ« qasje. NjĂ« mekanizĂ«m i tillĂ« ndanĂ«s e parandalon kĂ«rcĂ«nimin e sulmit tĂ« rritjes sĂ« privilegjeve. Roles janĂ« tĂ« shkruara nĂ« modelin e sigurisĂ« Role Based Access Control (RBAC), qĂ« pĂ«rdoret nĂ« SELinux.
- Tipe â Atributi i listĂ«s Type Enforcement, i cili i caktohet njĂ« objekti dhe pĂ«rcakton se kush do tĂ« ketĂ« qasje nĂ« tĂ«. Duket si pĂ«rcaktimi i domenit, pĂ«rveç se domeni aplikohet nĂ« procesin, ndĂ«rsa tipi aplikohet nĂ« objekte tĂ« tilla si katalogĂ«, skedarĂ«, socket-e, etj.
- Subjektet dhe objektet â Proceset janĂ« Subjekte dhe ekzekutohen nĂ« njĂ« kontekst tĂ« caktuar, ose domain sigurie. Burimet e sistemit operativ: skedarĂ«t, direktorĂ«t, socket-et etj., janĂ« objekte, tĂ« cilĂ«ve u caktohet njĂ« tip i caktuar, nĂ« tĂ« tjera fjalĂ« â njĂ« nivel i sekretit.
- Politikat SELinux â PĂ«r tĂ« mbrojtur sistemin, SELinux pĂ«rdor politika tĂ« ndryshme. Politika SELinux pĂ«rcakton qasjen e pĂ«rdoruesve nĂ« role, rollet nĂ« domenet dhe domenet nĂ« tipe. NĂ« fillim, njĂ« pĂ«rdorues autorizohet pĂ«r tĂ« marrĂ« njĂ« rol, mĂ« pas roli autorizohet pĂ«r qasje nĂ« domenet. MĂ« nĂ« fund, njĂ« domain mund tĂ« ketĂ« qasje vetĂ«m nĂ« disa lloje objektesh.
LSM dhe arkitektura SELinux
MegjithĂ«se emri LSM nĂ« pĂ«rgjithĂ«si nuk Ă«shtĂ« module tĂ« ngjashme me ato tĂ« ngarkueshme nĂ« Linux. MegjithatĂ«, si SELinux, ai Ă«shtĂ« integruar drejtpĂ«rdrejt nĂ« bĂ«rthamĂ«. Ădo ndryshim nĂ« kodin burimor tĂ« LSM kĂ«rkon kompilim tĂ« ri tĂ« bĂ«rthamĂ«s. Opsioni pĂ«rkatĂ«s duhet tĂ« aktivizohet nĂ« cilĂ«simet e bĂ«rthamĂ«s, pĂ«rndryshe kodi LSM nuk do tĂ« aktivizohet pas ngarkimit. Por edhe nĂ« kĂ«tĂ« rast, mund tĂ« aktivizohet me opsionin e ngarkuesit tĂ« OS-sĂ«.

Streha e kontrollit LSM
LSM ofron hook në funksionet kryesore të bërthamës, të cilat mund të jenë të rëndësishme për kontrollet. Një nga karakteristikat kryesore të LSM është se ato janë të strukturuara sipas parimit të një strehe. Kështu, kontrolllet standarde vazhdojnë të ekzekutohen, dhe çdo shtresë LSM vetëm shton elemente shtesë të kontrollit dhe menaxhimit. Kjo do të thotë se ndalimi nuk mund të kthehet prapa. Kjo ilustrohet në figurë, nëse rezultati i kontrolleve rutinë DAC është refuzim, atëherë çështja as nuk arrin te hook-et e LSM.
SELinux ka marrë struktura e sigurisë së Flask nga sistemi operacional kërkimor Fluke, veçanërisht parimi i privilegjeve më të vogla. Thelbi i kësaj koncepte, siç sugjeron emri, është të ofrohen përdoruesit ose procesit vetëm ato të drejta që janë të nevojshme për kryerjen e veprimeve të parashikuara. Ky parim zbatohet përmes tipizimit të detyrueshëm të aksesit, kështu që kontrolli i hyrjeve në SELinux bazohet në modelin domen => tip.
Me tipizimin e detyrueshëm të aksesit, SELinux ka mundësi shumë më të mëdha për ndarjen e aksesit, sesa modeli tradicional DAC, i përdorur në OS Unix/Linux. Për shembull, mund të kufizohet numri i portit rrjetësor që do të përdoret nga serveri ftp, të lejohet shkruajta dhe ndryshimi i skedarëve në një dosje të caktuar, por jo fshirja e tyre.
Komponentët kryesorë të SELinux janë:
- ShĂ«rbimi i Zbatimit tĂ« Politikeve â Mekanizmi kryesor i organizimit tĂ« kontrollit tĂ« aksesit.
- Baza e të dhënave për politikat e sigurisë së sistemit.
- Interaksioni me interceptorin e ngjarjeve LSM.
- Selinuxfs â Pseudo-FS, e njĂ«jtĂ« si /proc dhe e montuar nĂ« /sys/fs/selinux. PlotĂ«sohet nĂ« mĂ«nyrĂ« dinamike nga bĂ«rthama Linux gjatĂ« ekzekutimit dhe pĂ«rmban skedare qĂ« kanĂ« informacion rreth statusit tĂ« SELinux.
- Access Vector Cache â NjĂ« mekanizĂ«m ndihmĂ«s pĂ«r rritjen e performancĂ«s.

Skema e funksionimit të SELinux
Kjo punon në këtë mënyrë.
- Një subjekt, në terma të SELinux, kryen një veprim të lejuar mbi një objekt pas verifikimit DAC, siç tregohet në figurën e sipërme. Kërkesa për kryerjen e operacionit dërgohet te interceptori i ngjarjeve LSM.
- Nga aty, kërkesa së bashku me kontekstin e sigurisë së subjektit dhe objektit kalon tek moduli SELinux Abstraction and Hook Logic, përgjegjës për ndërveprimin me LSM.
- Instanca e vendimit për qasjen e subjektit ndaj objektit është Serveri i Zbatimit të Politikave dhe ai merr të dhëna nga SELinux AnHL.
- Për të marrë një vendim në lidhje me qasjen, ose ndalimin, Serveri i Zbatimit të Politikave i referohet nën-sistemit të ruajtjes së rregullave më të përdorura, Access Vector Cache (AVC).
- Nëse nuk gjendet një vendim për rregullin përkatës në cache, kërkesa kalon për më tej në bazën e të dhënave të politikave të sigurisë.
- Rezultati i kërkimit nga baza e të dhënave dhe AVC kthehet te Serveri i Zbatimit të Politikave.
- Nëse politika e gjetur përputhet me veprimin e kërkuar, atëherë operacioni lejohet. Përndryshe, operacioni ndalohet.
Menaxhimi i konfigurimeve të SELinux
SELinux funksionon në njërin nga tre modet:
- Enforcing â Zbatimi i rregullave tĂ« sigurisĂ«.
- Permissive â Lejohen shkeljet, me shĂ«nimin pĂ«rkatĂ«s nĂ« regjistĂ«r.
- Disabled â Rregullat e sigurisĂ« nuk pĂ«rkthehen.
Për të parë se në cilin mod është SELinux, mund të përdorni komandën e mëposhtme.
[admin@server ~]$ getenforce
PermissiveNdryshimi i modit deri në rinisje, për shembull, për ta vendosur në enforcing, ose 1. Parametri permissive i korrespondon kodit numerik 0.
[admin@server ~]$ setenfoce enforcing
[admin@server ~]$ setenfoce 1 # e njëjta gjë
Një mënyrë tjetër për të ndryshuar modin është editimi i skedarit:
[admin@server ~]$ cat /etc/selinux/config # This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=duke
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targete
Dallimi me setenfoce është se në ngarkimin e sistemit operativ, moda SELinux do të vendoset sipas vlerës së parametrave të skedarit të konfigurimit. Përveç kësaj, ndryshimet midis enforcing disabled hyjnë në fuqi vetëm përmes editimit të skedarit /etc/selinux/config dhe pas rinisjes.
Shikoni një raport të shkurtër statusi:
[admin@server ~]$ sestatus Statusi i SELinux: i aktivizuar
Montimi i SELinuxfs: /sys/fs/selinux
Katalogu rrënjësor i SELinux: /etc/selinux
Emri i politikës së ngarkuar: i targetuar
ReĆŸimi aktual: lehtĂ«sues
ReĆŸimi nga skedari i konfigurimit: forcues
Statusi i politikës MLS: i aktivizuar
Statusi i politikës deny_unknown: i lejuar
Versioni maksimal i politikës së kernelit: 31
Për të parë atributet e SELinux, disa utilitete standard përdorin parametrin -Z.
[admin@server ~]$ ls -lZ /var/log/httpd/
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20200920
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20200927
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20201004
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20201011
[admin@server ~]$ ps -u apache -Z
LABEL PID TTY TIME CMD
system_u:system_r:httpd_t:s0 2914 ? 00:00:04 httpd
system_u:system_r:httpd_t:s0 2915 ? 00:00:00 httpd
system_u:system_r:httpd_t:s0 2916 ? 00:00:00 httpd
system_u:system_r:httpd_t:s0 2917 ? 00:00:00 httpd
...
system_u:system_r:httpd_t:s0 2918 ? 00:00:00 httpdNë krahasim me daljen normale të ls -l, këtu ka disa fusha shtesë në formatin e mëposhtëm:
:::
Fusha e fundit shënon diçka si një gradë sekretësie dhe përbëhet nga një kombinim i dy elementeve:
- s0 â rĂ«ndĂ«sia, gjithashtu shkruhet me intervalin lowlevel-highlevel
- c0, c1⊠c1023 â kategoria.
Ndryshimi i konfiguracionit të qasjes
Përdorni semodule për të ngarkuar modul të SELinux, për ta shtuar dhe hequr atë.
[admin@server ~]$ semodule -l |wc -l #lista e të gjitha moduleve
408
[admin@server ~]$ semodule -e abrt #aktivizo - aktivizo modulin
[admin@server ~]$ semodule -d accountsd #ndalo - ndalo modulin
[admin@server ~]$ semodule -r avahi #hiq - hiq modulinKomanda e parë semanage login lidhi përdoruesin e SELinux me përdoruesin e sistemit operativ, komanda e dytë shfaq një listë. Në fund, komanda e fundit me çelësin -r heq lidhjen e shfaqjes së përdoruesve të SELinux me llogaritë e OS. Shpjegimi i sintaksës së vlerave MLS/MCS Range ndodhet në seksionin e mëparshëm.
[admin@server ~]$ semanage login -a -s user_u karol
[admin@server ~]$ semanage login -l Emri i identifikimit të përdoruesit SELinux Lidhja me MLS/MCS
__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
system_u system_u s0-s0:c0.c1023 *
[admin@server ~]$ semanage login -d karol
Ekipa semanage user përdoret për të menaxhuar lidhjet ndërmjet përdoruesve dhe rollev të SELinux.
[admin@server ~]$ semanage user -l
Etiketime MLS/ MLS/
Përdoruesi SELinux Prefiksi MCS Niveli MCS Range Rollet SELinux
guest_u përdorues s0 s0 guest_r
staff_u staf s0 s0-s0:c0.c1023 staff_r sysadm_r
...
user_u përdorues s0 s0 user_r
xguest_u përdorues s0 s0 xguest_r
[admin@server ~]$ semanage user -a -R 'staff_r user_r'
[admin@server ~]$ semanage user -d test_uParametrat e komandës:
- -a shto një regjistër të përdoruesve për lidhjet e rollev;
- -l lista e lidhjeve të përdoruesve dhe rollleve;
- -d hiq një regjistër të përdoruesve për lidhjet e rollev;
- -R lista e rolleve të lidhura me përdoruesin;
Skedarët, portet dhe vlerat logjike
Ădo modul SELinux ofron njĂ« grup rregullash pĂ«r etiketimin e skedarĂ«ve, por gjithashtu mund tĂ« shtoni rregulla tĂ« veçanta nĂ«se Ă«shtĂ« e nevojshme. PĂ«r shembull, dĂ«shirojmĂ« t'i japim serverit tĂ« uebit tĂ« drejtat pĂ«r tĂ« aksesuar dosjen /srv/www.
[admin@server ~]$ semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?
[admin@server ~]$ restorecon -R /srv/www/Komanda e parë regjistron rregullat e reja të etiketimit, ndërsa e dyta rivendos, më saktë përcakton, llojet e skedarëve në përputhje me rregullat aktuale.
Po ashtu, portet TCP/UDP janë etiketuar në një mënyrë që vetëm shërbimet përkatëse mund t'i dëgjojnë ato. Për shembull, për të lejuar që serveri i uebit të dëgjojë portin 8080, duhet të kryhet komanda.
[admin@server ~]$ semanage port -m -t http_port_t -p tcp 8080Një numër i rëndësishëm i moduleve SELinux kanë parametra që mund të pranojnë vlera logjike. Lista e plotë e këtyre parametrave mund të shihet me getsebool -a. Vlerat logjike mund të modifikohen me setsebool.
[admin@server ~]$ getsebool httpd_enable_cgi
httpd_enable_cgi --> on
[admin@server ~]$ setsebool -P httpd_enable_cgi off
[admin@server ~]$ getsebool httpd_enable_cgi
httpd_enable_homedirs --> off
Praktikë, qasje në ndërfaqen Pgadmin-web
Le të shqyrtojmë një shembull praktik, ne instaluam pgadmin4-web në RHEL 7.6 për administrimin e bazave të të dhënave PostgreSQL. Ne kaluam një eksplorim të vogël me konfigurimin e pg_hba.conf, postgresql.conf dhe config_local.py, vendosëm lejet për dosjet, instaluam modulet e humbura të Python nga pip. Të gjitha janë gati, e nisim dhe marrim 500 Internal Server error.

Fillojmë me të dyshuarit tipikë, kontrollojmë /var/log/httpd/error_log. Atje ka disa të dhëna interesante.
[timestamp] [core:notice] [pid 23689] Politika SELinux e aktivizuar; httpd po funksionon si konteksti system_u:system_r:httpd_t:s0
...
[timestamp] [wsgi:error] [pid 23690] [Errno 13] Leje e refuzuar: '/var/lib/pgadmin'
[timestamp] [wsgi:error] [pid 23690]
[timestamp] [wsgi:error] [pid 23690] KĂSHILLĂ: Mund tĂ« duhet tĂ« vendosni manualisht lejet mbi
[timestamp] [wsgi:error] [pid 23690] /var/lib/pgadmin për të lejuar apache të shkruajë në të.
Në këtë moment, shumica e administratorëve të Linux do të kenë një tundim të fortë për të ekzekutuar setenforce 0, dhe problemi zgjidhet. Të pranoj, herën e parë unë e bëra ashtu. Kjo është një zgjidhje gjithsesi, por padyshim jo më e mira.
Pavarësisht nga komplekset e strukturave, SELinux mund të jetë miqësor ndaj përdoruesit. Mjafton të instaloni paketën setroubleshoot dhe të shihni regjistrin e sistemit.
[admin@server ~]$ yum install setroubleshoot
[admin@server ~]$ journalctl -b -0
[admin@server ~]$ service restart auditd
Vini re se shërbimi auditd duhet të riniset kështu, e jo me systemctl, pavarësisht nga prania e systemd në OS. Në regjistrin e sistemit do të tregojë jo vetëm faktin e bllokimit, por gjithashtu shkakun dhe mënyrën për të kaluar ndalimin.

Ekzekutojmë këto komanda:
[admin@server ~]$ setsebool -P httpd_can_network_connect 1
[admin@server ~]$ setsebool -P httpd_can_network_connect_db 1
Kontrollojmë qasjen në faqen e internetit pgadmin4-web, gjithçka funksionon.
Burimi: habr.com
