Sistemet e mbrojtjes Linux

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 shikoni me kujdes 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.

Sistemet e mbrojtjes Linux
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Ă«.

Sistemet e mbrojtjes Linux
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.

Sistemet e mbrojtjes Linux
Schemes of operation of SELinux

Të gjitha këto funksionojnë siç duhet.

  1. 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.
  2. 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.
  3. 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.
  4. 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).
  5. 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ë.
  6. Rezultati i kërkimit nga DB dhe AVC kthehet te Serveri i Ekzekutimit të Politikave.
  7. 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
Permissive

Ndryshimi 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 httpd

Në 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 modulin

Komanda 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_u

Parametrat 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 8080

Një 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ë mision 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.

Sistemet e mbrojtjes Linux

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.

Sistemet e mbrojtjes Linux

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.

Sistemet e mbrojtjes Linux

Sistemet e mbrojtjes Linux

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster