Linux öryggiskerfi

Ein af ástæðunum fyrir gríðarlegum velgengni Linux stýrikerfisins á innbyggðum, farsímum og netþjónum er nokkuð mikið öryggi kjarnans, tengdrar þjónustu og forrita. En ef skoða nánar að arkitektúr Linux kjarnans, þá er ómögulegt að finna í honum ferning sem ber ábyrgð á örygginu sem slíku. Hvar er Linux öryggisundirkerfið að fela sig og hvað samanstendur það af?

Bakgrunnur um Linux öryggiseiningar og SELinux

Öryggisbætt Linux er sett af reglum og aðgangsaðferðum sem byggjast á lögboðnum og hlutverkatengdum aðgangslíkönum til að vernda Linux kerfi fyrir hugsanlegum ógnum og leiðrétta annmarkana á Discretionary Access Control (DAC), hinu hefðbundna Unix öryggiskerfi. Verkefnið átti uppruna sinn í þörmum bandarísku þjóðaröryggisstofnunarinnar og var beint þróað aðallega af verktökum Secure Computing Corporation og MITER, auk fjölda rannsóknarstofa.

Linux öryggiskerfi
Linux öryggiseiningar

Linus Torvalds gerði ýmsar athugasemdir við nýja þróun NSA svo hægt væri að setja þær inn í aðal Linux kjarnann. Hann lýsti almennu umhverfi, með safni hlerana til að stjórna aðgerðum með hlutum og mengi ákveðinna verndarreita í kjarnagagnaskipulagi til að geyma samsvarandi eiginleika. Þetta umhverfi er síðan hægt að nota af hlaðanlegum kjarnaeiningum til að innleiða hvaða öryggislíkan sem óskað er eftir. LSM fór að fullu inn í Linux kjarna v2.6 árið 2003.

LSM ramminn inniheldur verndarsvið í gagnaskipulagi og kalla á hlerunaraðgerðir á mikilvægum stöðum í kjarnakóðann til að vinna með þá og framkvæma aðgangsstýringu. Það bætir einnig við virkni til að skrá öryggiseiningar. /sys/kernel/security/lsm viðmótið inniheldur lista yfir virkar einingar á kerfinu. LSM krókar eru geymdir í listum sem eru kallaðir til í þeirri röð sem tilgreind er í CONFIG_LSM. Ítarleg skjöl um króka eru innifalin í hausskránni include/linux/lsm_hooks.h.

LSM undirkerfið gerði það mögulegt að ljúka fullri samþættingu SELinux við sömu útgáfu af stöðugum Linux kjarna v2.6. Næstum strax varð SELinux í raun staðall fyrir öruggt Linux umhverfi og var innifalið í vinsælustu dreifingunum: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

SELinux orðalisti

  • Identity — SELinux notandinn er ekki sá sami og venjulegt Unix/Linux notendaauðkenni; þeir geta lifað saman á sama kerfi, en eru gjörólíkir í meginatriðum. Hver staðall Linux reikningur getur samsvarað einum eða fleiri í SELinux. SELinux auðkennið er hluti af heildaröryggissamhenginu, sem ákvarðar hvaða lén þú getur og getur ekki gengið í.
  • Lén - Í SELinux er lén framkvæmdarsamhengi viðfangs, þ.e. ferli. Lénið ákvarðar beint þann aðgang sem ferli hefur. Lén er í grundvallaratriðum listi yfir hvað ferlar geta gert eða hvað ferli getur gert með mismunandi gerðum. Nokkur dæmi um lén eru sysadm_t fyrir kerfisstjórnun og user_t sem er venjulegt notendalén án forréttinda. Init kerfið keyrir í init_t léninu og nafnið ferlið keyrir í named_t léninu.
  • Hlutverk — Það sem þjónar sem milliliður milli léna og SELinux notenda. Hlutverk ákvarða hvaða lén notandi getur tilheyrt og hvaða gerðir af hlutum hann hefur aðgang að. Þessi aðgangsstýringarbúnaður kemur í veg fyrir hættuna á árásum til að auka forréttindi. Hlutverk eru skrifuð inn í Role Based Access Control (RBAC) öryggislíkanið sem notað er í SELinux.
  • Tegundir — Eiginleiki tegundaframkvæmdarlista sem er úthlutað á hlut og ákvarðar hver hefur aðgang að honum. Svipað og lénsskilgreininguna, nema að lénið á við um ferli og gerð á við hluti eins og möppur, skrár, fals osfrv.
  • Viðfangsefni og hlutir - Ferlar eru viðfangsefni og keyrð í ákveðnu samhengi, eða öryggissviði. Stýrikerfisauðlindir: skrár, möppur, innstungur o.s.frv., eru hlutir sem eru úthlutað ákveðinni gerð, með öðrum orðum, persónuverndarstigi.
  • SELinux reglur — SELinux notar ýmsar stefnur til að vernda kerfið. SELinux stefnan skilgreinir aðgang notenda að hlutverkum, hlutverkum að lénum og lénum að gerðum. Fyrst hefur notandinn heimild til að fá hlutverk, síðan hefur hlutverkið heimild til að fá aðgang að lénum. Að lokum getur lén aðeins haft aðgang að ákveðnum tegundum hluta.

