Një nga arsyet e suksesit të jashtëzakonshëm të sistemit operativ Linux në pajisjet e integruara, mobile dhe serverët është niveli i lartë i sigurisë së bërthamës, shërbimeve shoqëruese dhe aplikacioneve. Por nëse arkitekturën e bërthamës Linux, nuk mund të gjeni një kuti që përgjigjet për sigurinë, si diçka të tillë. Ku ndodhet, pra, nën-sistemi i sigurisë së Linuxit dhe çfarë përfshin ai?
Parahistoria e Moduleve të Sigurisë së Linuxit dhe SELinux
Security Enhanced Linux Ă«shtĂ« njĂ« grup rregullash dhe mekanizmash aksesimi, tĂ« bazuara nĂ« modelet e aksesit tĂ« detyruar dhe rolit, pĂ«r tĂ« mbrojtur sistemet Linux nga kĂ«rcĂ«nime tĂ« mundshme dhe pĂ«r tĂ« korrigjuar dobĂ«sitĂ« e Discretionary Access Control (DAC) â sistemi tradicional i sigurisĂ« Unix. Projekti ka lindur nĂ« agjencinĂ« e SigurisĂ« KombĂ«tare tĂ« SHBA-sĂ«, zhvillimi u realizua kryesisht nga kontraktuesit e Secure Computing Corporation dhe MITRE, si dhe disa laboratore kĂ«rkimore.

