Mifumo ya usalama ya Linux

Moja ya sababu za mafanikio makubwa ya Mfumo wa Uendeshaji wa Linux kwenye vifaa vilivyopachikwa, vya rununu na seva ni kiwango cha juu cha usalama cha kernel, huduma zinazohusiana na programu. Lakini ikiwa angalia kwa karibu kwa usanifu wa kernel ya Linux, basi haiwezekani kupata ndani yake mraba unaohusika na usalama kama vile. Mfumo mdogo wa usalama wa Linux umejificha wapi na unajumuisha nini?

Asili kwenye Moduli za Usalama za Linux na SELinux

Usalama wa Linux ulioimarishwa ni seti ya sheria na mbinu za ufikiaji kulingana na miundo ya ufikiaji ya lazima na yenye msingi dhima ili kulinda mifumo ya Linux dhidi ya matishio yanayoweza kutokea na kurekebisha mapungufu ya Udhibiti wa Ufikiaji wa Hiari (DAC), mfumo wa usalama wa jadi wa Unix. Mradi huo ulianzia kwenye matumbo ya Shirika la Usalama la Kitaifa la Merika, na uliendelezwa moja kwa moja na wakandarasi Secure Computing Corporation na MITER, pamoja na idadi ya maabara za utafiti.

Mifumo ya usalama ya Linux
Moduli za Usalama za Linux

Linus Torvalds alitoa maoni kadhaa kuhusu maendeleo mapya ya NSA ili yaweze kujumuishwa kwenye kiini kikuu cha Linux. Alielezea mazingira ya jumla, na seti ya viunganishi vya kudhibiti shughuli na vitu na seti ya uwanja fulani wa kinga katika miundo ya data ya kernel ili kuhifadhi sifa zinazolingana. Mazingira haya yanaweza kutumiwa na moduli za kernel zinazoweza kupakiwa kutekeleza modeli yoyote ya usalama inayotakikana. LSM iliingia kikamilifu kwenye Linux kernel v2.6 mnamo 2003.

Mfumo wa LSM unajumuisha sehemu za walinzi katika miundo ya data na wito kwa utendakazi wa kukatiza katika sehemu muhimu katika msimbo wa kernel ili kuzibadilisha na kutekeleza udhibiti wa ufikiaji. Pia huongeza utendaji wa kusajili moduli za usalama. Kiolesura cha /sys/kernel/security/lsm kina orodha ya moduli zinazotumika kwenye mfumo. Kulabu za LSM huhifadhiwa katika orodha zinazoitwa kwa mpangilio uliobainishwa katika CONFIG_LSM. Nyaraka za kina kwenye ndoano zimejumuishwa kwenye faili ya kichwa ni pamoja na/linux/lsm_hooks.h.

Mfumo mdogo wa LSM ulifanya iwezekane kukamilisha ujumuishaji kamili wa SELinux na toleo sawa la kinu cha Linux v2.6. Karibu mara moja, SELinux ikawa kiwango cha ukweli cha mazingira salama ya Linux na ilijumuishwa katika usambazaji maarufu zaidi: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

