Sîstemên ewlehiyê yên Linux

Yek ji sedemên serfiraziya mezin a OS-ya Linux-ê li ser cîhazên pêvekirî, mobîl û pêşkêşkeran astek pir bilind a ewlehiya kernel, karûbar û serîlêdanên têkildar e. Lê eger ji nêz ve lê binêre ji mîmariya kernel Linux re, wê hingê ne gengaz e ku meriv di wê de çargoşeyek berpirsiyarê ewlehiyê bi vî rengî bibîne. Binepergala ewlehiya Linux li ku vedişêre û ji çi pêk tê?

Paşîn li ser Modulên Ewlekariya Linux û SELinux

Ewlekariya Enhanced Linux komek rêgez û mekanîzmayên gihîştinê ye ku li ser bingeha modelên gihîştina mecbûrî û-bingeha rola bingehîn e ku pergalên Linux-ê ji xetereyên potansiyel biparêze û kêmasiyên Kontrola Destûra Birêveberî (DAC), pergala ewlehiya kevneşopî ya Unix-ê rast bike. Ev proje ji roviyên Ajansa Ewlekariya Neteweyî ya Dewletên Yekbûyî derket, û rasterast ji hêla peykerên Secure Computing Corporation û MITER, û her weha hejmarek laboratuarên lêkolînê ve hate pêşve xistin.

Sîstemên ewlehiyê yên Linux
Modulên Ewlekariya Linux

Linus Torvalds di derbarê pêşkeftinên nû yên NSA de gelek şîrove kirin da ku ew di nav kernel Linux-ê ya sereke de cih bigirin. Wî hawîrdorek gelemperî, bi komek navbirî ji bo kontrolkirina operasyonan bi tiştan û komek hin qadên parastinê di strukturên daneya kernel de ji bo hilanîna taybetmendiyên têkildar diyar kir. Dûv re ev hawîrdor dikare ji hêla modulên kernelê yên barkirî ve were bikar anîn da ku modela ewlehiyê ya xwestî bicîh bîne. LSM di 2.6 de bi tevahî ket kernel Linux v2003.

Di çarçoweya LSM de qadên parastinê di strukturên daneyê de vedihewîne û bang li fonksiyonên destgirtinê li xalên krîtîk ên koda kernelê dike da ku wan manipul bike û kontrola gihîştinê pêk bîne. Ew ji bo qeydkirina modulên ewlehiyê fonksiyonê jî zêde dike. Navbera /sys/kernel/ewlehî/lsm navnîşek modulên çalak ên li ser pergalê vedihewîne. Çêlikên LSM di navnîşên ku bi rêza ku di CONFIG_LSM de hatî destnîşan kirin de têne hilanîn. Belgekirina hûrgulî ya li ser çengan di pelê sernavê de tê de heye ku tê de/linux/lsm_hooks.h.

Binepergala LSM gengaz kir ku yekbûna tevahî ya SELinux-ê bi heman guhertoya kernel Linux-ê ya domdar v2.6 re temam bike. Hema hema yekser, SELinux bû standarda de facto ji bo hawîrdorek ewledar a Linux û di nav belavokên herî populer de cih girt: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

