Viens no Linux OS milzÄ«go panÄkumu iemesliem iegultajÄs, mobilajÄs ierÄ«cÄs un serveros ir diezgan augstÄ kodola, saistÄ«to pakalpojumu un lietojumprogrammu droŔības pakÄpe. Bet ja
PriekÅ”vÄsture par Linux droŔības moduļiem un SELinux
Security Enhanced Linux ir noteikumu kopums un piekļuves mehÄnisms, kura pamatÄ ir obligÄti un uz lomu balstÄ«ti piekļuves modeļi, lai aizsargÄtu Linux sistÄmas no iespÄjamiem draudiem un novÄrstu diskrecionÄrÄs piekļuves kontroles (DAC), tradicionÄlÄs Unix droŔības sistÄmas, nepilnÄ«bas. Projekts radÄs ASV NacionÄlÄs droŔības aÄ£entÅ«ras iekÅ”ienÄ, un tÄ izstrÄdÄ bija tieÅ”i iesaistÄ«ti darbuzÅÄmÄji Secure Computing Corporation un MITER, kÄ arÄ« vairÄkas pÄtniecÄ«bas laboratorijas.
Linux droŔības moduļi
Linuss Torvalds sniedza vairÄkas piezÄ«mes par NSA jauninÄjumiem, lai tos varÄtu iekļaut Linux kodola galvenajÄ atzarÄ. ViÅÅ” aprakstÄ«ja kopÄ«gu vidi ar pÄrtvÄrÄju komplektu, lai pÄrvaldÄ«tu operÄcijas ar objektiem, un dažus aizsargÄjoÅ”us laukus kodola datu struktÅ«rÄs atbilstoÅ”o atribÅ«tu glabÄÅ”anai. PÄc tam Å”o vidi var izmantot ielÄdÄjami kodola moduļi, lai ieviestu jebkuru vÄlamo droŔības modeli. LSM pilnÄ«bÄ ievadÄ«ja Linux kodolu v2.6 2003. gadÄ.
LSM ietvars ietver apsardzes laukus datu struktÅ«rÄs un pÄrtverÅ”anas funkciju izsaukumus kodola koda kritiskajos punktos, lai tos pÄrvaldÄ«tu un veiktu piekļuves kontroli. Tas arÄ« pievieno funkcionalitÄti droŔības moduļu reÄ£istrÄÅ”anai. /sys/kernel/security/lsm saskarne satur sistÄmas aktÄ«vo moduļu sarakstu. LSM ÄÄ·i tiek saglabÄti sarakstos, kas tiek izsaukti CONFIG_LSM norÄdÄ«tajÄ secÄ«bÄ. DetalizÄta ÄÄ·a dokumentÄcija ir iekļauta header failÄ include/linux/lsm_hooks.h.
LSM apakÅ”sistÄma ļÄva pabeigt tÄs paÅ”as stabilÄ Linux kodola v2.6 versijas pilnÄ«gu SELinux integrÄciju. Burtiski uzreiz SELinux kļuva par de facto standartu droÅ”ai Linux videi un kļuva par daļu no populÄrÄkajiem izplatÄ«jumiem: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.
GlosÄrijs
- IdentitÄte - SELinux lietotÄjs nav tas pats, kas parastais Unix / Linux lietotÄja ID, tie var pastÄvÄt lÄ«dzÄs vienÄ sistÄmÄ, taÄu pÄc bÅ«tÄ«bas tie ir pilnÄ«gi atŔķirÄ«gi. Katrs standarta Linux konts var atbilst vienam vai vairÄkiem SELinux. SELinux identitÄte ir daļa no kopÄjÄ droŔības konteksta, kas nosaka, kuriem domÄniem varat pievienoties un kuriem domÄniem nevar pievienoties.
- Domains - SELinux domÄns ir subjekta, t.i., procesa, izpildes konteksts. DomÄns tieÅ”i nosaka procesam pieŔķirto piekļuvi. DomÄns bÅ«tÄ«bÄ ir saraksts ar to, ko procesi var veikt vai kÄdas darbÄ«bas process var veikt ar dažÄdiem veidiem. Daži domÄnu piemÄri ir sysadm_t sistÄmas administrÄÅ”anai un user_t, kas ir parasts un priviliÄ£Äts lietotÄja domÄns. Init sistÄma darbojas init_t domÄnÄ, un nosauktais process darbojas named_t domÄnÄ.
- Lomas - Kaut kas kalpo kÄ starpnieks starp domÄniem un SELinux lietotÄjiem. Lomas nosaka, kÄdiem domÄniem lietotÄjs var piederÄt un kÄda veida objektiem lietotÄjs var piekļūt. Å Äds piekļuves kontroles mehÄnisms novÄrÅ” privilÄÄ£iju eskalÄcijas uzbrukuma draudus. Lomas ir ierakstÄ«tas uz lomu balstÄ«tas piekļuves kontroles (RBAC) droŔības modelÄ«, ko izmanto SELinux.
- Veidi ā Ierakstiet Enforcement list atribÅ«tu, kas tiek pieŔķirts objektam un nosaka, kas tam varÄs piekļūt. LÄ«dzÄ«gi kÄ domÄna definÄÅ”anai, izÅemot to, ka domÄns attiecas uz procesu, savukÄrt tips attiecas uz tÄdiem objektiem kÄ direktoriji, faili, ligzdas utt.
- PriekÅ”meti un objekti - Procesi ir subjekti un tiek palaisti noteiktÄ kontekstÄ vai droŔības jomÄ. OperÄtÄjsistÄmas resursi: faili, direktoriji, ligzdas utt. ir objekti, kuriem ir pieŔķirts noteikts veids, citiem vÄrdiem sakot, slepenÄ«bas lÄ«menis.
- SELinux politikas - SELinux izmanto dažÄdas politikas, lai aizsargÄtu sistÄmu. SELinux politika definÄ lietotÄju piekļuvi lomÄm, lomas domÄniem un domÄnus veidiem. PirmkÄrt, lietotÄjs ir pilnvarots iegÅ«t lomu, pÄc tam loma ir pilnvarota piekļūt domÄniem. Visbeidzot, domÄnam var bÅ«t piekļuve tikai noteikta veida objektiem.
LSM un SELinux arhitektūra
Neskatoties uz nosaukumu, LSM parasti nav ielÄdÄjami Linux moduļi. TomÄr, tÄpat kÄ SELinux, tas ir tieÅ”i integrÄts kodolÄ. Lai veiktu jebkÄdas izmaiÅas LSM avota kodÄ, ir nepiecieÅ”ama jauna kodola kompilÄcija. Kodola iestatÄ«jumos ir jÄiespÄjo atbilstoÅ”Ä opcija, pretÄjÄ gadÄ«jumÄ LSM kods pÄc sÄknÄÅ”anas netiks aktivizÄts. Bet pat Å”ajÄ gadÄ«jumÄ to var iespÄjot, izmantojot opciju OS sÄknÄÅ”anas ielÄdÄtÄjs.
LSM Äeku kaudze
LSM ir aprÄ«kots ar kodola galveno funkciju ÄÄ·iem, kas var bÅ«t svarÄ«gi pÄrbaudÄm. Viena no galvenajÄm LSM iezÄ«mÄm ir tÄ, ka tÄs ir balstÄ«tas uz steku. TÄdÄjÄdi joprojÄm tiek veiktas standarta pÄrbaudes, un katrs LSM slÄnis tikai pievieno papildu vadÄ«klas un vadÄ«klas. Tas nozÄ«mÄ, ka aizliegumu nevar atcelt. Tas ir parÄdÄ«ts attÄlÄ, ja kÄrtÄjo DAC pÄrbaužu rezultÄts ir kļūme, tad tas pat nesasniegs LSM ÄÄ·us.
SELinux pieÅÄma Fluke pÄtniecÄ«bas operÄtÄjsistÄmas Flask droŔības arhitektÅ«ru, Ä«paÅ”i mazÄko privilÄÄ£iju principu. Å Ä«s koncepcijas bÅ«tÄ«ba, kÄ liecina to nosaukums, ir pieŔķirt lietotÄjam vai apstrÄdÄt tikai tÄs tiesÄ«bas, kas nepiecieÅ”amas paredzÄto darbÄ«bu Ä«stenoÅ”anai. Å is princips tiek Ä«stenots, izmantojot piespiedu piekļuves ierakstÄ«Å”anu, tÄpÄc SELinux piekļuves kontrole ir balstÄ«ta uz domÄna => tipa modeli.
Izmantojot piespiedu piekļuves ierakstÄ«Å”anu, SELinux ir daudz lielÄkas piekļuves kontroles iespÄjas nekÄ tradicionÄlajam DAC modelim, ko izmanto Unix/Linux operÄtÄjsistÄmÄs. PiemÄram, varat ierobežot tÄ«kla porta numuru, kas notiks ar ftp serveri, atļaut rakstÄ«t un mainÄ«t failus noteiktÄ mapÄ, bet ne tos dzÄst.
GalvenÄs SELinux sastÄvdaļas ir:
- Politikas izpildes serveris - Galvenais piekļuves kontroles organizÄÅ”anas mehÄnisms.
- SistÄmas droŔības politiku datu bÄze.
- MijiedarbÄ«ba ar LSM notikumu klausÄ«tÄju.
- Selinuxfs - Pseido-FS, tÄds pats kÄ /proc un uzstÄdÄ«ts mapÄ /sys/fs/selinux. To izpildes laikÄ dinamiski aizpilda Linux kodols, un tajÄ ir faili, kas satur SELinux statusa informÄciju.
- Piekļūstiet vektora keÅ”atmiÅai - PalÄ«gmehÄnisms veiktspÄjas uzlaboÅ”anai.
KÄ darbojas SELinux
Tas viss darbojas Å”Ädi.
- Subjekts SELinux izteiksmÄ veic atļauto darbÄ«bu ar objektu pÄc DAC pÄrbaudes, kÄ parÄdÄ«ts augÅ”ÄjÄ attÄlÄ. Å is darbÄ«bas pieprasÄ«jums tiek nosÅ«tÄ«ts uz LSM notikumu uztvÄrÄju.
- No turienes pieprasÄ«jums kopÄ ar objekta un objekta droŔības kontekstu tiek nodots SELinux Abstraction and Hook Logic modulim, kas ir atbildÄ«gs par mijiedarbÄ«bu ar LSM.
- Politikas izpildes serveris ir lÄmumu pieÅemÅ”anas iestÄde par subjekta piekļuvi objektam, un tas saÅem datus no SELinux AnHL.
- Lai pieÅemtu lÄmumus par piekļuvi vai atteikumu, politikas izpildes serveris visbiežÄk izmantotajÄm kÄrtulÄm izmanto Access Vector Cache (AVC) keÅ”atmiÅas apakÅ”sistÄmu.
- Ja keÅ”atmiÅÄ atbilstoÅ”Ä noteikuma risinÄjums netiek atrasts, pieprasÄ«jums tiek nodots droŔības politikas datu bÄzei.
- MeklÄÅ”anas rezultÄts no datu bÄzes un AVC tiek atgriezts politikas izpildes serverÄ«.
- Ja atrastÄ politika atbilst pieprasÄ«tajai darbÄ«bai, darbÄ«ba ir atļauta. PretÄjÄ gadÄ«jumÄ operÄcija ir aizliegta.
SELinux iestatÄ«jumu pÄrvaldÄ«ba
SELinux darbojas vienÄ no trim režīmiem:
- Izpilde ā stingra droŔības politikas izpilde.
- Atļauja - Ierobežojumu pÄrkÄpums ir pieļaujams, žurnÄlÄ tiek veikta atbilstoÅ”a atzÄ«me.
- AtspÄjots ā droŔības politikas nav spÄkÄ.
JÅ«s varat redzÄt, kÄdÄ režīmÄ ir SELinux, izmantojot Å”Ädu komandu.
[admin@server ~]$ getenforce
Permissive
PiemÄram, mainot režīmu pirms atsÄknÄÅ”anas, iestatiet to uz piespiedu vai 1. AtļaujoÅ”ais parametrs atbilst ciparu kodam 0.
[admin@server ~]$ setenfoce enforcing
[admin@server ~]$ setenfoce 1 #ŃŠ¾ Š¶Šµ ŃŠ°Š¼Š¾Šµ
Varat arÄ« mainÄ«t režīmu, rediÄ£Äjot failu:
[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=mÄrÄ·is
AtŔķirÄ«ba no setenfoce ir tÄda, ka operÄtÄjsistÄmas sÄknÄÅ”anas laikÄ SELinux režīms tiks iestatÄ«ts atbilstoÅ”i SELINUX parametra vÄrtÄ«bai konfigurÄcijas failÄ. TurklÄt <=> atspÄjoto izmaiÅu piespiedu izpilde stÄjas spÄkÄ tikai rediÄ£Äjot /etc/selinux/config failu un pÄc atsÄknÄÅ”anas.
SkatÄ«t kopsavilkuma statusa pÄrskatu:
[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
Lai skatītu SELinux atribūtus, dažas akciju utilītas izmanto opciju -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
SalÄ«dzinot ar parasto ls -l izvadi, ir vairÄki papildu lauki Å”ÄdÄ formÄtÄ:
<user>:<role>:<type>:<level>
PÄdÄjais lauks apzÄ«mÄ kaut ko lÄ«dzÄ«gu droŔības zÄ«mogam un sastÄv no divu elementu kombinÄcijas:
- s0 - nozÄ«mÄ«gums, ierakstÄ«ts arÄ« zema lÄ«meÅa-augsta lÄ«meÅa intervÄlÄ
- c0, c1ā¦ c1023 ir kategorija.
Piekļuves konfigurÄcijas maiÅa
Izmantojiet semodule, lai ielÄdÄtu SELinux moduļus, pievienotu un noÅemtu tos.
[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 - ŃŠ“Š°Š»ŠøŃŃ Š¼Š¾Š“ŃŠ»Ń
PirmÄ komanda semanage pieteikÅ”anÄs saista SELinux lietotÄju ar operÄtÄjsistÄmas lietotÄju, otrajÄ to uzskaita. Visbeidzot, pÄdÄjÄ komanda ar slÄdzi -r noÅem SELinux lietotÄju kartÄÅ”anu OS kontiem. MLS/MCS diapazona vÄrtÄ«bu sintakses skaidrojums ir sniegts iepriekÅ”ÄjÄ sadaļÄ.
[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
Komanda semanage lietotÄjs izmanto, lai pÄrvaldÄ«tu kartÄjumus starp SELinux lietotÄjiem un lomÄm.
[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
Komandu opcijas:
- -a pievienot pielÄgotu lomu kartÄÅ”anas ierakstu;
- -l atbilstoÅ”o lietotÄju un lomu saraksts;
- -d dzÄst lietotÄja lomu kartÄÅ”anas ierakstu;
- -R lietotÄjam piesaistÄ«to lomu saraksts;
Faili, porti un BÅ«la vÄrtÄ«bas
Katrs SELinux modulis nodroÅ”ina failu marÄ·ÄÅ”anas noteikumu kopu, taÄu, ja nepiecieÅ”ams, varat pievienot arÄ« savus noteikumus. PiemÄram, mÄs vÄlamies, lai tÄ«mekļa serverim bÅ«tu piekļuves tiesÄ«bas /srv/www mapei.
[admin@server ~]$ semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?
[admin@server ~]$ restorecon -R /srv/www/
PirmÄ komanda reÄ£istrÄ jaunus marÄ·ÄÅ”anas noteikumus, bet otrÄ atiestata vai drÄ«zÄk atklÄj failu tipus saskaÅÄ ar paÅ”reizÄjiem noteikumiem.
TÄpat TCP/UDP porti ir marÄ·Äti tÄ, lai tos varÄtu klausÄ«ties tikai atbilstoÅ”ie pakalpojumi. PiemÄram, lai tÄ«mekļa serveris klausÄ«tos portÄ 8080, jums ir jÄpalaiž komanda.
[admin@server ~]$ semanage port -m -t http_port_t -p tcp 8080
IevÄrojamam skaitam SELinux moduļu ir parametri, kas var iegÅ«t BÅ«la vÄrtÄ«bas. Visu Å”Ädu opciju sarakstu var redzÄt ar getsebool -a. BÅ«la vÄrtÄ«bas var mainÄ«t, izmantojot 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
SeminÄrs, iegÅ«stiet piekļuvi Pgadmin tÄ«mekļa saskarnei
Apsveriet piemÄru no prakses, mÄs instalÄjÄm pgadmin7.6-web uz RHEL 4, lai administrÄtu PostgreSQL datu bÄzi. PabraucÄm garÄm mazam
MÄs sÄkam ar tipiskiem aizdomÄs turamajiem, pÄrbaudiet /var/log/httpd/error_log. Tur ir daži interesanti ieraksti.
[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.
Å ajÄ brÄ«dÄ« lielÄkajai daļai Linux administratoru bÅ«s liels kÄrdinÄjums palaist setencorce 0 un ar to tikt galÄ. GodÄ«gi sakot, Ŕī ir pirmÄ reize, kad es to daru. Tas, protams, ir arÄ« izeja, taÄu tÄlu no labÄkÄs.
Neskatoties uz apgrÅ«tinoÅ”o dizainu, SELinux var bÅ«t lietotÄjam draudzÄ«gs. VienkÄrÅ”i instalÄjiet problÄmu novÄrÅ”anas pakotni un skatiet sistÄmas žurnÄlu.
[admin@server ~]$ yum install setroubleshoot
[admin@server ~]$ journalctl -b -0
[admin@server ~]$ service restart auditd
Å emiet vÄrÄ, ka auditÄtais pakalpojums ir jÄrestartÄ Å”ÄdÄ veidÄ, nevis ar systemctl, neskatoties uz systemd klÄtbÅ«tni OS. SistÄmas žurnÄlÄ tiks norÄdÄ«ts ne tikai bloÄ·ÄÅ”anas fakts, bet arÄ« iemesls un veids, kÄ pÄrvarÄt aizliegumu.
MÄs izpildÄm Ŕīs komandas:
[admin@server ~]$ setsebool -P httpd_can_network_connect 1
[admin@server ~]$ setsebool -P httpd_can_network_connect_db 1
PÄrbaudÄm piekļuvi pgadmin4-web lapai, viss darbojas.
Avots: www.habr.com