Linux sekuriteitstelsels

Een van die redes vir die geweldige sukses van die Linux-bedryfstelsel op ingebedde, mobiele toestelle en bedieners is die redelik hoë mate van sekuriteit van die kern, verwante dienste en toepassings. Maar as kyk van naderby na die argitektuur van die Linux-kern, dan is dit onmoontlik om 'n vierkant daarin te vind wat verantwoordelik is vir sekuriteit as sodanig. Waar skuil die Linux-sekuriteitsubstelsel en waaruit bestaan ​​dit?

Agtergrond oor Linux Security Modules en SELinux

Security Enhanced Linux is 'n stel reëls en toegangsmeganismes gebaseer op verpligte en rolgebaseerde toegangsmodelle om Linux-stelsels teen potensiële bedreigings te beskerm en die tekortkominge van Discretionary Access Control (DAC), die tradisionele Unix-sekuriteitstelsel, reg te stel. Die projek het sy oorsprong in die ingewande van die Amerikaanse Nasionale Veiligheidsagentskap, en is direk ontwikkel hoofsaaklik deur kontrakteurs Secure Computing Corporation en MITER, sowel as 'n aantal navorsingslaboratoriums.

Linux sekuriteitstelsels
Linux sekuriteitsmodules

Linus Torvalds het 'n aantal opmerkings oor nuwe NSA-ontwikkelings gemaak sodat dit by die hooflyn Linux-kern ingesluit kan word. Hy het 'n algemene omgewing beskryf, met 'n stel onderskeppers om bedrywighede met voorwerpe te beheer en 'n stel sekere beskermende velde in kerndatastrukture om die ooreenstemmende eienskappe te stoor. Hierdie omgewing kan dan deur laaibare kernmodules gebruik word om enige gewenste sekuriteitsmodel te implementeer. LSM het die Linux-kern v2.6 volledig in 2003 ingeskryf.

Die LSM-raamwerk sluit wagvelde in datastrukture en oproepe tot onderskeppingsfunksies by kritieke punte in die kernkode in om dit te manipuleer en toegangsbeheer uit te voer. Dit voeg ook funksionaliteit by om sekuriteitsmodules te registreer. Die /sys/kernel/security/lsm-koppelvlak bevat 'n lys van aktiewe modules op die stelsel. LSM-hake word gestoor in lyste wat in die volgorde gespesifiseer in CONFIG_LSM geroep word. Gedetailleerde dokumentasie oor hake is ingesluit in die koplêer include/linux/lsm_hooks.h.

Die LSM-substelsel het dit moontlik gemaak om die volle integrasie van SELinux met dieselfde weergawe van die stabiele Linux-kern v2.6 te voltooi. Byna onmiddellik het SELinux die de facto-standaard vir 'n veilige Linux-omgewing geword en is ingesluit in die gewildste verspreidings: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

SELinux Woordelys

  • Identiteit — Die SELinux-gebruiker is nie dieselfde as die gewone Unix/Linux-gebruiker-ID nie; hulle kan saam op dieselfde stelsel bestaan, maar is in wese heeltemal anders. Elke standaard Linux-rekening kan ooreenstem met een of meer in SELinux. Die SELinux-identiteit is deel van die algehele sekuriteitskonteks, wat bepaal by watter domeine jy kan aansluit en nie kan aansluit nie.
  • Domain - In SELinux is 'n domein die uitvoeringskonteks van 'n onderwerp, dit wil sê 'n proses. Die domein bepaal direk die toegang wat 'n proses het. 'n Domein is basies 'n lys van wat prosesse kan doen of wat 'n proses met verskillende tipes kan doen. Enkele voorbeelde van domeine is sysadm_t vir stelseladministrasie, en user_t wat 'n normale nie-bevoorregte gebruikersdomein is. Die init-stelsel loop in die init_t-domein, en die genoemde proses loop in die named_t-domein.
  • rol — Wat dien as 'n tussenganger tussen domeine en SELinux-gebruikers. Rolle bepaal aan watter domeine 'n gebruiker kan behoort en tot watter tipe voorwerpe hulle toegang het. Hierdie toegangsbeheermeganisme voorkom die dreigement van aanvalle op voorregte-eskalasie. Rolle word in die Rolgebaseerde Toegangsbeheer (RBAC) sekuriteitsmodel wat in SELinux gebruik word, geskryf.
  • Tipes — 'n Tipe-afdwingingslyskenmerk wat aan 'n objek toegeken word en bepaal wie toegang daartoe het. Soortgelyk aan die domeindefinisie, behalwe dat die domein van toepassing is op 'n proses, en tipe is van toepassing op voorwerpe soos gidse, lêers, voetstukke, ens.
  • Onderwerpe en voorwerpe - Prosesse is vakke en loop in 'n spesifieke konteks, of sekuriteitsdomein. Bedryfstelselhulpbronne: lêers, gidse, voetstukke, ens., is voorwerpe wat 'n sekere tipe toegeken word, met ander woorde, 'n privaatheidsvlak.
  • SELinux-beleide — SELinux gebruik 'n verskeidenheid beleide om die stelsel te beskerm. Die SELinux-beleid definieer die toegang van gebruikers tot rolle, rolle tot domeine en domeine tot tipes. Eerstens word die gebruiker gemagtig om 'n rol te verkry, dan word die rol gemagtig om toegang tot domeine te verkry. Laastens kan 'n domein slegs toegang tot sekere soorte voorwerpe hê.

