Linux feiligens systemen

Ien fan 'e redenen foar it geweldige súkses fan' e Linux OS op ynbêde, mobile apparaten en servers is de frij hege graad fan feiligens fan 'e kernel, relatearre tsjinsten en applikaasjes. Mar as sjoch in tichterby nei de arsjitektuer fan 'e Linux-kernel, dan is it ûnmooglik om dêr in plein yn te finen dat ferantwurdlik is foar feiligens as sadanich. Wêr ferberget it Linux-befeiligingssubsysteem en wêrút bestiet it?

Eftergrûn op Linux Feiligensmodules en SELinux

Feiligens Enhanced Linux is in set fan regels en tagongsmeganismen basearre op ferplichte en rol-basearre tagongsmodellen om Linux-systemen te beskermjen tsjin potinsjele bedrigingen en de tekoarten fan Discretionary Access Control (DAC), it tradisjonele Unix-befeiligingssysteem, te korrigearjen. It projekt ûntstie yn 'e darm fan' e Amerikaanske Nasjonale Feiligens Agency, en waard direkt ûntwikkele benammen troch oannimmers Secure Computing Corporation en MITER, lykas ek in oantal ûndersyk laboratoariums.

Linux feiligens systemen
Linux Feiligens Modules

Linus Torvalds makke in oantal opmerkingen oer nije NSA-ûntwikkelingen, sadat se opnommen wurde kinne yn 'e mainline Linux-kernel. Hy beskreau in algemiene omjouwing, mei in set fan interceptors om operaasjes te kontrolearjen mei objekten en in set fan bepaalde beskermjende fjilden yn kernelgegevensstruktueren om de oerienkommende attributen op te slaan. Dizze omjouwing kin dan brûkt wurde troch laden kernelmodules om elk winske befeiligingsmodel út te fieren. LSM kaam folslein yn 'e Linux kernel v2.6 yn 2003.

It LSM-ramt omfettet wachtfjilden yn gegevensstruktueren en ropt nei ûnderskeppingsfunksjes op krityske punten yn 'e kernelkoade om se te manipulearjen en tagongskontrôle út te fieren. It foeget ek funksjonaliteit ta foar it registrearjen fan befeiligingsmodules. De ynterface /sys/kernel/security/lsm befettet in list mei aktive modules op it systeem. LSM heakjes wurde opslein yn listen dy't neamd wurde yn de folchoarder spesifisearre yn CONFIG_LSM. Detaillearre dokumintaasje op heakjes is opnaam yn de koptekst triem include/linux/lsm_hooks.h.

It LSM-subsysteem makke it mooglik om de folsleine yntegraasje fan SELinux te foltôgjen mei deselde ferzje fan 'e stabile Linux kernel v2.6. Hast fuortendaliks waard SELinux de de facto standert foar in feilige Linux-omjouwing en waard opnommen yn 'e populêrste distribúsjes: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

SELinux Glossary

  • Identiteit - De SELinux-brûker is net itselde as de gewoane Unix/Linux-brûkers-id; se kinne tegearre bestean op itselde systeem, mar binne yn essinsje folslein oars. Elk standert Linux-akkount kin oerienkomme mei ien of mear yn SELinux. De SELinux-identiteit is diel fan 'e algemiene feiligenskontekst, dy't bepaalt hokker domeinen jo kinne en kinne net meidwaan.
  • Domeinen - Yn SELinux is in domein de útfieringskontekst fan in ûnderwerp, dus in proses. It domein bepaalt direkt de tagong dy't in proses hat. In domein is yn prinsipe in list fan wat prosessen kinne dwaan of wat in proses kin dwaan mei ferskate soarten. Guon foarbylden fan domeinen binne sysadm_t foar systeemadministraasje, en user_t dat in normaal net-privilegearre brûkersdomein is. It init-systeem rint yn it init_t-domein, en it neamde proses rint yn it named_t-domein.
  • Rollen - Wat tsjinnet as tuskenpersoan tusken domeinen en SELinux-brûkers. Rollen bepale hokker domeinen in brûker kin hearre en hokker soarten objekten se tagong hawwe. Dit tagongskontrôlemeganisme foarkomt de bedriging fan oanfallen fan privileezje-eskalaasje. Rollen wurde skreaun yn it Role Based Access Control (RBAC) befeiligingsmodel brûkt yn SELinux.
  • Soarten - In Type Enforcement list attribút dat wurdt tawiisd oan in objekt en bepaalt wa't kin tagong ta it. Fergelykber mei de domeindefinysje, útsein dat domein jildt foar in proses, en type jildt foar objekten lykas mappen, bestannen, sockets, ensfh.
  • Underwerpen en objekten - Prosessen binne ûnderwerpen en rinne yn in spesifike kontekst, as befeiligingsdomein. Bestjoeringssysteemboarnen: bestannen, mappen, sockets, ensfh., binne objekten dy't in bepaald type wurde tawiisd, mei oare wurden, in privacynivo.
  • SELinux Belied - SELinux brûkt in ferskaat oan belied om it systeem te beskermjen. It SELinux-belied definiearret de tagong fan brûkers ta rollen, rollen nei domeinen, en domeinen ta typen. Earst is de brûker autorisearre om in rol te krijen, dan is de rol autorisearre om tagong te krijen ta domeinen. Uteinlik kin in domein allinich tagong hawwe ta bepaalde soarten objekten.