Ferhengoka SELinux

  • Nasname - Bikarhênerê SELinux ne wekî nasnameya bikarhênerê ya Unix/Linux-ê ye; ew dikarin li ser heman pergalê bi hev re bijîn, lê di eslê xwe de bi tevahî cûda ne. Her hesabê Linux-ê standard dikare bi yek an jî bêtir li SELinux re têkildar be. Nasnameya SELinux beşek ji çarçoveya ewlehiyê ya giştî ye, ku diyar dike ku hûn dikarin û nekarin beşdarî kîjan domên bibin.
  • Domains - Di SELinux-ê de, doman çarçoweya pêkanîna mijarekê ye, ango pêvajoyek. Domain rasterast gihîştina pêvajoyek diyar dike. Domain bi bingehîn navnîşek e ku pêvajo dikare çi bike an pêvajoyek dikare bi celebên cûda re çi bike. Hin mînakên domanan sysadm_t ji bo rêveberiya pergalê, û user_t ku domainek bikarhênerek ne-îmtiyaz normal e. Pergala destpêkê di qada init_t de, û pêvajoya binavkirî di domaina named_t de dimeşe.
  • Role - Ya ku di navbera domên û bikarhênerên SELinux de wekî navbeynkar kar dike. Rol diyar dike ku bikarhênerek dikare bibe xwediyê kîjan domanan û ew dikarin bigihîjin kîjan celeb tiştan. Ev mekanîzmaya kontrolkirina gihîştinê pêşî li metirsiya êrîşên zêdekirina îmtiyazê digire. Rol di modela ewlehiyê ya Kontrola Ketina Bingeha Rolê (RBAC) de têne nivîsandin ku di SELinux de tê bikar anîn.
  • Tiştên - Taybetmendiyek navnîşa Bicîhkirina Tîpa ku ji tiştekê re tê veqetandin û diyar dike ku kî dikare bigihîje wê. Mîna pênaseya domainê, ji bilî ku domain ji pêvajoyekê re derbas dibe, û celeb li tiştên wekî pelrêç, pel, soket û hwd derbas dibe.
  • Mijar û nesne - Pêvajo mijar in û di çarçoveyek taybetî, an qada ewlehiyê de têne meşandin. Çavkaniyên pergala xebitandinê: pel, peldank, soket, hwd., tiştên ku bi rengek diyarkirî têne destnîşan kirin, bi gotinek din, astek nepenîtiyê.
  • Polîtîkayên SELinux - SELinux ji bo parastina pergalê gelek polîtîkayan bikar tîne. Siyaseta SELinux gihandina bikarhêneran ji rolan, rolan li ser domanan, û domanan bi celeban diyar dike. Pêşîn, bikarhêner destûr e ku rolek bi dest bixe, dûv re rola destûr e ku bigihîje domanan. Di dawiyê de, domainek tenê dikare bigihîje hin celeb tiştan.

Mîmariya LSM û SELinux

Tevî navê, LSM bi gelemperî modulên Linux-ê yên barkirî ne. Lêbelê, mîna SELinux, ew rasterast di nav kernelê de tête yek kirin. Her guheztina koda çavkaniyê ya LSM berhevokek nû ya kernelê hewce dike. Vebijarka têkildar divê di mîhengên kernelê de were çalak kirin, wekî din koda LSM-ê piştî bootkirinê nayê çalak kirin. Lê tewra di vê rewşê de, ew dikare ji hêla vebijarka bootloader OS ve were çalak kirin.

Sîstemên ewlehiyê yên Linux
LSM pişka kontrolê

LSM di fonksiyonên kernelê yên bingehîn de bi çengelên ku dikarin ji bo kontrolê têkildar bin ve girêdayî ye. Yek ji taybetmendiyên sereke yên LSM-ê ev e ku ew li hev têne danîn. Bi vî rengî, kontrolên standard hîn jî têne kirin, û her qatek LSM tenê kontrol û kontrolên din zêde dike. Ev tê wê wateyê ku qedexe nayê paşve xistin. Ev di jimarê de tê xuyang kirin; heke encama kontrolên DAC-ê yên rûtîn têkçûn be, wê hingê mijar dê negihîje çîpên LSM jî.

SELinux mîmariya ewlehiya Flask ya pergala xebitandina lêkolîna Fluke, bi taybetî prensîba kêmtirîn îmtiyazê qebûl dike. Esasê vê têgehê, wekî ku navê wê diyar dike, ev e ku bikarhêner an pêvajoyê tenê wan mafên ku ji bo pêkanîna kiryarên armanckirî hewce ne bide. Ev prensîb bi karanîna nivîsandina gihîştina bi zorê tête bicîh kirin, ji ber vê yekê kontrola gihîştinê di SELinux de li ser bingeha modela domain => celebê ye.

Bi saya nivîsandina gihîştina bi zorê, SELinux ji modela kevneşopî ya DAC-ê ku di pergalên xebitandinê yên Unix/Linux de tê bikar anîn xwedan kapasîteyên kontrolkirina gihîştinê pir mezintir e. Mînakî, hûn dikarin jimareya porta torê ya ku servera ftp-ê pê ve girêdide bi sînor bike, destûr bide nivîsandin û guheztina pelan di peldankek diyar de, lê wan jê neke.