LSM en die SELinux-argitektuur

Ten spyte van die naam, is LSM's nie oor die algemeen laaibare Linux-modules nie. Soos SELinux, is dit egter direk in die kern geïntegreer. Enige verandering aan die LSM-bronkode vereis 'n nuwe kernsamestelling. Die ooreenstemmende opsie moet in die kerninstellings geaktiveer word, anders sal die LSM-kode nie na selflaai geaktiveer word nie. Maar selfs in hierdie geval kan dit geaktiveer word deur die OS selflaaiprogram opsie.

Linux sekuriteitstelsels
LSM-tjekstapel

LSM is toegerus met hake in kern kernfunksies wat relevant kan wees vir tjeks. Een van die hoofkenmerke van LSM'e is dat hulle gestapel is. Die standaardkontroles word dus steeds uitgevoer, en elke laag LSM voeg slegs bykomende kontroles en kontroles by. Dit beteken dat die verbod nie teruggerol kan word nie. Dit word in die figuur getoon; as die resultaat van roetine DAC-kontroles 'n mislukking is, sal die saak nie eers die LSM-hake bereik nie.

SELinux neem die Flask-sekuriteitsargitektuur van die Fluke-navorsingsbedryfstelsel aan, veral die beginsel van minste voorreg. Die essensie van hierdie konsep, soos die naam aandui, is om die gebruiker of verwerk slegs daardie regte toe te staan ​​wat nodig is om die beoogde aksies uit te voer. Hierdie beginsel word geïmplementeer deur gebruik te maak van gedwonge toegangstik, dus is toegangsbeheer in SELinux gebaseer op die domein => tipe model.

Danksy gedwonge toegangstik het SELinux baie groter toegangsbeheervermoëns as die tradisionele DAC-model wat in Unix/Linux-bedryfstelsels gebruik word. Byvoorbeeld, jy kan die netwerkpoortnommer waaraan die ftp-bediener sal koppel, beperk, toelaat om lêers in 'n sekere vouer te skryf en te verander, maar dit nie uitvee nie.

Die hoofkomponente van SELinux is:

  • Beleidshandhawingsbediener — Die hoofmeganisme om toegangsbeheer te organiseer.
  • Stelsel sekuriteit beleid databasis.
  • Interaksie met die LSM-gebeurtenis-onderskepper.
  • Selinuxfs - Pseudo-FS, dieselfde as /proc en gemonteer in /sys/fs/selinux. Dinamies bevolk deur die Linux-kern tydens looptyd en bevat lêers wat SELinux-statusinligting bevat.
  • Toegang tot Vector Cache — 'n Hulpmeganisme om produktiwiteit te verhoog.

Linux sekuriteitstelsels
Hoe SELinux werk

Dit werk alles so.

  1. 'n Sekere onderwerp, in SELinux-terme, voer 'n toegelate aksie op 'n voorwerp uit na 'n DAC-kontrole, soos in die boonste prentjie getoon. Hierdie versoek om 'n operasie uit te voer gaan na die LSM-gebeurtenisonderskepper.
  2. Van daar af word die versoek, saam met die onderwerp- en objek-sekuriteitskonteks, oorgedra na die SELinux Abstraksie en Hook Logic-module, wat verantwoordelik is vir interaksie met die LSM.
  3. Die besluitnemingsgesag oor 'n subjek se toegang tot 'n objek is die Beleidstoepassingsbediener en dit ontvang data van SELinux AnHL.
  4. Om besluite oor toegang of ontkenning te neem, wend die Beleidshandhawingsbediener na die Access Vector Cache (AVC) cache-substelsel vir die mees gebruikte reëls.
  5. As 'n oplossing vir die ooreenstemmende reël nie in die kas gevind word nie, word die versoek na die sekuriteitsbeleiddatabasis deurgegee.
  6. Die soekresultaat van die databasis en AVC word teruggestuur na die Beleidstoepassingsbediener.
  7. As die beleid wat gevind is, ooreenstem met die versoekte handeling, word die bewerking toegelaat. Andersins is die operasie verbied.

Bestuur SELinux-instellings

SELinux werk in een van drie modusse:

  • Handhawing - Streng nakoming van sekuriteitsbeleide.
  • Permissief - Oortreding van beperkings word toegelaat; 'n ooreenstemmende nota word in die joernaal gemaak.
  • Gedeaktiveer—Sekuriteitsbeleide is nie in werking nie.