Kamusi ya SELinux

  • Identity - Mtumiaji wa SELinux sio sawa na kitambulisho cha kawaida cha mtumiaji wa Unix/Linux; wanaweza kuishi pamoja kwenye mfumo huo huo, lakini ni tofauti kabisa kwa asili. Kila akaunti ya kawaida ya Linux inaweza kuendana na moja au zaidi katika SELinux. Utambulisho wa SELinux ni sehemu ya muktadha wa jumla wa usalama, ambao huamua ni vikoa vipi unaweza na usivyoweza kujiunga.
  • Vikoa - Katika SELinux, kikoa ni muktadha wa utekelezaji wa somo, yaani mchakato. Kikoa huamua moja kwa moja ufikiaji ambao mchakato unao. Kikoa kimsingi ni orodha ya michakato gani inaweza kufanya au mchakato unaweza kufanya na aina tofauti. Baadhi ya mifano ya vikoa ni sysadm_t kwa usimamizi wa mfumo, na user_t ambayo ni kikoa cha kawaida cha mtumiaji asiye na upendeleo. Mfumo wa init unaendesha katika kikoa cha init_t, na mchakato uliopewa jina unaendeshwa katika kikoa kilichoitwa_t.
  • Wajibu - Ni nini hutumika kama mpatanishi kati ya vikoa na watumiaji wa SELinux. Majukumu huamua ni vikoa gani mtumiaji anaweza kuwa na ni aina gani za vitu anavyoweza kufikia. Utaratibu huu wa udhibiti wa ufikiaji huzuia tishio la mashambulio ya kuongezeka kwa haki. Majukumu yameandikwa katika muundo wa usalama wa Udhibiti wa Ufikiaji wa Wajibu (RBAC) unaotumiwa katika SELinux.
  • Aina - Sifa ya orodha ya Utekelezaji wa Aina ambayo imepewa kitu na huamua ni nani anayeweza kuipata. Sawa na ufafanuzi wa kikoa, isipokuwa kwamba kikoa kinatumika kwa mchakato, na aina inatumika kwa vitu kama vile saraka, faili, soketi, n.k.
  • Mada na vitu - Taratibu ni mada na huendeshwa katika muktadha maalum, au kikoa cha usalama. Rasilimali za mfumo wa uendeshaji: faili, saraka, soketi, nk, ni vitu ambavyo vimepewa aina fulani, kwa maneno mengine, kiwango cha faragha.
  • Sera za SELinux - SELinux hutumia sera anuwai kulinda mfumo. Sera ya SELinux inafafanua ufikiaji wa watumiaji kwa majukumu, majukumu kwa vikoa, na vikoa kwa aina. Kwanza, mtumiaji ameidhinishwa kupata jukumu, basi jukumu limeidhinishwa kufikia vikoa. Hatimaye, kikoa kinaweza tu kufikia aina fulani za vitu.

Usanifu wa LSM na SELinux

Licha ya jina, LSM si moduli za Linux zinazoweza kupakiwa kwa ujumla. Walakini, kama SELinux, imeunganishwa moja kwa moja kwenye kernel. Mabadiliko yoyote kwa msimbo wa chanzo wa LSM yanahitaji mkusanyiko mpya wa kernel. Chaguo sambamba lazima liwezeshwe katika mipangilio ya kernel, vinginevyo msimbo wa LSM hautaanzishwa baada ya boot. Lakini hata katika kesi hii, inaweza kuwezeshwa na chaguo la bootloader ya OS.

Mifumo ya usalama ya Linux
Msururu wa kuangalia LSM

LSM ina kulabu katika vitendaji vya msingi vya kernel ambavyo vinaweza kuwa muhimu kwa ukaguzi. Moja ya sifa kuu za LSM ni kwamba zimewekwa. Kwa hivyo, ukaguzi wa kawaida bado unafanywa, na kila safu ya LSM huongeza tu udhibiti na udhibiti wa ziada. Hii ina maana kwamba marufuku haiwezi kurejeshwa. Hii inaonyeshwa kwenye takwimu; ikiwa matokeo ya ukaguzi wa kawaida wa DAC ni kutofaulu, basi jambo hilo halitafikia ndoano za LSM.

SELinux inachukua usanifu wa usalama wa Flask wa mfumo wa uendeshaji wa utafiti wa Fluke, haswa kanuni ya upendeleo mdogo. Kiini cha dhana hii, kama jina lake linavyopendekeza, ni kumpa mtumiaji au kusindika tu haki zile ambazo ni muhimu kutekeleza vitendo vilivyokusudiwa. Kanuni hii inatekelezwa kwa kutumia uchapaji wa ufikiaji wa kulazimishwa, kwa hivyo udhibiti wa ufikiaji katika SELinux unategemea kikoa => modeli ya aina.

Shukrani kwa uchapaji wa kulazimishwa wa ufikiaji, SELinux ina uwezo mkubwa zaidi wa udhibiti wa ufikiaji kuliko mtindo wa jadi wa DAC unaotumiwa katika mifumo ya uendeshaji ya Unix/Linux. Kwa mfano, unaweza kupunguza nambari ya bandari ya mtandao ambayo seva ya ftp itaunganisha, kuruhusu kuandika na kubadilisha faili kwenye folda fulani, lakini si kuifuta.

Sehemu kuu za SELinux ni:

  • Seva ya Utekelezaji wa Sera - Njia kuu ya kupanga udhibiti wa ufikiaji.
  • Hifadhidata ya sera ya usalama wa mfumo.
  • Mwingiliano na kikatizi cha tukio la LSM.
  • Selinuxfs - Pseudo-FS, sawa na /proc na imewekwa ndani /sys/fs/selinux. Imejazwa kwa nguvu na kinu cha Linux wakati wa utekelezaji na iliyo na faili zilizo na maelezo ya hali ya SELinux.
  • Fikia Cache ya Vector - Utaratibu msaidizi wa kuongeza tija.

Mifumo ya usalama ya Linux
Jinsi SELinux inavyofanya kazi

Yote hufanya kazi kama hii.

  1. Somo fulani, katika masharti ya SELinux, hufanya kitendo kinachoruhusiwa kwenye kitu baada ya ukaguzi wa DAC, kama inavyoonekana kwenye picha ya juu. Ombi hili la kufanya operesheni huenda kwa kikatizi cha tukio la LSM.
  2. Kutoka hapo, ombi, pamoja na somo na muktadha wa usalama wa kitu, hupitishwa kwa moduli ya Uondoaji wa SELinux na Hook Logic, ambayo inawajibika kwa kuingiliana na LSM.
  3. Mamlaka ya kufanya maamuzi kuhusu ufikiaji wa mhusika kwa kitu ni Seva ya Utekelezaji wa Sera na hupokea data kutoka kwa SELinux AnHL.
  4. Ili kufanya maamuzi kuhusu ufikiaji au kukataliwa, Seva ya Utekelezaji wa Sera inageukia mfumo mdogo wa kuweka akiba wa Access Vector Cache (AVC) kwa sheria zinazotumika zaidi.
  5. Ikiwa suluhisho la sheria inayolingana haipatikani kwenye kashe, basi ombi hupitishwa kwenye hifadhidata ya sera ya usalama.
  6. Matokeo ya utafutaji kutoka hifadhidata na AVC yanarejeshwa kwa Seva ya Utekelezaji wa Sera.
  7. Ikiwa sera iliyopatikana inalingana na kitendo kilichoombwa, basi utendakazi unaruhusiwa. Vinginevyo, operesheni ni marufuku.

Kusimamia Mipangilio ya SELinux

SELinux inafanya kazi katika mojawapo ya njia tatu:

  • Utekelezaji - Kuzingatia kikamilifu sera za usalama.
  • Ruhusa - Ukiukaji wa vizuizi unaruhusiwa; noti inayolingana inafanywa kwenye jarida.
  • Imezimwaβ€”Sera za usalama hazitumiki.

Unaweza kuona SELinux iko katika hali gani na amri ifuatayo.

[admin@server ~]$ getenforce
Permissive

Kubadilisha hali kabla ya kuwasha upya, kwa mfano, kuiweka kwa kutekeleza, au 1. Kigezo cha kuruhusu kinalingana na nambari ya nambari 0.

[admin@server ~]$ setenfoce enforcing
[admin@server ~]$ setenfoce 1 #Ρ‚ΠΎ ΠΆΠ΅ самоС

Unaweza pia kubadilisha hali kwa kuhariri faili:

