Linux segurtasun sistemak

Gailu mugikorretan eta txertatutako zerbitzarietan Linux OS-ak arrakasta izugarriaren arrazoietako bat nukleoaren, erlazionatutako zerbitzuen eta aplikazioen segurtasun maila nahiko altua da. Baina bada gertutik begiratu Linux kernelaren arkitekturara, orduan ezinezkoa da bertan segurtasunaren ardura duen plazarik aurkitzea. Non ezkutatzen da Linux segurtasun azpisistema eta zertan datza?

Linux segurtasun moduluen eta SELinux-en aurrekariak

Security Enhanced Linux derrigorrezko eta roletan oinarritutako sarbide-ereduetan oinarritutako arau eta sarbide-mekanismo multzo bat da, Linux sistemak balizko mehatxuetatik babesteko eta Discretionary Access Control (DAC), Unix-en segurtasun-sistema tradizionalaren gabeziak zuzentzeko. Proiektua AEBetako Segurtasun Agentzia Nazionalaren erraietan sortu zen, eta zuzenean garatu zuten, batez ere, Secure Computing Corporation eta MITRE kontratistek, baita ikerketa laborategi batzuek ere.

Linux segurtasun sistemak
Linux segurtasun moduluak

Linus Torvaldsek hainbat iruzkin egin zituen NSAren garapen berriei buruz, Linux nukleo nagusian sartu ahal izateko. Ingurune orokor bat deskribatu zuen, objektuekin eragiketak kontrolatzeko atzemate-multzo batekin eta nukleoko datu-egituretako babes-eremu jakin batzuekin dagozkien atributuak gordetzeko. Ondoren, ingurune hau kernel-modulu kargagarriek erabil dezakete nahi den segurtasun-eredua ezartzeko. LSM Linux kernel v2.6 guztiz sartu zen 2003an.

LSM esparruak datu-egituretan babes-eremuak eta nukleoaren kodeko puntu kritikoetan atzemate-funtzioetarako deiak biltzen ditu haiek manipulatzeko eta sarbide-kontrola egiteko. Segurtasun moduluak erregistratzeko funtzionaltasuna ere gehitzen du. /sys/kernel/security/lsm interfazeak sistemako modulu aktiboen zerrenda dauka. LSM amuak CONFIG_LSMn zehaztutako ordenan deitzen diren zerrendetan gordetzen dira. Hookei buruzko dokumentazio zehatza include/linux/lsm_hooks.h goiburuko fitxategian sartzen da.

LSM azpisistemak SELinux-en integrazio osoa osatzea ahalbidetu zuen Linux kernel egonkorraren v2.6 bertsio berarekin. Ia berehala, SELinux Linux ingurune seguru baten de facto estandar bihurtu zen eta banaketa ezagunenetan sartu zen: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

SELinux Glosarioa

  • identitate β€” SELinux erabiltzailea ez da ohiko Unix/Linux erabiltzaile-idaren berdina; sistema berean bizi daitezke, baina guztiz desberdinak dira funtsean. Linux kontu estandar bakoitza SELinux-en bat edo gehiagori dagokio. SELinux identitatea segurtasun-testuinguru orokorraren parte da, eta horrek zehazten du zein domeinu sartu zaitezkeen eta ez.
  • domeinuak - SELinux-en, domeinu bat subjektu baten exekuzio testuingurua da, hau da, prozesu bat. Domeinuak zuzenean zehazten du prozesu batek duen sarbidea. Domeinua, funtsean, prozesuek zer egin dezaketen edo prozesu batek mota ezberdinekin egin dezakeenaren zerrenda da. Domeinuen adibide batzuk sysadm_t sistemaren administraziorako eta user_t hau da, pribilegiorik gabeko erabiltzaile-domeinu normala dena. Init sistema init_t domeinuan exekutatzen da, eta named_t domeinuan.
  • rol β€” Domeinuen eta SELinux erabiltzaileen arteko bitartekari gisa balio duena. Rolek zehazten dute erabiltzaile bat zein domeinutara egon daitekeen eta zer motatako objektuetara sar daitekeen. Sarbide kontrolatzeko mekanismo honek pribilegioak handitzeko erasoen mehatxua saihesten du. Rolak SELinux-en erabiltzen den Role Based Access Control (RBAC) segurtasun ereduan idazten dira.
  • Motak β€” Objektu bati esleituta dagoen eta nor atzi dezakeen zehazten duen Mota betearazteko zerrendako atributu bat. Domeinuaren definizioaren antzera, domeinua prozesu bati aplikatzen zaiola izan ezik, eta mota objektuei aplikatzen zaie, hala nola, direktorioei, fitxategiei, socketei, etab.
  • Subjektuak eta objektuak - Prozesuak subjektuak dira eta testuinguru zehatz batean exekutatzen dira, edo segurtasun-domeinu batean. Sistema eragilearen baliabideak: fitxategiak, direktorioak, socketak, etab., mota jakin bat esleitzen zaien objektuak dira, hau da, pribatutasun maila bat.
  • SELinux politikak β€” SELinux-ek hainbat politika erabiltzen ditu sistema babesteko. SELinux politikak erabiltzaileen roletarako sarbidea definitzen du, rolak domeinuetarako eta domeinuak motetarako. Lehenik eta behin, erabiltzaileak rol bat lortzeko baimena du, gero rolak domeinuetara sartzeko baimena du. Azkenik, domeinu batek objektu mota batzuetarako soilik izan dezake sarbidea.