Module të Sigurisë së Linuxit
Linus Torvalds ka bërë një sërë vërejtjesh mbi zhvillimet e reja të NSA-së, në mënyrë që ato të përfshiheshin në degën kryesore të bërthamës Linux. Ai përshkroi një ambient të përgjithshëm, me një grup interceptosh për të menaxhuar operacionet me objekte dhe një grup fushash mbrojtjeje në strukturat e të dhënave të bërthamës për të ruajtur atributet përkatëse. Më pas, ky ambient mund të përdoret nga modulet e ngarkueshme të bërthamës për të realizuar çdo model sigurie të dëshiruar. LSM hyri plotësisht në bërthamën 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ë bërthamës 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ë. Ndërfaqja /sys/kernel/security/lsm përmban një listë të moduleve aktiv në sistem. Hukat LSM ruajnë në lista që thirren në rendin e specifikuar në CONFIG_LSM. Dokumentacioni i detajuar mbi hukat është i përfshirë në skedarin e titullit include/linux/lsm_hooks.h.
Nën-sistemi LSM mundësoi përfundimin e integrimit të plotë të SELinux në të njëjtën version të bërthamës stabile Linux v2.6. Praktikisht menjëherë, SELinux u bë standardi de facto i mjedisit të siguruar Linux dhe u përfshi në disa nga distribucionet më të njohura: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.
Glossari i SELinux
- Identiteti â PĂ«rdoruesi SELinux nuk Ă«shtĂ« e njĂ«jtĂ« me ID-nĂ« e zakonshme tĂ« pĂ«rdoruesit nĂ« Unix/Linux, ato mund tĂ« ekzistojnĂ« nĂ« tĂ« njĂ«jtĂ«n sistem, por janĂ« thelbĂ«sisht tĂ« ndryshme. Ădo llogari standarde Linux mund tĂ« korrespondojĂ« me njĂ« ose mĂ« shumĂ« nĂ« SELinux. Identiteti SELinux Ă«shtĂ« njĂ« komponent i kontekstit tĂ« pĂ«rgjithshĂ«m tĂ« sigurisĂ«, i cili pĂ«rcakton nĂ« cilat domene mund tĂ« hyhet dhe nĂ« cilat â jo.
- Domene â NĂ« SELinux, njĂ« domen Ă«shtĂ« konteksti i ekzekutimit tĂ« subjektit, pra tĂ« procesit. Domeni pĂ«rcakton drejtpĂ«rdrejt aksesin qĂ« ka procesi. Domeni Ă«shtĂ« kryesisht njĂ« listĂ« e asaj qĂ« mund tĂ« bĂ«jnĂ« proceset ose cilat veprime mund tĂ« kryejĂ« procesi me lloje tĂ« ndryshme. Disa shembuj domenesh: sysadm_t pĂ«r administrimin e sistemit, dhe user_t, i cili Ă«shtĂ« domeni i zakonshĂ«m i pĂ«rdoruesve pa privilegje. Sistemi i inicializimit init startohet nĂ« domenin init_t, ndĂ«rsa procesi named startohet nĂ« domenin named_t.
- Rolet â Ai qĂ« shĂ«rben si ndĂ«rmjetĂ«s ndĂ«rmjet domenĂ«ve dhe pĂ«rdoruesve SELinux. Rolet pĂ«rcaktojnĂ« nĂ« cilat domaine mund tĂ« pĂ«rfshihet njĂ« pĂ«rdorues dhe cilat lloje objektivash ai do tĂ« ketĂ« akses. NjĂ« mekanizĂ«m i tillĂ« kontrolli tĂ« aksesit parandalon kĂ«rcĂ«nimin pĂ«r tĂ« kryer njĂ« sulm tĂ« ngritjes sĂ« privilegjeve. Rolet janĂ« tĂ« inkorporuara nĂ« modelin e sigurisĂ« Role Based Access Control (RBAC), i pĂ«rdorur nĂ« SELinux.
- Llojet â NjĂ« atribut i listĂ«s sĂ« Regjistrimit tĂ« Llojit qĂ« i caktohet njĂ« objekti dhe pĂ«rcakton se kush do tĂ« ketĂ« akses nĂ« tĂ«. Ngjason me pĂ«rcaktimin e njĂ« domeni, pĂ«rveç faktit se domeni zbatohet pĂ«r procesin, ndĂ«rsa lloji zbatohet pĂ«r objekte tĂ« tilla si katalogĂ«, skedarĂ«, sokete etj.
- Subjektet dhe objektet â Proceset janĂ« subjekte dhe startohen nĂ« njĂ« kontekst tĂ« caktuar, ose domenin e sigurisĂ«. Burimet e sistemit operativ: skedarĂ«t, katalogĂ«t, soketet etj., janĂ« objekte qĂ« i pĂ«rputhen njĂ« lloji tĂ« caktuar, nĂ« tĂ« tjera fjalĂ« - niveli i sigurisĂ«.
- Politikat SELinux â PĂ«r tĂ« mbrojtur sistemin, SELinux pĂ«rdor njĂ« shumĂ«llojshmĂ«ri politikash. Politika SELinux pĂ«rcakton aksesin e pĂ«rdoruesve nĂ« role, rolet nĂ« domeine dhe domenet nĂ« lloje. NĂ« fillim, pĂ«rdoruesi autorizohet pĂ«r tĂ« marrĂ« njĂ« rol, pastaj roli autorizohet pĂ«r akses nĂ« domeine. Finalmente, njĂ« domen mund tĂ« ketĂ« akses vetĂ«m nĂ« disa lloje objektivash.
LSM dhe arkitektura SELinux
MegjithĂ«se emri LSM nuk Ă«shtĂ« nĂ« fakt njĂ« modul i ngarkueshĂ«m i Linux-it. MegjithatĂ«, ashtu si SELinux, ai Ă«shtĂ« integruar drejtpĂ«rdrejt nĂ« bĂ«rthamĂ«. Ădo ndryshim nĂ« kodin burimor tĂ« LSM kĂ«rkon njĂ« kompilim tĂ« ri tĂ« bĂ«rthamĂ«s. Opsioni pĂ«rkatĂ«s duhet tĂ« aktivizohet nĂ« konfigurimet e bĂ«rthamĂ«s, ndryshe kodi LSM nuk do tĂ« aktivizohet pas ngarkimit. Por edhe nĂ« kĂ«tĂ« rast, mund tĂ« aktivizohet me opsionin e ngarkuesit tĂ« OS-sĂ«.

Stack i kontrollimeve LSM
LSM është i pajisur me hooks në funksionet kryesore të bërthamës, të cilat mund të kenë relevancë për kontrollimet. Një nga veçoritë kryesore të LSM është se ato janë të strukturuara sipas një principi staku. Kështu, kontrollimet standarde vazhdojnë të kryhen, dhe çdo shtresë LSM thjesht shton elemente të tjera të kontrollit. Kjo do të thotë se ndalimi nuk mund të rikthehet pas. Kjo tregohet në figurë, nëse rezultati i kontrollimeve DAC rutinë është refuzim, atëherë nuk do të arrihet as tek hooks LSM.
SELinux ka marrë arkitekturën e sigurisë Flask nga sistemi operativ kërkimor Fluke, veçanërisht parimin e privilegjeve minimale. Thelbi i kësaj koncepte është, siç sugjeron emri, ofrimi të përdoruesit ose procesit vetëm të drejtave që janë të nevojshme për të realizuar veprimet e pritshme. Ky parim zbatohet me anë të tipizimit të detyrueshëm të aksesit, kështu që kontrolli i aksesit në SELinux bazohet në modelin domain => tip.
Falë tipizimit të detyrueshëm të aksesit, SELinux ka kapacitete shumë më të dukshme për ndarjen e aksesit sesa modeli tradicional DAC, i përdorur në OS Unix/Linux. Për shembull, mund të kufizoni numrin e portit të rrjetit që do të dëgjojë serveri ftp, të lejoni shkruajta dhe ndryshime në skedarët në një dosje të caktuar, por jo fshirjen e tyre.
Përbërësit kryesorë të SELinux janë:
- Policy Enforcement Server â Mekanizmi kryesor pĂ«r organizimin e kontrollit tĂ« aksesit.
- Baza e të dhënave të politikave të sigurisë së sistemit.
- Ndërveprimi me interceptorin e ngjarjeve LSM.
- Selinuxfs â FS pseudo, e ngjashme me /proc dhe e montuar nĂ« /sys/fs/selinux. PlotĂ«sohet dinamikisht nga bĂ«rthama Linux gjatĂ« ekzekutimit dhe pĂ«rmban skedarĂ« qĂ« mbajnĂ« informacione rreth statusit tĂ« SELinux.
- Access Vector Cache â Mekanizmi ndihmĂ«s pĂ«r rritjen e performancĂ«s.

Schemes of operation of SELinux
Të gjitha këto funksionojnë siç duhet.
- Një subjekt, në terma të SELinux, kryen një veprim të lejuar mbi një objekt pas verifikimit DAC, siç tregohet në imazhin e mësipërm. Kjo kërkesë për kryerjen e operacionit shkon në kapësin e ngjarjeve LSM.
- Prej atje, kërkesa bashkë me kontekstin e sigurisë së subjektit dhe objektit dërgohet në modulën e Abstraksionit dhe Logjikës së Kapjes së SELinux, e cila është përgjegjëse për ndërveprimin me LSM.
- Një instancë e vendimit për qasje të subjektit në objekt është Serveri i Ekzekutimit të Politikave dhe atij i dërgohen të dhënat nga SELinux AnHL.
- Për të marrë një vendim për qasje ose ndalim, Serveri i Ekzekutimit të Politikave e drejton kërkesën në sistemin e ruajtjes së rregullave më të përdorura, Cache-i i Vektorëve të Qasjes (AVC).
- Nëse nuk gjendet një vendim për politikën përkatëse në cache, kërkesa dërgohet më tej në DB-në e politikave të sigurisë.
- Rezultati i kërkimit nga DB dhe AVC kthehet te Serveri i Ekzekutimit të Politikave.
- Nëse politika e gjetur është në përputhje me veprimin e kërkuar, atëherë operacioni lejohet. Në rast të kundërt, operacioni ndalohet.
Menaxhimi i cilësimeve të SELinux
SELinux vepron në njërin nga tre modet:
- Enforcing â Zbatimi strik i politikave tĂ« sigurisĂ«.
- Permissive â Lejohet shkelja e kufizimeve, me njĂ« shĂ«nim pĂ«rkatĂ«s nĂ« regjistĂ«r.
- Disabled â Politikat e sigurisĂ« nuk janĂ« nĂ« fuqi.
Të shihni në cilin mod është SELinux mund të përdoret komanda e mëposhtme.
[admin@server ~]$ getenforce
PermissiveNdryshimi i modit deri në rimmarrjen, për shembull, për ta vendosur në enforcing, ose 1. Parametri permissive i korrespondon kodit numërik 0.
[admin@server ~]$ setenfoce enforcing
[admin@server ~]$ setenfoce 1 #po e njëjta gjë
Gjithashtu, mund të ndryshoni modin duke e redaktuar skedarin:
[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 gjatë ngarkimit të sistemit operativ, moda SELinux do të vendoset në përputhje me vlerën e parametrave të skedarit të konfigurimit SELINUX. Përveç kësaj, ndryshimet enforcing disabled hynë në fuqi vetëm përmes redaktimit të skedarit /etc/selinux/config dhe pas rimmarrjes.
Shikoni një raport të shkurtër të statusit:
[admin@server ~]$ sestatus Statusi i SELinux: i aktivizuar
Montimi i SELinuxfs: /sys/fs/selinux
Drejtoria rrënjësore e SELinux: /etc/selinux
Emri i politikës së ngarkuar: e targetuar
Modi aktual: lejohet
Moda nga skedari i konfigurimit: zbatuar
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 utilitarë 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 dalje standarde të ls -l, ka disa fusha të tjera shtesë në formatin e mëposhtëm:
:::
Fusha e fundit përfaqëson një lloj shenje të sekretit 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 konfigurimit të qasjeve
Përdorni semodule për të ngarkuar module SELinux, për t'i shtuar dhe për të hequr ato.
[admin@server ~]$ semodule -l |wc -l #listë e të gjitha moduleve
408
[admin@server ~]$ semodule -e abrt #enable - aktivizo modulin
[admin@server ~]$ semodule -d accountsd #disable - çaktivizo modulin
[admin@server ~]$ semodule -r avahi #heq modulinKomanda e parë semanage login lidhi përdoruesin SELinux me përdoruesin e sistemit operativ, e dyta jep listën. Në fund, komanda e fundit me çelësin -r heq lidhjen ndërmjet përdoruesve SELinux dhe llogarive të OS. Shpjegimi i sintaksës për intervistat MLS/MCS ndodhet në seksionin e mëparshëm.
[admin@server ~]$ semanage login -a -s user_u karol
[admin@server ~]$ semanage login -l Emri i Hyrjes SELinux Përdoruesi MLS/MCS Intervali Shërbimi
__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ërdoresh për të menaxhuar lidhjet midis përdoruesve dhe rolleve SELinux.
[admin@server ~]$ semanage user -l
Etiketime MLS/ MLS/
Përdoruesi SELinux Prefiksi MCS Nivel MCS Interval 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ë regjistrim të përdoruesit për përputhjen me rolet;
- -l lista e përputhjeve midis përdoruesve dhe rolleve;
- -d hiq një regjistrim të përdoruesit për përputhjen me rolet;
- -R lista e rolleve të lidhura me përdoruesin;
Skedarët, portat dhe vlerat boolean
Ădo moduli SELinux ofron njĂ« grup rregullash tĂ« etiketimit tĂ« skedarĂ«ve, por gjithashtu mund tĂ« shtoni rregulla tĂ« personalizuara nĂ« rast nevoje. PĂ«r shembull, duam t'i japim serverit tĂ« uebit tĂ« drejtat e aksesit nĂ« 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 rregulla të reja etiketimi, ndërsa e dyta rivendos, më saktë caktimin e tipave të skedarëve në përputhje me rregullat aktuale.
Po ashtu, portet TCP/UDP dĂ«rgohen 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 serverin e uebit tĂ« dĂ«gjojĂ« nĂ« portin 8080, duhet tĂ« ekzekutoni komandĂ«n.
[admin@server ~]$ semanage port -m -t http_port_t -p tcp 8080Një numër i konsiderueshëm modula SELinux kanë parametra që mund të marrin vlera boolean. Lista e plotë e këtyre parametrave mund të shihet me getsebool -a. Vlerat boolean mund të ndryshohen 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ë, akses në ndërfaqen Pgadmin-web
Le të shqyrtojmë një shembull nga praktika, ne instaluan në RHEL 7.6 pgadmin4-web për administrimin e bazave të të dhënave PostgreSQL. Ne përfunduam një me konfigurimin e pg_hba.conf, postgresql.conf dhe config_local.py, caktuar të drejtat në dosje, instaluam nga pip modulat Python që mungonin. Të gjitha janë gati, fillojmë dhe marrim 500 Internal Server error.

Fillojmë me të dyshuarit tipikë, kontrollojmë /var/log/httpd/error_log. Atje ka disa regjistra interesante.
[timestamp] [core:notice] [pid 23689] Politika SELinux e aktivizuar; httpd po ekzekutohet si kontekst system_u:system_r:httpd_t:s0
...
[timestamp] [wsgi:error] [pid 23690] [Errno 13] Leje e mohuar: '\/var\/lib\/pgadmin'
[timestamp] [wsgi:error] [pid 23690]
[timestamp] [wsgi:error] [pid 23690] KĂSHILLĂ: Mund t'ju nevojitet 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ë pikë, shumica e administratorëve të Linux do të kenë një tundim të fortë për të ekzekutuar setenforce 0, dhe puna përfundon. Të pranoj, herën e parë ashtu e bëra. Kjo është një zgjidhje, por jo më e mira.
Pavarësisht nga ngarkesa e strukturave, SELinux mund të jetë miqësor me përdoruesin. Mjafton të instaloni paketën setroubleshoot dhe të shikoni journal-in sistemor.
[admin@server ~]$ yum install setroubleshoot
[admin@server ~]$ journalctl -b -0
[admin@server ~]$ service restart auditd
Kujdes se shërbimi auditd duhet të rinisët pikërisht kështu, dhe jo me systemctl, pavarësisht nga prania e systemd në OS. Në journal-in sistemor do të tregohet jo vetëm fakti i bllokimit, por gjithashtu arsyeja dhe menyra për të kaluar mbi 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ë aksesin në faqen e internetit pgadmin4-web, gjithçka funksionon.
Burimi: habr.com
