Sistemet e sigurisë Linux

Një nga arsyet e suksesit të jashtëzakonshëm të Linux OS në pajisjet e integruara, celularë dhe serverët është shkalla mjaft e lartë e sigurisë së kernelit, shërbimeve dhe aplikacioneve të lidhura me to. Por nëse hidhini një vështrim më të afërt ndaj arkitekturës së kernelit Linux, atëherë është e pamundur të gjesh në të një katror përgjegjës për sigurinë si të tillë. Ku fshihet nënsistemi i sigurisë Linux dhe nga çfarë përbëhet?

Sfondi mbi modulet e sigurisë Linux dhe SELinux

Linux i përmirësuar i sigurisë është një grup rregullash dhe mekanizmash aksesi të bazuar në modele aksesi të detyrueshëm dhe të bazuar në role për të mbrojtur sistemet Linux nga kërcënimet e mundshme dhe për të korrigjuar të metat e Kontrollit të Aksesit Diskrecionar (DAC), sistemi tradicional i sigurisë Unix. Projekti filloi në zorrët e Agjencisë së Sigurisë Kombëtare të SHBA-së dhe u zhvillua drejtpërdrejt kryesisht nga kontraktorët Secure Computing Corporation dhe MITER, si dhe një numër laboratorësh kërkimi.

Sistemet e sigurisë Linux
Modulet e Sigurisë Linux

Linus Torvalds bëri një numër komentesh në lidhje me zhvillimet e reja të NSA në mënyrë që ato të mund të përfshiheshin në kernelin kryesor Linux. Ai përshkroi një mjedis të përgjithshëm, me një grup përgjuesish për të kontrolluar operacionet me objekte dhe një grup fushash të caktuara mbrojtëse në strukturat e të dhënave të kernelit për të ruajtur atributet përkatëse. Ky mjedis mund të përdoret më pas nga modulet e kernelit të ngarkueshëm për të zbatuar çdo model sigurie të dëshiruar. LSM hyri plotësisht në kernel Linux v2.6 në 2003.

Korniza LSM përfshin fusha mbrojtëse në strukturat e të dhënave dhe thirrjet për funksionet e përgjimit në pikat kritike në kodin e kernelit për t'i manipuluar ato dhe për të kryer kontrollin e aksesit. Ai gjithashtu shton funksionalitetin për regjistrimin e moduleve të sigurisë. Ndërfaqja /sys/kernel/security/lsm përmban një listë të moduleve aktive në sistem. Grupet LSM ruhen në lista që thirren sipas renditjes së specifikuar në CONFIG_LSM. Dokumentacioni i detajuar për grepa përfshihet në skedarin e titullit include/linux/lsm_hooks.h.

Nënsistemi LSM bëri të mundur përfundimin e integrimit të plotë të SELinux me të njëjtin version të kernelit të qëndrueshëm Linux v2.6. Pothuajse menjëherë, SELinux u bë standardi de fakto për një mjedis të sigurt Linux dhe u përfshi në shpërndarjet më të njohura: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