LSM og SELinux arkitektúr

Þrátt fyrir nafnið eru LSMs almennt ekki hlaðanlegar Linux einingar. Hins vegar, eins og SELinux, er það beint samþætt í kjarnanum. Allar breytingar á LSM frumkóðanum krefjast nýrrar kjarnasamsetningar. Samsvarandi valkostur verður að vera virkur í kjarnastillingunum, annars verður LSM kóðinn ekki virkur eftir ræsingu. En jafnvel í þessu tilfelli er hægt að virkja það með OS bootloader valkostinum.

Linux öryggiskerfi
LSM athuga stafla

LSM er búið krókum í kjarnaaðgerðum sem geta skipt máli fyrir athuganir. Einn helsti eiginleiki LSM er að þeim er staflað. Þannig eru staðlaðar athuganir enn framkvæmdar og hvert lag af LSM bætir aðeins við viðbótarstýringum og eftirliti. Þetta þýðir að ekki er hægt að draga bannið til baka. Þetta er sýnt á myndinni; ef niðurstaða venjulegra DAC athugana er bilun, þá nær málið ekki einu sinni til LSM krókanna.

SELinux samþykkir Flask öryggisarkitektúr Fluke rannsóknarstýrikerfisins, sérstaklega meginregluna um minnstu forréttindi. Kjarni þessa hugtaks, eins og nafnið gefur til kynna, er að veita notanda eða vinna aðeins þau réttindi sem eru nauðsynleg til að framkvæma fyrirhugaðar aðgerðir. Þessi regla er útfærð með því að nota þvingaða aðgangsritun, þannig er aðgangsstýring í SELinux byggð á léninu => gerð líkaninu.

Þökk sé þvinguðum aðgangsritun hefur SELinux miklu meiri aðgangsstýringargetu en hefðbundna DAC líkanið sem notað er í Unix/Linux stýrikerfum. Til dæmis er hægt að takmarka netgáttarnúmerið sem ftp-þjónninn mun tengjast, leyfa að skrifa og breyta skrám í ákveðinni möppu, en ekki eyða þeim.

Helstu þættir SELinux eru:

  • Framkvæmdaþjónn fyrir stefnu — Aðalbúnaðurinn til að skipuleggja aðgangsstýringu.
  • Gagnagrunnur kerfisöryggisstefnu.
  • Samskipti við LSM atburðahlerann.
  • Selinuxfs - Gervi-FS, það sama og /proc og fest í /sys/fs/selinux. Virkilega fyllt af Linux kjarnanum á keyrslutíma og inniheldur skrár sem innihalda SELinux stöðuupplýsingar.
  • Fáðu aðgang að Vector Cache — Hjálparbúnaður til að auka framleiðni.

Linux öryggiskerfi
Hvernig SELinux virkar

Þetta virkar allt svona.

  1. Tiltekið viðfangsefni, í SELinux skilmálum, framkvæmir leyfilega aðgerð á hlut eftir DAC athugun, eins og sést á efstu myndinni. Þessi beiðni um að framkvæma aðgerð fer til LSM atburðahlerans.
  2. Þaðan er beiðnin, ásamt efnis- og öryggissamhenginu, send til SELinux Abstraction and Hook Logic einingarinnar, sem ber ábyrgð á samskiptum við LSM.
  3. Ákvörðunarvald um aðgang einstaklings að hlut er stefnuframkvæmdaþjónninn og hann fær gögn frá SELinux AnHL.
  4. Til að taka ákvarðanir um aðgang eða synjun, snýr stefnuframkvæmdaþjónninn sér að skyndiminni undirkerfi Access Vector Cache (AVC) fyrir mest notuðu reglurnar.
  5. Ef lausn fyrir samsvarandi reglu finnst ekki í skyndiminni, þá er beiðnin send til gagnagrunns öryggisstefnu.
  6. Leitarniðurstaðan úr gagnagrunninum og AVC er skilað til stefnuframkvæmdaþjónsins.
  7. Ef stefnan sem fannst passar við umbeðna aðgerð er aðgerðin leyfð. Að öðrum kosti er aðgerðin bönnuð.

Umsjón með SELinux stillingum

SELinux starfar í einum af þremur stillingum:

  • Framfylgja - Strangt fylgni við öryggisstefnur.
  • Leyfilegt - Brot á takmörkunum er leyfilegt; samsvarandi athugasemd er gerð í dagbókinni.
  • Óvirkt—Öryggisreglur eru ekki í gildi.

Þú getur séð í hvaða ham SELinux er með eftirfarandi skipun.