LSM en SELinux arsjitektuer

Nettsjinsteande de namme binne LSM's net oer it algemien laden Linux-modules. Lykwols, lykas SELinux, is it direkt yntegreare yn 'e kernel. Elke feroaring oan 'e LSM-boarnekoade fereasket in nije kernel-kompilaasje. De oerienkommende opsje moat ynskeakele wurde yn 'e kernelynstellingen, oars sil de LSM-koade net aktivearre wurde nei it opstarten. Mar sels yn dit gefal kin it ynskeakele wurde troch de OS-bootloader-opsje.

Linux feiligens systemen
LSM check stack

LSM is foarsjoen fan heakken yn kearn kernel funksjes dy't kin wêze relevant foar kontrôles. Ien fan 'e wichtichste skaaimerken fan LSM's is dat se wurde steapele. Sa wurde de standertkontrôles noch útfierd, en elke laach fan LSM foeget allinich ekstra kontrôles en kontrôles ta. Dat betsjut dat it ferbod net weromdraaid wurde kin. Dit wurdt werjûn yn 'e figuer; as it resultaat fan routine DAC-kontrôles in mislearring is, dan sil de saak net iens de LSM-haken berikke.

SELinux nimt de Flask-befeiligingsarsjitektuer oan fan it Fluke-ûndersyksbestjoeringssysteem, benammen it prinsipe fan minste privileezje. De essinsje fan dit konsept, lykas de namme al fermoeden docht, is om de brûker of te ferwurkjen allinich de rjochten dy't nedich binne om de bedoelde aksjes út te fieren. Dit prinsipe wurdt ymplementearre mei it typen fan twongen tagong, sadat tagongskontrôle yn SELinux is basearre op it domein => type model.

Mei tank oan typen fan twongen tagong hat SELinux folle gruttere tagongskontrôlemooglikheden dan it tradisjonele DAC-model dat brûkt wurdt yn Unix/Linux-bestjoeringssystemen. Jo kinne bygelyks it netwurkpoartenûmer beheine wêrmei de ftp-tsjinner ferbine sil, it skriuwen en feroarjen fan bestannen yn in bepaalde map tastean, mar se net wiskje.

De haadkomponinten fan SELinux binne:

  • Belied Hanthavenjen Server - It wichtichste meganisme foar it organisearjen fan tagongskontrôle.
  • Systeem feiligens belied databank.
  • Ynteraksje mei de LSM evenemint interceptor.
  • Selinuxfs - Pseudo-FS, itselde as /proc en monteard yn /sys/fs/selinux. Dynamysk befolke troch de Linux kernel by runtime en befetsje triemmen mei SELinux status ynformaasje.
  • Tagong ta Vector Cache - In helpmeganisme foar it fergrutsjen fan produktiviteit.

Linux feiligens systemen
Hoe SELinux wurket

It wurket allegear sa.

  1. In bepaald ûnderwerp, yn termen fan SELinux, fiert in tastiene aksje op in objekt nei in DAC-kontrôle, lykas werjûn yn 'e boppeste ôfbylding. Dit fersyk om in operaasje út te fieren giet nei de LSM-evenemintinterceptor.
  2. Fan dêrút wurdt it fersyk, tegearre mei de kontekst fan ûnderwerp en objektfeiligens, trochjûn oan de SELinux Abstraksje en Hook Logic module, dy't ferantwurdlik is foar ynteraksje mei de LSM.
  3. De beslútfoarmjende autoriteit oer de tagong fan in ûnderwerp ta in objekt is de Beliedshanthaveningstsjinner en it ûntfangt gegevens fan SELinux AnHL.
  4. Om besluten te nimmen oer tagong of ûntkenning, draait beliedshanthaveningstsjinner nei it caching-subsysteem Access Vector Cache (AVC) foar de meast brûkte regels.
  5. As in oplossing foar de oerienkommende regel net fûn wurdt yn 'e cache, dan wurdt it fersyk trochjûn oan de databank foar feiligensbelied.
  6. It sykresultaat fan 'e databank en AVC wurdt weromjûn nei de Beliedshanthaveningstsjinner.
  7. As it fûn belied oerienkomt mei de frege aksje, dan is de operaasje tastien. Oars, de operaasje is ferbean.

SELinux-ynstellingen beheare

SELinux wurket yn ien fan trije modi:

  • Hanthavenjen - Strikt neilibjen fan feiligensbelied.
  • Permissive - Skeining fan beheiningen is tastien; in oerienkommende notysje wurdt makke yn it tydskrift.
  • Utskeakele - Feiligensbelied is net yn wurking.