Fjalorth SELinux

  • identitet — Përdoruesi SELinux nuk është i njëjtë me ID-në e zakonshme të përdoruesit Unix/Linux; ata mund të bashkëjetojnë në të njëjtin sistem, por janë krejtësisht të ndryshëm në thelb. Çdo llogari standarde Linux mund të korrespondojë me një ose më shumë në SELinux. Identiteti SELinux është pjesë e kontekstit të përgjithshëm të sigurisë, i cili përcakton se cilat domene mund dhe nuk mund t'i bashkoheni.
  • domains - Në SELinux, një domen është konteksti i ekzekutimit të një subjekti, pra një procesi. Domeni përcakton drejtpërdrejt aksesin që ka një proces. Një domen është në thelb një listë e asaj që proceset mund të bëjnë ose çfarë mund të bëjë një proces me lloje të ndryshme. Disa shembuj të domeneve janë sysadm_t për administrimin e sistemit, dhe user_t që është një domen normal përdoruesi jo i privilegjuar. Sistemi init funksionon në domenin init_t dhe procesi i emërtuar ekzekutohet në domenin named_t.
  • rol — Çfarë shërben si ndërmjetës midis domeneve dhe përdoruesve të SELinux. Rolet përcaktojnë se cilit domen mund t'i përkasë një përdorues dhe cilat lloje objektesh mund të qasen. Ky mekanizëm i kontrollit të aksesit parandalon kërcënimin e sulmeve të përshkallëzimit të privilegjeve. Rolet janë të shkruara në modelin e sigurisë së kontrollit të aksesit të bazuar në role (RBAC) të përdorur në SELinux.
  • Llojet — Një atribut i listës së tipit të zbatimit që i caktohet një objekti dhe përcakton se kush mund t'i qaset. Ngjashëm me përkufizimin e domenit, përveç që domeni zbatohet për një proces, dhe lloji zbatohet për objekte të tilla si drejtoritë, skedarët, bazat, etj.
  • Subjektet dhe objektet - Proceset janë subjekte dhe funksionojnë në një kontekst specifik ose fushë sigurie. Burimet e sistemit operativ: skedarët, drejtoritë, bazat, etj., janë objekte që u caktohet një lloj i caktuar, me fjalë të tjera, një nivel privatësie.
  • Politikat SELinux — SELinux përdor një sërë politikash për të mbrojtur sistemin. Politika SELinux përcakton aksesin e përdoruesve në role, rolet në domene dhe domenet për llojet. Së pari, përdoruesi autorizohet të marrë një rol, më pas roli autorizohet për të hyrë në domene. Së fundi, një domen mund të ketë akses vetëm në disa lloje objektesh.

Arkitektura LSM dhe SELinux

Pavarësisht emrit, LSM-të në përgjithësi nuk janë module Linux të ngarkueshme. Megjithatë, si SELinux, ai është i integruar drejtpërdrejt në kernel. Çdo ndryshim në kodin burim LSM kërkon një përmbledhje të re të kernelit. Opsioni përkatës duhet të aktivizohet në cilësimet e kernelit, përndryshe kodi LSM nuk do të aktivizohet pas nisjes. Por edhe në këtë rast, mund të aktivizohet nga opsioni i ngarkuesit të OS.

Sistemet e sigurisë Linux
LSM rafte kontrolli

LSM është i pajisur me grepa në funksionet kryesore të kernelit që mund të jenë të rëndësishme për kontrollet. Një nga veçoritë kryesore të LSM-ve është se ato janë të grumbulluara. Kështu, kontrollet standarde kryhen ende, dhe çdo shtresë e LSM shton vetëm kontrolle dhe kontrolle shtesë. Kjo do të thotë se ndalimi nuk mund të rikthehet. Kjo tregohet në figurë; nëse rezultati i kontrolleve rutinë të DAC është një dështim, atëherë çështja nuk do të arrijë as te grepat LSM.

SELinux miraton arkitekturën e sigurisë Flask të sistemit operativ të kërkimit Fluke, në veçanti parimin e privilegjit më të vogël. Thelbi i këtij koncepti, siç sugjeron emri i tij, është t'i japë përdoruesit ose të përpunojë vetëm ato të drejta që janë të nevojshme për të kryer veprimet e synuara. Ky parim zbatohet duke përdorur shtypjen me akses të detyruar, kështu që kontrolli i aksesit në SELinux bazohet në modelin e tipit domain =>.

Falë shtypjes me akses të detyruar, SELinux ka aftësi shumë më të mëdha të kontrollit të aksesit sesa modeli tradicional DAC i përdorur në sistemet operative Unix/Linux. Për shembull, mund të kufizoni numrin e portit të rrjetit me të cilin do të lidhet serveri ftp, të lejoni shkrimin dhe ndryshimin e skedarëve në një dosje të caktuar, por jo fshirjen e tyre.

Komponentët kryesorë të SELinux janë:

  • Serveri i zbatimit të politikave — Mekanizmi kryesor për organizimin e kontrollit të aksesit.
  • Baza e të dhënave të politikave të sigurisë së sistemit.
  • Ndërveprimi me përgjuesin e ngjarjeve LSM.
  • Selinuxfs - Pseudo-FS, i njëjtë si /proc dhe i montuar në /sys/fs/selinux. Populluar në mënyrë dinamike nga kerneli Linux në kohën e ekzekutimit dhe përmban skedarë që përmbajnë informacione të statusit të SELinux.
  • Qasja në memorien e vektorit — Një mekanizëm ndihmës për rritjen e produktivitetit.