[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=lengwa

Tofauti na setenfoce ni kwamba wakati boti za mfumo wa uendeshaji, hali ya SELinux itawekwa kwa mujibu wa thamani ya parameter ya SELINUX katika faili ya usanidi. Kwa kuongeza, mabadiliko ya kutekeleza <=> kulemazwa huanza tu kwa kuhariri /etc/selinux/config faili na baada ya kuwasha upya.

Tazama ripoti fupi ya hali:

[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

Kuangalia sifa za SELinux, baadhi ya huduma za kawaida hutumia -Z parameta.

[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

Ikilinganishwa na pato la kawaida la ls -l, kuna sehemu kadhaa za ziada katika umbizo lifuatalo:

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

Sehemu ya mwisho inaashiria kitu kama uainishaji wa usalama na inajumuisha mchanganyiko wa vipengele viwili:

  • s0 - umuhimu, pia imeandikwa kama muda wa kiwango cha chini
  • c0, c1… c1023 - kategoria.

Kubadilisha usanidi wa ufikiaji

Tumia moduli kupakia, kuongeza, na kuondoa moduli za 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 - ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ

Kikosi cha kwanza semanage login huunganisha mtumiaji wa SELinux kwa mtumiaji wa mfumo wa uendeshaji, pili inaonyesha orodha. Mwishowe, amri ya mwisho na -r swichi huondoa upangaji wa watumiaji wa SELinux kwa akaunti za OS. Ufafanuzi wa sintaksia ya thamani za Masafa ya MLS/MCS iko katika sehemu iliyotangulia.

[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

Timu kudhibiti mtumiaji hutumika kudhibiti upangaji kati ya watumiaji wa SELinux na majukumu.

[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

Vigezo vya amri:

  • -a ongeza ingizo maalum la uchoraji ramani;
  • -l orodha ya watumiaji vinavyolingana na majukumu;
  • -d kufuta ingizo la ramani ya jukumu la mtumiaji;
  • -R orodha ya majukumu yaliyounganishwa na mtumiaji;

Faili, Bandari na Thamani za Boolean

Kila moduli ya SELinux hutoa seti ya sheria za kuweka alama za faili, lakini unaweza pia kuongeza sheria zako ikiwa ni lazima. Kwa mfano, tunataka seva ya wavuti iwe na haki za ufikiaji kwenye folda ya /srv/www.

[admin@server ~]$ semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?
[admin@server ~]$ restorecon -R /srv/www/

Amri ya kwanza inasajili sheria mpya za kuashiria, na ya pili inaweka upya, au tuseme, aina za faili kwa mujibu wa sheria za sasa.

Vilevile, bandari za TCP/UDP zimewekewa alama kwa njia ambayo ni huduma zinazofaa tu zinaweza kuzisikiliza. Kwa mfano, ili seva ya wavuti isikilize kwenye bandari 8080, unahitaji kuendesha amri.

[admin@server ~]$ semanage port -m -t http_port_t -p tcp 8080

Idadi kubwa ya moduli za SELinux zina vigezo vinavyoweza kuchukua thamani za Boolean. Orodha nzima ya vigezo vile inaweza kuonekana kwa kutumia getsebool -a. Unaweza kubadilisha maadili ya boolean kwa kutumia 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

Warsha, pata ufikiaji wa kiolesura cha Pgadmin-wavuti

Wacha tuangalie mfano wa vitendo: tulisakinisha pgadmin7.6-web kwenye RHEL 4 ili kusimamia hifadhidata ya PostgreSQL. Tulitembea kidogo Jitihada na mipangilio ya pg_hba.conf, postgresql.conf na config_local.py, weka ruhusa za folda, ilisakinisha moduli za Python zinazokosekana kutoka kwa bomba. Kila kitu kiko tayari, tunazindua na kupokea 500 Hitilafu ya Seva ya Ndani.

Mifumo ya usalama ya Linux

Tunaanza na watuhumiwa wa kawaida, kuangalia /var/log/httpd/error_log. Kuna maingizo ya kuvutia huko.

[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.

Katika hatua hii, wasimamizi wengi wa Linux watajaribiwa sana kuendesha setencorce 0, na huo ndio utakuwa mwisho wake. Kwa kweli, nilifanya hivyo mara ya kwanza. Kwa kweli hii pia ni njia ya kutoka, lakini mbali na bora.

Licha ya miundo ngumu, SELinux inaweza kuwa rahisi kwa watumiaji. Ingiza tu kifurushi cha setroubleshoot na uangalie logi ya mfumo.

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

Tafadhali kumbuka kuwa huduma iliyokaguliwa lazima ianzishwe tena kwa njia hii, na sio kutumia systemctl, licha ya uwepo wa systemd kwenye OS. Katika logi ya mfumo itaonyeshwa si tu ukweli wa kuzuia, lakini pia sababu na njia ya kushinda marufuku.

Mifumo ya usalama ya Linux

Tunatekeleza amri hizi:

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

Tunaangalia ufikiaji wa ukurasa wa wavuti wa pgadmin4, kila kitu kinafanya kazi.

Mifumo ya usalama ya Linux

Mifumo ya usalama ya Linux

Chanzo: mapenzi.com

Kuongeza maoni