LSM eta SELinux arkitektura

Izena izan arren, LSMak ez dira orokorrean karga daitezkeen Linux moduluak. Hala ere, SELinux bezala, nukleoan zuzenean integratuta dago. LSM iturburu-kodearen aldaketak kernel-konpilazio berri bat behar du. Nukleoaren ezarpenetan dagokion aukera gaitu behar da, bestela LSM kodea ez da aktibatuko abiarazi ondoren. Baina kasu honetan ere, OS abiaraztearen aukerak gaitu daiteke.

Linux segurtasun sistemak
LSM egiaztatzeko pila

LSM nukleoaren oinarrizko funtzioetan kakoez hornituta dago, egiaztapenetarako garrantzitsuak izan daitezkeenak. LSMen ezaugarri nagusietako bat pilatuta egotea da. Horrela, egiaztapen estandarrak oraindik egiten dira, eta LSMren geruza bakoitzak kontrol eta kontrol gehigarriak baino ez ditu gehitzen. Horrek esan nahi du debekua ezin dela atzera bota. Hau irudian ageri da; DAC ohiko egiaztapenen emaitza porrot bat bada, orduan gaia ez da LSM kakoetara ere iritsiko.

SELinux-ek Fluke ikerketa sistema eragilearen Flask segurtasun-arkitektura hartzen du, bereziki pribilegio txikienaren printzipioa. Kontzeptu honen funtsa, bere izenak dioen bezala, erabiltzaileari edo izapidetu nahi diren ekintzak egiteko beharrezkoak diren eskubideak soilik ematea da. Printzipio hau behartutako sarbide-idazketa erabiliz inplementatzen da, beraz SELinux-en sarbide-kontrola domeinu => mota ereduan oinarritzen da.

Sarbide behartutako idazketari esker, SELinux-ek Unix/Linux sistema eragileetan erabiltzen den DAC eredu tradizionalak baino askoz ere sarbide kontrolatzeko ahalmen handiagoak ditu. Adibidez, ftp zerbitzaria konektatuko den sareko ataka-zenbakia muga dezakezu, karpeta jakin batean fitxategiak idazteko eta aldatzeko baimena eman, baina ez ezabatzeko.

SELinux-en osagai nagusiak hauek dira:

  • Politika betearazteko zerbitzaria β€” Sarbide-kontrola antolatzeko mekanismo nagusia.
  • Sistemaren segurtasun-politiken datu-basea.
  • LSM gertaeren atzematearekin elkarrekintza.
  • Selinuxfs - Pseudo-FS, /proc-en berdina eta /sys/fs/selinux-en muntatua. Exekuzio garaian Linux nukleoak modu dinamikoan populatua eta SELinux egoerari buruzko informazioa duten fitxategiak dituztenak.
  • Sartu Vector Cachea β€” Produktibitatea areagotzeko mekanismo laguntzailea.

Linux segurtasun sistemak
SELinux-ek nola funtzionatzen duen

Honela funtzionatzen du guztiak.

  1. Subjektu jakin batek, SELinux terminoetan, objektu baten gainean baimendutako ekintza bat egiten du DAC egiaztapenaren ondoren, goiko irudian ikusten den bezala. Eragiketa bat egiteko eskaera hori LSM gertaeren atzematera doa.
  2. Hortik aurrera, eskaera, subjektuaren eta objektuaren segurtasun-testuinguruarekin batera, SELinux Abstrakzioa eta Hook Logic modulura pasatzen da, LSMarekin elkarreragineaz arduratzen dena.
  3. Subjektu batek objektu baterako sarbideari buruzko erabakiak hartzeko agintea Policy Inforcement Server da eta SELinux AnHL-tik jasotzen ditu datuak.
  4. Sartzeari edo ukatzeari buruzko erabakiak hartzeko, Policy Enforcement Server-ak Access Vector Cache (AVC) cachearen azpisistemara jotzen du gehien erabiltzen diren arauetarako.
  5. Cachean dagokion araurako irtenbiderik aurkitzen ez bada, eskaera segurtasun-politiken datu-basera pasatzen da.
  6. Datu-baseko eta AVC-ko bilaketa-emaitza Policy Inforcement Server-era itzultzen da.
  7. Aurkitutako politika eskatutako ekintzarekin bat badator, eragiketa baimenduta dago. Bestela, operazioa debekatuta dago.

SELinux ezarpenak kudeatzea

SELinux hiru modu hauetako batean funtzionatzen du:

  • Betearazpena - Segurtasun politikak zorrotz betetzea.
  • Baimenduzkoa - Murrizketak urratzea onartzen da; dagokion ohar bat egiten da aldizkarian.
  • Desgaituta: segurtasun-politikak ez daude indarrean.

SELinux zein modutan dagoen ikus dezakezu komando honekin.