Sistemet e sigurisë Linux
Si funksionon SELinux

Gjithçka funksionon kështu.

  1. Një subjekt i caktuar, në termat SELinux, kryen një veprim të lejuar në një objekt pas një kontrolli DAC, siç tregohet në foton e sipërme. Kjo kërkesë për të kryer një operacion shkon te përgjuesi i ngjarjeve LSM.
  2. Prej aty, kërkesa, së bashku me kontekstin e sigurisë së subjektit dhe objektit, i kalohet modulit SELinux Abstraction and Hook Logic, i cili është përgjegjës për ndërveprimin me LSM.
  3. Autoriteti vendimmarrës për aksesin e një subjekti në një objekt është Serveri i Zbatimit të Politikave dhe ai merr të dhëna nga SELinux AnHL.
  4. Për të marrë vendime në lidhje me aksesin ose refuzimin, Serveri i Zbatimit të Politikave i drejtohet nënsistemit të memorizimit të memories së vektorit të aksesit (AVC) për rregullat më të përdorura.
  5. Nëse një zgjidhje për rregullin përkatës nuk gjendet në cache, atëherë kërkesa kalon në bazën e të dhënave të politikave të sigurisë.
  6. Rezultati i kërkimit nga baza e të dhënave dhe AVC kthehet në Serverin e Zbatimit të Politikave.
  7. Nëse politika e gjetur përputhet me veprimin e kërkuar, atëherë operacioni lejohet. Përndryshe, operacioni është i ndaluar.

Menaxhimi i cilësimeve të SELinux

SELinux funksionon në një nga tre mënyrat:

  • Zbatimi - Respektimi i rreptë i politikave të sigurisë.
  • Lejuese - Lejohet shkelja e kufizimeve; një shënim përkatës bëhet në ditar.
  • Me aftësi të kufizuara - Politikat e sigurisë nuk janë në fuqi.

Ju mund të shihni se në çfarë mode është SELinux me komandën e mëposhtme.

[admin@server ~]$ getenforce
Permissive

Ndryshimi i modalitetit përpara rindezjes, për shembull, vendosja e tij në fuqi, ose 1. Parametri lejues korrespondon me kodin numerik 0.

[admin@server ~]$ setenfoce enforcing
[admin@server ~]$ setenfoce 1 #то же самое

Ju gjithashtu mund të ndryshoni modalitetin duke 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=enforcing
# 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=objektiv

Dallimi me setenfoce është se kur sistemi operativ niset, modaliteti SELinux do të vendoset në përputhje me vlerën e parametrit SELINUX në skedarin e konfigurimit. Përveç kësaj, ndryshimet në zbatimin e <=> të çaktivizuar hyjnë në fuqi vetëm duke redaktuar skedarin /etc/selinux/config dhe pas një rindezjeje.

Shikoni një raport të shkurtër të statusit:

[admin@server ~]$ sestatus

SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31

Për të parë atributet SELinux, disa shërbime standarde 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

Krahasuar me daljen normale të ls -l, ka disa fusha shtesë në formatin e mëposhtëm:

<user>:<role>:<type>:<level>

Fusha e fundit tregon diçka si një klasifikim sigurie dhe përbëhet nga një kombinim i dy elementeve:

  • s0 - rëndësi, e shkruar gjithashtu si interval i nivelit të ulët-highlevel
  • c0, c1… c1023 - kategori.

Ndryshimi i konfigurimit të aksesit

Përdorni semodulin për të ngarkuar, shtuar dhe hequr modulet SELinux.

[admin@server ~]$ semodule -l |wc -l #список всех модулей
408
[admin@server ~]$ semodule -e abrt #enable - активировать модуль
[admin@server ~]$ semodule -d accountsd #disable - отключить модуль
[admin@server ~]$ semodule -r avahi #remove - удалить модуль

Skuadra e parë semanage login lidh përdoruesin SELinux me përdoruesin e sistemit operativ, i dyti shfaq një listë. Së fundi, komanda e fundit me çelësin -r heq hartëzimin e përdoruesve të SELinux në llogaritë e OS. Një shpjegim i sintaksës për vlerat e intervalit MLS/MCS është në seksionin e mëparshëm.

[admin@server ~]$ semanage login -a -s user_u karol
[admin@server ~]$ semanage login -l

