Systemau diogelwch Linux

Un o'r rhesymau dros lwyddiant aruthrol yr Linux OS ar ddyfeisiau symudol a gweinyddwyr wedi'u mewnosod yw lefel eithaf uchel o ddiogelwch y cnewyllyn, gwasanaethau cysylltiedig a chymwysiadau. Ond os cymerwch olwg agosach i bensaernïaeth y cnewyllyn Linux, yna mae'n amhosibl dod o hyd iddo sgwâr sy'n gyfrifol am ddiogelwch fel y cyfryw. Ble mae is-system ddiogelwch Linux yn cuddio a beth mae'n ei gynnwys?

Cefndir ar Fodiwlau Diogelwch Linux a SELinux

Mae Security Enhanced Linux yn set o reolau a mecanweithiau mynediad sy'n seiliedig ar fodelau mynediad gorfodol a seiliedig ar rôl i amddiffyn systemau Linux rhag bygythiadau posibl a chywiro diffygion Rheoli Mynediad Dewisol (DAC), system ddiogelwch draddodiadol Unix. Deilliodd y prosiect yng ngholuddion Asiantaeth Diogelwch Cenedlaethol yr Unol Daleithiau, ac fe’i datblygwyd yn uniongyrchol yn bennaf gan gontractwyr Secure Computing Corporation a MITER, yn ogystal â nifer o labordai ymchwil.

Systemau diogelwch Linux
Modiwlau Diogelwch Linux

Gwnaeth Linus Torvalds nifer o sylwadau am ddatblygiadau NSA newydd fel y gellid eu cynnwys yn y cnewyllyn Linux prif linell. Disgrifiodd amgylchedd cyffredinol, gyda set o atalyddion i reoli gweithrediadau gyda gwrthrychau a set o feysydd amddiffynnol penodol mewn strwythurau data cnewyllyn i storio'r priodoleddau cyfatebol. Yna gellir defnyddio'r amgylchedd hwn gan fodiwlau cnewyllyn y gellir eu llwytho i weithredu unrhyw fodel diogelwch a ddymunir. Aeth LSM i mewn i'r cnewyllyn Linux v2.6 yn llawn yn 2003.

Mae'r fframwaith LSM yn cynnwys meysydd gwarchod mewn strwythurau data a galwadau i swyddogaethau rhyng-gipio ar bwyntiau hollbwysig yn y cod cnewyllyn i'w trin a pherfformio rheolaeth mynediad. Mae hefyd yn ychwanegu ymarferoldeb ar gyfer cofrestru modiwlau diogelwch. Mae'r rhyngwyneb /sys/kernel/security/lsm yn cynnwys rhestr o fodiwlau gweithredol ar y system. Mae bachau LSM yn cael eu storio mewn rhestrau a elwir yn y drefn a nodir yn CONFIG_LSM. Mae dogfennaeth fanwl ar fachau wedi'i chynnwys yn y ffeil pennawd cynnwys/linux/lsm_hooks.h.

Gwnaeth yr is-system LSM hi'n bosibl cwblhau integreiddiad llawn SELinux gyda'r un fersiwn o'r cnewyllyn Linux sefydlog v2.6. Bron ar unwaith, daeth SELinux yn safon de facto ar gyfer amgylchedd Linux diogel ac fe'i cynhwyswyd yn y dosbarthiadau mwyaf poblogaidd: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