Jo kinne sjen yn hokker modus SELinux is mei it folgjende kommando.

[admin@server ~]$ getenforce
Permissive

It feroarjen fan de modus foar it opnij opstarten, bygelyks, it ynstellen om te hanthavenjen, of 1. De permissive parameter komt oerien mei de numerike koade 0.

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

Jo kinne de modus ek feroarje troch it bestân te bewurkjen:

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

It ferskil mei setenfoce is dat as it bestjoeringssysteem opstart, sil de SELinux-modus ynsteld wurde yn oerienstimming mei de wearde fan 'e SELINUX-parameter yn it konfiguraasjetriem. Dêrnjonken binne wizigingen foar it hanthavenjen fan <=> útskeakele allinich effekt troch it bewurkjen fan it /etc/selinux/config-bestân en nei in herstart.

Besjoch in koart statusrapport:

[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

Om SELinux-attributen te besjen, brûke guon standert nutsbedriuwen de -Z-parameter.

[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

Yn ferliking mei de normale útfier fan ls -l binne d'r ferskate ekstra fjilden yn it folgjende formaat:

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

It lêste fjild jout wat oan as in feiligensklassifikaasje en bestiet út in kombinaasje fan twa eleminten:

  • s0 - betsjutting, ek skreaun as leechnivo-hege nivo ynterval
  • c0, c1… c1023 - kategory.

Feroarje tagong konfiguraasje

Brûk semodule om SELinux-modules te laden, ta te foegjen en te ferwiderjen.

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

Earste team semanage login ferbynt de SELinux-brûker mei de brûker fan it bestjoeringssysteem, de twadde toant in list. Uteinlik ferwideret it lêste kommando mei de -r-skeakel de mapping fan SELinux-brûkers nei OS-akkounts. In útlis fan 'e syntaksis foar MLS / MCS Range wearden is yn' e foarige seksje.

[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 brûker brûkt om mappings te behearjen tusken SELinux-brûkers en rollen.

[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

Kommando parameters:

  • -a tafoegje oanpaste rol mapping yngong;
  • -l list mei oerienkommende brûkers en rollen;
  • -d yngong foar mapping fan brûkersrol wiskje;
  • -R list mei rollen ferbûn oan de brûker;

Bestannen, havens en Booleaanske wearden

Elke SELinux-module leveret in set regels foar bestannen foar tagging, mar jo kinne ek jo eigen regels tafoegje as it nedich is. Wy wolle bygelyks dat de webserver tagongsrjochten hat foar de map /srv/www.

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

It earste kommando registrearret nije markearringsregels, en it twadde reset, of leaver set, de triemtypen yn oerienstimming mei de hjoeddeistige regels.

Likemin binne TCP / UDP-poarten markearre op sa'n manier dat allinich de passende tsjinsten derop harkje kinne. Bygelyks, om de webserver te harkjen op poarte 8080, moatte jo it kommando útfiere.

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

In signifikant oantal SELinux-modules hawwe parameters dy't Booleaanske wearden kinne nimme. De folsleine list fan sokke parameters kin sjoen wurde mei getsebool -a. Jo kinne Booleaanske wearden feroarje mei 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

Workshop, krije tagong ta de Pgadmin-webynterface

Litte wy nei in praktysk foarbyld sjen: wy hawwe pgadmin7.6-web ynstalleare op RHEL 4 om de PostgreSQL-database te behearjen. Wy rûnen in bytsje speurtocht mei de ynstellings fan pg_hba.conf, postgresql.conf en config_local.py, set map tagongsrjochten, ynstallearre de ûntbrekkende Python modules út pip. Alles is klear, wy lansearje en ûntfange 500 Ynterne tsjinner flater.

Linux feiligens systemen

Wy begjinne mei de typyske fertochten, kontrolearje /var/log/httpd/error_log. Der binne wat nijsgjirrige ynstjoerings dêr.

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

Op dit punt sille de measte Linux-behearders sterk oanstriid wurde om setencorce 0 út te fieren, en dat sil it ein wêze. Earlik sein, ik die krekt dat de earste kear. Dit is fansels ek in útwei, mar fier fan de bêste.

Nettsjinsteande de omslachtige ûntwerpen kin SELinux brûkerfreonlik wêze. Ynstallearje gewoan it pakket setroubleshoot en besjoch it systeemlogboek.

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

Tink derom dat de auditd-tsjinst op dizze manier opnij starte moat, en net mei systemctl, nettsjinsteande de oanwêzigens fan systemd yn it OS. Yn it systeem log sil oanjûn wurde net allinnich it feit fan blocking, mar ek de reden en manier om it ferbod te oerwinnen.

Linux feiligens systemen

Wy fiere dizze kommando's út:

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

Wy kontrolearje tagong ta de webside pgadmin4-webside, alles wurket.

Linux feiligens systemen

Linux feiligens systemen

Boarne: www.habr.com

Add a comment