Login Name SELinux User MLS/MCS Range Service
__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

Ekip menaxhoni përdoruesin përdoret për të menaxhuar hartëzimin midis përdoruesve dhe roleve të SELinux.

[admin@server ~]$ semanage user -l
                Labeling   MLS/       MLS/                          
SELinux User    Prefix     MCS Level  MCS Range             SELinux Roles
guest_u         user       s0         s0                    guest_r
staff_u         staff      s0         s0-s0:c0.c1023        staff_r sysadm_r
...
user_u          user       s0         s0                    user_r
xguest_u        user       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:

  • -një shtoj hyrje në hartën e roleve me porosi;
  • -l listën e përdoruesve dhe roleve që përputhen;
  • -d fshini hyrjen e hartës së roleve të përdoruesit;
  • -R listën e roleve që i janë bashkangjitur përdoruesit;

Skedarët, Portet dhe Vlerat Boolean

Çdo modul SELinux ofron një sërë rregullash për etiketimin e skedarëve, por ju gjithashtu mund të shtoni rregullat tuaja nëse është e nevojshme. Për shembull, ne duam që serveri në internet të ketë të drejta aksesi 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 rregullat e reja të shënimit, dhe e dyta rivendos, ose më mirë vendos, llojet e skedarëve në përputhje me rregullat aktuale.

Po kështu, portat TCP/UDP janë shënuar në atë mënyrë që vetëm shërbimet e duhura mund t'i dëgjojnë ato. Për shembull, në mënyrë që serveri në internet 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 i moduleve SELinux kanë parametra që mund të marrin vlera Boolean. E gjithë lista e parametrave të tillë mund të shihet duke përdorur getsebool -a. Ju mund të ndryshoni vlerat boolean duke përdorur 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

Workshop, fitoni akses në ndërfaqen Pgadmin-web

Le të shohim një shembull praktik: ne instaluam pgadmin7.6-web në RHEL 4 për të administruar bazën e të dhënave PostgreSQL. Ecëm pak kërkim me cilësimet e pg_hba.conf, postgresql.conf dhe config_local.py, vendosi lejet e dosjeve, instaloi modulet e munguara të Python nga pip. Gjithçka është gati, ne nisim dhe marrim 500 Gabim i brendshëm i serverit.

Sistemet e sigurisë Linux

Fillojmë me të dyshuarit tipikë, duke kontrolluar /var/log/httpd/error_log. Ka disa hyrje interesante atje.

[timestamp] [core:notice] [pid 23689] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
...
[timestamp] [wsgi:error] [pid 23690] [Errno 13] Permission denied: '/var/lib/pgadmin'
[timestamp] [wsgi:error] [pid 23690] [timestamp] [wsgi:error] [pid 23690] HINT : You may need to manually set the permissions on
[timestamp] [wsgi:error] [pid 23690] /var/lib/pgadmin to allow apache to write to it.

Në këtë pikë, shumica e administratorëve Linux do të tundohen fort për të ekzekutuar setencorce 0, dhe ky do të jetë fundi i tij. Sinqerisht, unë bëra vetëm atë herën e parë. Kjo sigurisht është gjithashtu një rrugëdalje, por larg nga më e mira.

Pavarësisht modeleve të rënda, SELinux mund të jetë miqësor për përdoruesit. Thjesht instaloni paketën setroubleshoot dhe shikoni regjistrin e sistemit.

[admin@server ~]$ yum install setroubleshoot
[admin@server ~]$ journalctl -b -0
[admin@server ~]$ service restart auditd

Ju lutemi vini re se shërbimi i audituar duhet të riniset në këtë mënyrë, dhe jo duke përdorur systemctl, pavarësisht nga prania e systemd në OS. Në regjistrin e sistemit do të tregohet jo vetëm fakti i bllokimit, por edhe arsyeja dhe mënyra për të kapërcyer ndalimin.

Sistemet e sigurisë Linux

Ne ekzekutojmë këto komanda:

[admin@server ~]$ setsebool -P httpd_can_network_connect 1
[admin@server ~]$ setsebool -P httpd_can_network_connect_db 1

Ne kontrollojmë hyrjen në faqen e internetit pgadmin4, gjithçka funksionon.

Sistemet e sigurisë Linux

Sistemet e sigurisë Linux

Burimi: www.habr.com

Shto një koment