Parçeyên sereke yên SELinux ev in:

  • Siyaseta Enforcement Server - Mekanîzmaya sereke ya organîzekirina kontrola gihîştinê.
  • Databasa siyaseta ewlehiya pergalê.
  • Têkiliya bi navgîniya bûyera LSM re.
  • Selinuxfs - Pseudo-FS, eynî wekî /proc û li /sys/fs/selinux-ê hatî danîn. Di dema xebitandinê de bi dînamîk ji hêla kernel Linux ve tê tije kirin û pelên ku agahdariya statûya SELinux-ê vedihewîne hene.
  • Gihîştina Vector Cache - Mekanîzmayek alîkar ji bo zêdekirina hilberînê.

Sîstemên ewlehiyê yên Linux
SELinux çawa dixebite

Hemî bi vî rengî dixebite.

  1. Di şertên SELinux-ê de mijarek diyarkirî, wekî ku di wêneya jorîn de tê xuyang kirin, piştî kontrolkirina DAC-ê çalakiyek destûrkirî li ser tiştekê pêk tîne. Ev daxwaz ji bo pêkanîna operasyonê diçe navdêra bûyera LSM.
  2. Ji wir, daxwaz, digel mijara ewlehiyê ya mijar û nesnê, ji modula SELinux Abstraction û Hook Logic re tê şandin, ku berpirsiyarê danûstendina bi LSM-ê re ye.
  3. Desthilatdariya biryardayînê ya li ser gihandina mijarekê ji bo tiştekê Pêşkêşkara Pêkanîna Polîtîkayê ye û ew daneyan ji SELinux AnHL distîne.
  4. Ji bo ku di derheqê gihîştin an redkirinê de biryar bide, Servera Pêkanîna Polîtîkayê ji bo qaîdeyên ku herî zêde têne bikar anîn vedigere binepergala cache Vector Cache (AVC).
  5. Ger çareseriyek ji bo qaîdeya têkildar di cache de neyê dîtin, wê hingê daxwaz ji databasa siyaseta ewlehiyê re derbas dibe.
  6. Encama lêgerînê ya ji databasê û AVC-ê vedigere Servera Pêkanîna Polîtîkayê.
  7. Ger sîyaseta hatî dîtin bi çalakiya daxwazkirî re têkildar be, wê hingê operasyon destûr e. Wekî din, operasyon qedexe ye.

Birêvebirina Mîhengên SELinux

SELinux di yek ji sê awayan de dixebite:

  • Bicîhkirin - Pabendbûna hişk bi polîtîkayên ewlehiyê.
  • Destûr - Binpêkirina qedexeyan destûr e; di rojnameyê de têbînîyek têkildar tê çêkirin.
  • Astengdar - Polîtîkayên ewlehiyê ne di meriyetê de ne.

Hûn dikarin bi fermana jêrîn bibînin ka SELinux di kîjan modê de ye.

[admin@server ~]$ getenforce
Permissive

Guhertina modê berî ji nû ve destpêkirinê, mînakî, danîna wê li ser bicîhkirinê, an 1. Parametreya destûr bi koda hejmarî 0 re têkildar e.

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

Hûn dikarin bi guherandina pelê jî modê biguherînin:

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

Cûdahiya bi setenfoce ev e ku dema ku pergala xebitandinê dest pê dike, moda SELinux dê li gorî nirxa pîvana SELINUX di pelê veavakirinê de were saz kirin. Ji bilî vê, guhertinên ji bo sepandina <=> neçalakkirî tenê bi guherandina pelê /etc/selinux/config û piştî ji nû ve destpêkirinê bandor dibin.

Raporek rewşa kurt bibînin:

[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

Ji bo dîtina taybetmendiyên SELinux, hin karûbarên standard pîvana -Z bikar tînin.

[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

Li gorî hilberîna normal a ls -l, di forma jêrîn de çend qadên din hene:

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

Qada paşîn tiştek wekî dabeşkirina ewlehiyê destnîşan dike û ji du hêmanan pêk tê:

  • s0 - girîngî, di heman demê de wekî navbera asta nizm-bilind jî tê nivîsandin
  • c0, c1… c1023 - kategori.

Guhertina veavakirina gihîştinê

Ji bo barkirin, lê zêdekirin û rakirina modulên SELinux semodule bikar bînin.

[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îma yekem semanage login bikarhênerê SELinux bi bikarhênerê pergala xebitandinê ve girêdide, ya duyemîn navnîşek nîşan dide. Di dawiyê de, fermana paşîn a bi guhertoya -r nexşeya bikarhênerên SELinux ji hesabên OS-ê re radike. Ravekirina hevoksaziya ji bo nirxên MLS / MCS Range di beşa berê de ye.

[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îma bikarhênerê semanage ji bo birêvebirina nexşeyan di navbera bikarhêner û rolên SELinux de tê bikar anîn.

[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

Parametreyên fermanê:

  • -têketina nexşeya rola xwerû ya xwerû;
  • -l navnîşa bikarhêner û rolên lihevhatî;
  • -d têketina nexşeya rola bikarhêner jêbirin;
  • -R lîsteya rolên ku bi bikarhêner ve girêdayî ye;

Pelên, Ports û Nirxên Boolean

Her modulek SELinux komek qaîdeyên nîşankirina pelan peyda dike, lê ger hewce be hûn dikarin qaîdeyên xwe jî zêde bikin. Mînakî, em dixwazin ku servera webê xwediyê mafên gihîştina peldanka /srv/www be.

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

Fermana yekem qaîdeyên nîşankirinê yên nû tomar dike, û ya duyemîn li gorî qaîdeyên heyî celebên pelan ji nû ve saz dike, an jî bi cîh dike.

Di heman demê de, portên TCP / UDP bi vî rengî têne nîşankirin ku tenê karûbarên guncan dikarin li wan guhdarî bikin. Mînakî, ji bo ku servera malperê li porta 8080 guhdarî bike, hûn hewce ne ku emrê bişopînin.

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

Hejmarek girîng a modulên SELinux xwedan parametreyên ku dikarin nirxên Boolean bigirin hene. Tevahiya navnîşa van pîvanan dikare bi karanîna getsebool -a were dîtin. Hûn dikarin bi karanîna setsebool nirxên boolean biguhezînin.

[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

Atolye, xwe bigihînin pêwendiya Pgadmin-webê

Ka em li mînakek pratîkî binêrin: me pgadmin7.6-web li ser RHEL 4 saz kir da ku databasa PostgreSQL birêve bibe. Em hinekî meşiyan gerr bi mîhengên pg_hba.conf, postgresql.conf û config_local.py, destûrên peldankê saz bikin, modulên Python ên winda ji pip saz kirin. Her tişt amade ye, em dest pê dikin û distînin 500 Çewtiya Servera Navxweyî.

Sîstemên ewlehiyê yên Linux

Em bi gumanbarên tîpîk dest pê dikin, /var/log/httpd/error_log kontrol dikin. Li wir hin navnîşên balkêş hene.

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

Di vê nuqteyê de, piraniya rêveberên Linux-ê dê bi tundî werin ceribandin ku setencorce 0 bimeşînin, û ew ê dawiya wê be. Bi rastî, min yekem car wusa kir. Ev jî bê guman rêyek e, lê ji ya çêtirîn dûr e.

Tevî sêwiranên giran, SELinux dikare bikarhêner-heval be. Tenê pakêta setroubleshoot saz bikin û têketina pergalê bibînin.

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

Ji kerema xwe not bikin ku karûbarê kontrolkirî divê bi vî rengî ji nû ve were destpêkirin, û tevî hebûna systemd di OS-ê de, systemctl neyê bikar anîn. Di têketina pergalê de dê bêne nîşan kirin ne tenê rastiya astengkirinê, di heman demê de sedem û rê ji bo derbaskirina qedexeyê.

Sîstemên ewlehiyê yên Linux

Em van fermanan pêk tînin:

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

Em gihîştina malpera pgadmin4-web kontrol dikin, her tişt dixebite.

Sîstemên ewlehiyê yên Linux

Sîstemên ewlehiyê yên Linux

Source: www.habr.com

Add a comment