Jy kan sien in watter modus SELinux is met die volgende opdrag.

[admin@server ~]$ getenforce
Permissive

Verandering van die modus voor herselflaai, byvoorbeeld, stel dit op afdwing, of 1. Die permissiewe parameter stem ooreen met die numeriese kode 0.

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

Jy kan ook die modus verander deur die lêer te wysig:

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

Die verskil met setenfoce is dat wanneer die bedryfstelsel begin, die SELinux-modus ingestel sal word in ooreenstemming met die waarde van die SELINUX-parameter in die konfigurasielêer. Daarbenewens word veranderinge aan die afdwing van <=> gedeaktiveerde slegs in werking getree deur die /etc/selinux/config-lêer te wysig en na 'n herlaai.

Kyk na 'n kort statusverslag:

[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-kenmerke te sien, gebruik sommige standaardhulpprogramme die -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

In vergelyking met die normale uitvoer van ls -l, is daar verskeie bykomende velde in die volgende formaat:

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

Die laaste veld dui iets soos 'n sekuriteitsklassifikasie aan en bestaan ​​uit 'n kombinasie van twee elemente:

  • s0 - betekenis, ook geskryf as laevlak-hoëvlakinterval
  • c0, c1… c1023 - kategorie.

Verander toegangsopstelling

Gebruik semodule om SELinux-modules te laai, by te voeg en te verwyder.

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

Eerste span semanage-aanmelding verbind die SELinux-gebruiker aan die bedryfstelselgebruiker, die tweede vertoon 'n lys. Laastens, die laaste opdrag met die -r-skakelaar verwyder die kartering van SELinux-gebruikers na OS-rekeninge. 'n Verduideliking van die sintaksis vir MLS/MCS-reekswaardes is in die vorige afdeling.

[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

Span semanage gebruiker gebruik om kartering tussen SELinux-gebruikers en rolle te bestuur.

[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

Opdrag parameters:

  • -a voeg pasgemaakte rolkarteringinskrywing by;
  • -l lys van ooreenstemmende gebruikers en rolle;
  • -d verwyder gebruiker rol kartering inskrywing;
  • -R lys van rolle verbonde aan die gebruiker;

Lêers, poorte en Boole-waardes

Elke SELinux-module verskaf 'n stel lêermerkreëls, maar jy kan ook jou eie reëls byvoeg indien nodig. Ons wil byvoorbeeld hê dat die webbediener toegangsregte tot die /srv/www-lêergids moet hê.

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

Die eerste opdrag registreer nuwe merkreëls, en die tweede stel die lêertipes in ooreenstemming met die huidige reëls terug, of liewer stel.

Net so is TCP/UDP-poorte so gemerk dat slegs die toepaslike dienste daarna kan luister. Byvoorbeeld, om die webbediener op poort 8080 te laat luister, moet jy die opdrag uitvoer.

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

'n Beduidende aantal SELinux-modules het parameters wat Boole-waardes kan neem. Die hele lys van sulke parameters kan gesien word met getsebool -a. Jy kan Boolese waardes verander met behulp van 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

Werkswinkel, kry toegang tot die Pgadmin-webkoppelvlak

Kom ons kyk na 'n praktiese voorbeeld: ons het pgadmin7.6-web op RHEL 4 geïnstalleer om die PostgreSQL-databasis te administreer. Ons het bietjie gestap Quest met die instellings van pg_hba.conf, postgresql.conf en config_local.py, stel vouertoestemmings in, het die ontbrekende Python-modules vanaf pip geïnstalleer. Alles is gereed, ons loods en ontvang 500 Interne Bediener Fout.

Linux sekuriteitstelsels

Ons begin met die tipiese verdagtes, kyk /var/log/httpd/error_log. Daar is 'n paar interessante inskrywings daar.

[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 hierdie stadium sal die meeste Linux-administrateurs sterk in die versoeking kom om setencorce 0 uit te voer, en dit sal die einde daarvan wees. Eerlik gesê, ek het dit die eerste keer gedoen. Dit is natuurlik ook 'n uitweg, maar ver van die beste.

Ten spyte van die omslagtige ontwerpe, kan SELinux gebruikersvriendelik wees. Installeer net die setroubleshoot-pakket en bekyk die stelsellogboek.

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

Neem asseblief kennis dat die ouditdiens op hierdie manier herbegin moet word, en nie systemctl gebruik nie, ten spyte van die teenwoordigheid van systemd in die bedryfstelsel. In die stelsel log aangedui sal word nie net die feit van blokkering nie, maar ook die rede en manier om die verbod te oorkom.

Linux sekuriteitstelsels

Ons voer hierdie opdragte uit:

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

Ons kontroleer toegang tot die pgadmin4-webblad, alles werk.

Linux sekuriteitstelsels

Linux sekuriteitstelsels

Bron: will.com

Voeg 'n opmerking