Geirfa SELinux

  • Hunaniaeth — Nid yw'r defnyddiwr SELinux yr un peth â'r ID defnyddiwr Unix/Linux arferol; gallant gydfodoli ar yr un system, ond maent yn hollol wahanol yn eu hanfod. Gall pob cyfrif Linux safonol gyfateb i un neu fwy yn SELinux. Mae hunaniaeth SELinux yn rhan o'r cyd-destun diogelwch cyffredinol, sy'n pennu pa barthau y gallwch ac na allwch ymuno â nhw.
  • Parthoedd - Yn SELinux, parth yw cyd-destun gweithredu pwnc, h.y. proses. Mae'r parth yn pennu'n uniongyrchol y mynediad sydd gan broses. Yn y bôn, mae parth yn rhestr o'r hyn y gall prosesau ei wneud neu'r hyn y gall proses ei wneud gyda gwahanol fathau. Mae rhai enghreifftiau o barthau yn sysadm_t ar gyfer gweinyddu system, a user_t sy'n barth defnyddiwr arferol nad yw'n freintiedig. Mae'r system init yn rhedeg yn y parth init_t, ac mae'r broses a enwir yn rhedeg yn y parth a enwir_t.
  • Rolau — Beth sy'n gweithredu fel cyfryngwr rhwng parthau a defnyddwyr SELinux. Mae rolau yn pennu pa barthau y gall defnyddiwr berthyn iddynt a pha fathau o wrthrychau y gallant gael mynediad iddynt. Mae'r mecanwaith rheoli mynediad hwn yn atal bygythiad ymosodiadau dwysáu braint. Mae rolau wedi'u cynnwys yn y model diogelwch Rheoli Mynediad Seiliedig ar Rôl (RBAC) a ddefnyddir yn SELinux.
  • Mathau — Priodoledd rhestr Gorfodi Math sy'n cael ei neilltuo i wrthrych ac sy'n pennu pwy all gael mynediad iddo. Yn debyg i'r diffiniad parth, ac eithrio bod parth yn berthnasol i broses, ac mae math yn berthnasol i wrthrychau fel cyfeiriaduron, ffeiliau, socedi, ac ati.
  • Pynciau a gwrthrychau - Mae prosesau yn bynciau ac yn cael eu rhedeg mewn cyd-destun penodol, neu barth diogelwch. Adnoddau system weithredu: mae ffeiliau, cyfeirlyfrau, socedi, ac ati, yn wrthrychau y rhoddir math penodol iddynt, mewn geiriau eraill, lefel preifatrwydd.
  • Polisïau SELinux — Mae SELinux yn defnyddio amrywiaeth o bolisïau i amddiffyn y system. Mae polisi SELinux yn diffinio mynediad defnyddwyr i rolau, rolau i barthau, a pharthau i fathau. Yn gyntaf, mae'r defnyddiwr wedi'i awdurdodi i gael rôl, yna mae'r rôl wedi'i awdurdodi i gael mynediad i barthau. Yn olaf, dim ond rhai mathau o wrthrychau y gall parth gael mynediad iddynt.

Pensaernïaeth LSM a SELinux

Er gwaethaf yr enw, nid yw LSMs yn gyffredinol yn fodiwlau Linux y gellir eu llwytho. Fodd bynnag, fel SELinux, mae wedi'i integreiddio'n uniongyrchol i'r cnewyllyn. Mae unrhyw newid i'r cod ffynhonnell LSM yn gofyn am grynhoad cnewyllyn newydd. Rhaid galluogi'r opsiwn cyfatebol yn y gosodiadau cnewyllyn, fel arall ni fydd y cod LSM yn cael ei actifadu ar ôl cychwyn. Ond hyd yn oed yn yr achos hwn, gellir ei alluogi gan yr opsiwn cychwynnydd OS.

Systemau diogelwch Linux
pentwr siec LSM

Mae gan LSM fachau mewn swyddogaethau cnewyllyn craidd a all fod yn berthnasol ar gyfer gwiriadau. Un o brif nodweddion LSMs yw eu bod wedi'u pentyrru. Felly, mae'r gwiriadau safonol yn dal i gael eu perfformio, ac mae pob haen o LSM yn ychwanegu rheolaethau a rheolaethau ychwanegol yn unig. Mae hyn yn golygu na ellir treiglo'r gwaharddiad yn ôl. Dangosir hyn yn y ffigur; os yw canlyniad gwiriadau DAC arferol yn fethiant, yna ni fydd y mater hyd yn oed yn cyrraedd y bachau LSM.

Mae SELinux yn mabwysiadu pensaernïaeth diogelwch Fflasg system weithredu ymchwil Fluke, yn enwedig yr egwyddor o fraint leiaf. Hanfod y cysyniad hwn, fel y mae ei enw'n ei awgrymu, yw rhoi'r hawliau hynny i'r defnyddiwr neu'r broses sy'n angenrheidiol i gyflawni'r camau gweithredu arfaethedig yn unig. Gweithredir yr egwyddor hon gan ddefnyddio teipio mynediad gorfodol, felly mae rheolaeth mynediad yn SELinux yn seiliedig ar y model math parth =>.

Diolch i deipio mynediad gorfodol, mae gan SELinux alluoedd rheoli mynediad llawer mwy na'r model DAC traddodiadol a ddefnyddir mewn systemau gweithredu Unix/Linux. Er enghraifft, gallwch gyfyngu ar y rhif porthladd rhwydwaith y bydd y gweinydd ftp yn cysylltu ag ef, caniatáu ysgrifennu a newid ffeiliau mewn ffolder penodol, ond heb eu dileu.