[admin@server ~]$ getenforce
Permissive

Berrabiarazi aurretik modua aldatzea, adibidez, betearazteko moduan ezartzea, edo 1. Parametro permisiboa 0 zenbakizko kodeari dagokio.

[admin@server ~]$ setenfoce enforcing
[admin@server ~]$ setenfoce 1 #Ρ‚ΠΎ ΠΆΠ΅ самоС

Fitxategia editatuz modua ere alda dezakezu:

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

Setenfoce-ren aldea da sistema eragilea abiarazten denean SELinux modua konfigurazio fitxategiko SELINUX parametroaren balioaren arabera ezarriko dela. Horrez gain, desgaituta dagoen <=> betearazteko aldaketek /etc/selinux/config fitxategia editatu eta berrabiarazi ondoren bakarrik izango dute eragina.

Ikusi egoera-txosten labur bat:

[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

SELinux-en atributuak ikusteko, utilitate estandar batzuek -Z parametroa erabiltzen dute.

[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

Ls -l-ren irteera arruntarekin alderatuta, hainbat eremu gehigarri daude formatu honetan:

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

Azken eremuak segurtasun-sailkapena bezalako zerbait adierazten du eta bi elementuren konbinazioaz osatuta dago:

  • s0 - esangura, behe-maila handiko tarte gisa ere idatzita
  • c0, c1... c1023 - kategoria.

Sarbide-konfigurazioa aldatzea

Erabili semodula SELinux moduluak kargatzeko, gehitzeko eta kentzeko.

[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 - ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ

Lehen taldea astean saioa hasteko SELinux erabiltzailea sistema eragilearen erabiltzailearekin konektatzen du, bigarrenak zerrenda bat bistaratzen du. Azkenik, -r etengailua duen azken komandoak SELinux erabiltzaileen OS kontuetarako mapak kentzen ditu. MLS/MCS barrutiaren balioen sintaxiaren azalpena aurreko atalean dago.

[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 erabiltzailea SELinux erabiltzaileen eta rolen arteko mapak kudeatzeko erabiltzen da.

[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

Komando parametroak:

  • -a gehitu pertsonalizatutako rolen mapaketa sarrera;
  • -l bat datozen erabiltzaileen eta rolen zerrenda;
  • -d ezabatu erabiltzaile-rolen mapa-sarrera;
  • -R erabiltzaileari atxikitako rolen zerrenda;

Fitxategiak, Portuak eta Balio Boolearrak

SELinux modulu bakoitzak fitxategien etiketatze-arau multzo bat eskaintzen du, baina zure arauak ere gehi ditzakezu behar izanez gero. Adibidez, web zerbitzariak /srv/www karpetarako sarbide-eskubideak izatea nahi dugu.

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

Lehenengo komandoak markaketa-arau berriak erregistratzen ditu, eta bigarrenak, edo hobeto esanda, fitxategi-motak berrezartzen ditu, egungo arauen arabera.

Era berean, TCP/UDP atakak markatuta daude zerbitzu egokiak soilik haietan entzun ahal izateko. Adibidez, web zerbitzariak 8080 atakan entzuteko, komandoa exekutatu behar duzu.

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

SELinux modulu kopuru handi batek balio boolearrak har ditzaketen parametroak dituzte. Parametro horien zerrenda osoa getsebool -a erabiliz ikus daiteke. Balio boolearrak alda ditzakezu setsebool erabiliz.

[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

Tailerra, lortu Pgadmin-web interfazera sarbidea

Ikus dezagun adibide praktiko bat: pgadmin7.6-web instalatu dugu RHEL 4-n PostgreSQL datu-basea administratzeko. Pixka bat ibili ginen bilaketa pg_hba.conf, postgresql.conf eta config_local.py ezarpenekin, ezarri karpeta-baimenak, instalatu falta diren Python moduluak pip-en. Dena prest dago, martxan jarri eta jasotzen dugu 500 Barne zerbitzariaren errorea.

Linux segurtasun sistemak

Ohiko susmagarriekin hasten gara, /var/log/httpd/error_log egiaztatuz. Bertan sarrera interesgarri batzuk daude.

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

Une honetan, Linux-eko administratzaile gehienek tentazio handia izango dute setencorce 0 exekutatzeko, eta hori amaituko da. Egia esanda, hori egin nuen lehen aldiz. Hori ere irteera bat da, noski, baina onenetik urrun.

Diseinu astunak izan arren, SELinux erabilerraza izan daiteke. Instalatu setroubleshoot paketea eta ikusi sistemaren erregistroa.

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

Kontuan izan auditord zerbitzua modu honetan berrabiarazi behar dela, eta ez systemctl erabiliz, sistema eragilean systemd egon arren. Sistemaren erregistroan adieraziko da blokeatzea ez ezik, arrazoia ere bai eta debekua gainditzeko modua.

Linux segurtasun sistemak

Komando hauek exekutatzen ditugu:

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

pgadmin4-web orrirako sarbidea egiaztatzen dugu, dena funtzionatzen du.

Linux segurtasun sistemak

Linux segurtasun sistemak

Iturria: www.habr.com

Gehitu iruzkin berria