[admin@server ~]$ getenforce
Permissive

Að breyta stillingunni fyrir endurræsingu, til dæmis, stilla hana á framfylgja, eða 1. Leyfilega færibreytan samsvarar tölunúmerinu 0.

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

Þú getur líka breytt stillingunni með því að breyta skránni:

[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=markmið

Munurinn á setenfoce er sá að þegar stýrikerfið ræsir verður SELinux hamurinn stilltur í samræmi við gildi SELINUX færibreytunnar í stillingarskránni. Að auki taka breytingar á því að framfylgja <=> óvirkum aðeins gildi með því að breyta /etc/selinux/config skránni og eftir endurræsingu.

Skoðaðu stutta stöðuskýrslu:

[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

Til að skoða SELinux eiginleika, nota sum venjuleg tól -Z færibreytuna.

[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

Í samanburði við venjulega úttak ls -l eru nokkrir viðbótarreitir á eftirfarandi sniði:

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

Síðasti reiturinn táknar eitthvað eins og öryggisflokkun og samanstendur af samsetningu tveggja þátta:

  • s0 - marktækni, einnig skrifað sem lágstigs-hástigsbil
  • c0, c1… c1023 - flokkur.

Að breyta aðgangsstillingum

Notaðu semodule til að hlaða, bæta við og fjarlægja SELinux einingar.

[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 - удалить модуль

Fyrsta lið semanage innskráningu tengir SELinux notandann við stýrikerfisnotandann, sá seinni sýnir lista. Að lokum fjarlægir síðasta skipunin með -r rofanum kortlagningu SELinux notenda á OS reikninga. Skýring á setningafræði fyrir MLS/MCS Range gildi er í fyrri hlutanum.

[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

Team semanage notandi notað til að stjórna kortlagningum á milli SELinux notenda og hlutverka.

[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

Skipunarfæribreytur:

  • -a bæta við sérsniðinni hlutverkakortsfærslu;
  • -l listi yfir samsvarandi notendur og hlutverk;
  • -d eyða færslu notendahlutverkakortlagningar;
  • -R listi yfir hlutverk tengd notandanum;

Skrár, höfn og Boolean gildi

Hver SELinux eining býður upp á sett af skráarmerkingarreglum, en þú getur líka bætt við þínum eigin reglum ef þörf krefur. Til dæmis viljum við að vefþjónninn hafi aðgangsrétt að /srv/www möppunni.

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

Fyrsta skipunin skráir nýjar merkingarreglur og sú seinni endurstillir, eða öllu heldur setur, skráargerðirnar í samræmi við gildandi reglur.

Sömuleiðis eru TCP/UDP tengi merkt á þann hátt að aðeins viðeigandi þjónusta getur hlustað á þær. Til dæmis, til þess að vefþjónninn geti hlustað á port 8080, þarftu að keyra skipunina.

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

Umtalsverður fjöldi SELinux eininga hefur færibreytur sem geta tekið Boolean gildi. Hægt er að sjá allan listann yfir slíkar breytur með getsebool -a. Þú getur breytt Boole-gildum 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

Vinnustofa, fáðu aðgang að Pgadmin-vefviðmótinu

Við skulum skoða hagnýtt dæmi: við settum upp pgadmin7.6-web á RHEL 4 til að stjórna PostgreSQL gagnagrunninum. Við gengum aðeins leit með stillingunum pg_hba.conf, postgresql.conf og config_local.py, stilltu möppuheimildir, settu upp Python einingarnar sem vantar úr pip. Allt er tilbúið, við ræsum og tökum á móti 500 Innri miðlara villa.

Linux öryggiskerfi

Við byrjum á dæmigerðum grunuðum, að athuga /var/log/httpd/error_log. Það eru nokkrar áhugaverðar færslur þar.

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

Á þessum tímapunkti munu flestir Linux stjórnendur freistast mjög til að keyra setencorce 0, og það mun vera endirinn á því. Satt að segja gerði ég það í fyrsta skiptið. Þetta er auðvitað líka leið út, en langt frá því að vera sú besta.

Þrátt fyrir fyrirferðarmikla hönnun getur SELinux verið notendavænt. Settu bara upp setroubleshoot pakkann og skoðaðu kerfisskrána.

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

Vinsamlegast athugaðu að endurræsa verður endurskoðaða þjónustuna á þennan hátt og ekki með systemctl, þrátt fyrir tilvist systemd í stýrikerfinu. Í kerfisskránni verður tilgreint ekki aðeins staðreyndin um að loka, heldur einnig ástæðan og leið til að vinna bug á banninu.

Linux öryggiskerfi

Við framkvæmum þessar skipanir:

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

Við athugum aðgang að pgadmin4-vefsíðunni, allt virkar.

Linux öryggiskerfi

Linux öryggiskerfi

Heimild: www.habr.com

Bæta við athugasemd