Prif gydrannau SELinux yw:

  • Gweinydd Gorfodi Polisi — Y prif fecanwaith ar gyfer trefnu rheolaeth mynediad.
  • Cronfa ddata polisi diogelwch system.
  • Rhyngweithio ag ataliwr digwyddiad LSM.
  • Selinuxfs - Ffug-FS, yr un peth â / proc ac wedi'i osod yn /sys/fs/selinux. Wedi'i boblogi'n ddeinamig gan y cnewyllyn Linux ar amser rhedeg ac yn cynnwys ffeiliau sy'n cynnwys gwybodaeth statws SELinux.
  • Cache Vector Mynediad — Mecanwaith ategol ar gyfer cynyddu cynhyrchiant.

Systemau diogelwch Linux
Sut mae SELinux yn gweithio

Mae'r cyfan yn gweithio fel hyn.

  1. Mae pwnc penodol, yn nhermau SELinux, yn cyflawni gweithred a ganiateir ar wrthrych ar ôl gwiriad DAC, fel y dangosir yn y llun uchaf. Mae'r cais hwn i berfformio gweithrediad yn mynd i'r rhyng-gipiwr digwyddiad LSM.
  2. O'r fan honno, mae'r cais, ynghyd â'r cyd-destun diogelwch pwnc a gwrthrych, yn cael ei drosglwyddo i fodiwl SELinux Abstraction a Hook Logic, sy'n gyfrifol am ryngweithio â'r LSM.
  3. Yr awdurdod gwneud penderfyniadau ar fynediad gwrthrych i wrthrych yw'r Gweinydd Gorfodi Polisi ac mae'n derbyn data gan SELinux AnHL.
  4. I wneud penderfyniadau ynghylch mynediad neu wadu, mae Gweinydd Gorfodi Polisi yn troi at yr is-system caching Access Vector Cache (AVC) ar gyfer y rheolau a ddefnyddir fwyaf.
  5. Os na cheir datrysiad ar gyfer y rheol gyfatebol yn y storfa, yna trosglwyddir y cais i'r gronfa ddata polisi diogelwch.
  6. Mae canlyniad y chwiliad o'r gronfa ddata a CGY yn cael ei ddychwelyd i'r Gweinydd Gorfodi Polisi.
  7. Os yw'r polisi a ddarganfuwyd yn cyfateb i'r weithred y gofynnwyd amdani, yna caniateir y llawdriniaeth. Fel arall, gwaherddir y llawdriniaeth.

Rheoli Gosodiadau SELinux

Mae SELinux yn gweithredu mewn un o dri modd:

  • Gorfodi - Cadw'n gaeth at bolisïau diogelwch.
  • Caniataol - Caniateir torri cyfyngiadau; gwneir nodyn cyfatebol yn y cyfnodolyn.
  • Anabl - Nid yw polisïau diogelwch mewn grym.

Gallwch weld pa fodd SELinux sydd ynddo gyda'r gorchymyn canlynol.

[admin@server ~]$ getenforce
Permissive

Newid y modd cyn ailgychwyn, er enghraifft, ei osod i orfodi, neu 1. Mae'r paramedr caniataol yn cyfateb i'r cod rhifol 0.

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

Gallwch hefyd newid y modd trwy olygu'r ffeil:

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

Y gwahaniaeth gyda setenfoce yw pan fydd y system weithredu yn cychwyn, bydd y modd SELinux yn cael ei osod yn unol â gwerth y paramedr SELINUX yn y ffeil ffurfweddu. Yn ogystal, dim ond trwy olygu'r ffeil /etc/selinux/config ac ar ôl ailgychwyn y daw newidiadau i orfodi <=> anabl i rym.

Gweld adroddiad statws byr:

[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

I weld priodoleddau SELinux, mae rhai cyfleustodau safonol yn defnyddio'r paramedr -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

O'i gymharu ag allbwn arferol ls -l, mae sawl maes ychwanegol yn y fformat canlynol:

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

Mae'r maes olaf yn dynodi rhywbeth fel dosbarthiad diogelwch ac mae'n cynnwys cyfuniad o ddwy elfen:

  • s0 - arwyddocâd, hefyd wedi'i ysgrifennu fel cyfwng lefel-uchel lefel isel
  • c0, c1 … c1023 - categori.

Newid cyfluniad mynediad

Defnyddiwch semodiwl i lwytho, ychwanegu, a dileu modiwlau 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 - удалить модуль

Tîm cyntaf mewngofnodi semanage yn cysylltu'r defnyddiwr SELinux â defnyddiwr y system weithredu, mae'r ail yn dangos rhestr. Yn olaf, mae'r gorchymyn olaf gyda'r switsh -r yn dileu mapio defnyddwyr SELinux i gyfrifon OS. Mae esboniad o'r gystrawen ar gyfer gwerthoedd Ystod MLS/MCS yn yr adran flaenorol.

[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

Tîm defnyddiwr semanage a ddefnyddir i reoli mapiau rhwng defnyddwyr SELinux a rolau.

[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

Paramedrau gorchymyn:

  • -a ychwanegu cofnod mapio rôl wedi'i deilwra;
  • -l rhestr o ddefnyddwyr a rolau sy'n cyfateb;
  • -d dileu cofnod mapio rôl defnyddiwr;
  • -R rhestr o rolau sydd ynghlwm wrth y defnyddiwr;

Ffeiliau, Porthladdoedd a Gwerthoedd Boole

Mae pob modiwl SELinux yn darparu set o reolau tagio ffeiliau, ond gallwch hefyd ychwanegu eich rheolau eich hun os oes angen. Er enghraifft, rydym am i'r gweinydd gwe gael hawliau mynediad i'r ffolder / srv/www.

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

Mae'r gorchymyn cyntaf yn cofrestru rheolau marcio newydd, ac mae'r ail yn ailosod, neu'n hytrach yn gosod, y mathau o ffeiliau yn unol â'r rheolau cyfredol.

Yn yr un modd, mae porthladdoedd TCP/CDU wedi'u marcio yn y fath fodd fel mai dim ond y gwasanaethau priodol all wrando arnynt. Er enghraifft, er mwyn i'r gweinydd gwe wrando ar borthladd 8080, mae angen i chi redeg y gorchymyn.

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

Mae gan nifer sylweddol o fodiwlau SELinux baramedrau a all gymryd gwerthoedd Boole. Gellir gweld y rhestr gyfan o baramedrau o'r fath gan ddefnyddio getsebool -a. Gallwch newid gwerthoedd boolean gan ddefnyddio 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

Gweithdy, cael mynediad i'r rhyngwyneb Pgadmin-we

Edrychwn ar enghraifft ymarferol: fe wnaethom osod pgadmin7.6-web ar RHEL 4 i weinyddu cronfa ddata PostgreSQL. Cerddasom ychydig cwest gyda gosodiadau pg_hba.conf, postgresql.conf a config_local.py, gosod caniatadau ffolder, gosododd y modiwlau Python sydd ar goll o pip. Mae popeth yn barod, rydym yn lansio ac yn derbyn 500 Gwall Gweinydd Mewnol.

Systemau diogelwch Linux

Rydym yn dechrau gyda'r rhai a ddrwgdybir nodweddiadol, gan wirio /var/log/httpd/error_log. Mae rhai cofnodion diddorol yno.

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

Ar y pwynt hwn, bydd y rhan fwyaf o weinyddwyr Linux yn cael eu temtio'n gryf i redeg setencorce 0, a dyna fydd ei diwedd. A dweud y gwir, gwnes i hynny y tro cyntaf. Mae hyn wrth gwrs hefyd yn ffordd allan, ond ymhell o fod y gorau.

Er gwaethaf y dyluniadau beichus, gall SELinux fod yn hawdd ei ddefnyddio. Gosodwch y pecyn settroubleshoot a gweld log y system.

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

Sylwch fod yn rhaid ailgychwyn y gwasanaeth archwiliedig fel hyn, a pheidio â defnyddio systemctl, er gwaethaf presenoldeb systemd yn yr OS. Yn y log system yn cael ei nodi nid yn unig y ffaith o rwystro, ond hefyd y rheswm a ffordd i oresgyn y gwaharddiad.

Systemau diogelwch Linux

Rydym yn gweithredu'r gorchmynion hyn:

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

Rydym yn gwirio mynediad i dudalen we pgadmin4-we, mae popeth yn gweithio.

Systemau diogelwch Linux

Systemau diogelwch Linux

Ffynhonnell: hab.com

Ychwanegu sylw