Jedan od razloga velikog uspjeha Linux Operativni sistem na ugrađenim, mobilnim uređajima i serverima ima prilično visok nivo sigurnosti za kernel, povezane servise i aplikacije. Ali ako na arhitekturu kernela Linux, onda u njemu ne možete pronaći kvadrat koji je odgovoran za sigurnost kao takvu. Gdje se krije sigurnosni podsistem? Linux i od čega se sastoji?
prapovijest Linux Sigurnosni moduli i SELinux
Security Enhanced Linux je skup pravila i mehanizama pristupa zasnovanih na obaveznim i modelima pristupa zasnovanim na ulogama radi zaštite sistema Linux protiv potencijalnih prijetnji i ispravke za nedostatke Diskrecionarne kontrole pristupa (DAC), tradicionalnog Unix sigurnosnog sistema. Projekat je nastao u okviru Američke Nacionalne sigurnosne agencije, a razvoj su prvenstveno provodili izvođači radova Secure Computing Corporation i MITRE, kao i niz istraživačkih laboratorija.

Linux Sigurnosni moduli
Linus Torvalds je dao nekoliko komentara na nova dostignuća NSA-e kako bi se ona mogla uključiti u glavni kernel. LinuxOpisao je uobičajeno okruženje, sa skupom presretača za upravljanje operacijama objekata i skupom zaštitnih polja u strukturama podataka jezgra za pohranjivanje odgovarajućih atributa. Ovo okruženje bi zatim mogli koristiti učitavajući moduli jezgra za implementaciju bilo kojeg željenog sigurnosnog modela. LSM je postao potpuno integriran u jezgro. Linux v2.6 u 2003. godini.
LSM okvir uključuje zaštitna polja u strukturama podataka i pozive funkcija presretanja na kritičnim tačkama u kodu kernela za upravljanje njima i izvođenje kontrole pristupa. Takođe dodaje funkcionalnost za registraciju sigurnosnih modula. /sys/kernel/security/lsm interfejs sadrži listu aktivnih modula u sistemu. LSM kuke se pohranjuju u liste koje se pozivaju redoslijedom navedenim u CONFIG_LSM. Detaljna dokumentacija zakače je uključena u zaglavni fajl include/linux/lsm_hooks.h.
LSM podsistem je omogućio potpunu integraciju SE.Linux ista verzija stabilnog kernela Linux v2.6. Bukvalno odmah SELinux postao je de facto standard za sigurna okruženja Linux i postao dio najpopularnije distribucije: RedHat Enterprise Linux, fedora, Debian, Ubuntu.
Jugoistočni glosarLinux
- Identitet — SE korisnikLinux nije isto kao uobičajeni Unix/Linux korisnički ID, mogu koegzistirati na istom sistemu, ali su u suštini potpuno različiti. Svaki standardni račun Linux može se podudarati s jednim ili više na SELinuxSE identitetLinux je sastavni dio ukupnog sigurnosnog konteksta koji određuje u koje domene se može ući, a u koje ne.
- Domains — Na jugoistokuLinux Domen je kontekst izvršavanja subjekta, tj. procesa. Domen direktno određuje pristup koji proces ima. Domen je u suštini lista onoga što procesi mogu raditi ili koje radnje proces može izvršiti s različitim tipovima. Neki primjeri domena su sysadm_t za administraciju sistema i user_t, što je regularna, neprivilegovana korisnička domena. Init sistem se izvršava u domenu init_t, a imenovani proces se izvršava u domenu named_t.
- Uloge — Šta služi kao posrednik između domena i SE korisnikaLinuxUloge određuju kojim domenama korisnik može pripadati i kojim vrstama objekata može pristupiti. Ovaj mehanizam kontrole pristupa sprječava prijetnju napada eskalacijom privilegija. Uloge su integrirane u sigurnosni model kontrole pristupa zasnovane na ulogama (RBAC) koji se koristi u SE.Linux.
- Vrste — Upišite atribut Enforcement list koji je dodijeljen objektu i određuje ko će mu imati pristup. Slično definiranju domene, osim što se domen primjenjuje na proces, dok se tip primjenjuje na objekte kao što su direktoriji, datoteke, utičnice i tako dalje.
- Subjekti i objekti - Procesi su subjekti i pokreću se u određenom kontekstu ili sigurnosnom domenu. Resursi operativnog sistema: datoteke, direktoriji, utičnice, itd., su objekti kojima je dodijeljen određeni tip, drugim riječima, nivo tajnosti.
- Politike SELinux - Za zaštitu SE sistemaLinux koristi razne politike. SE politikaLinux Definira korisnički pristup ulogama, uloga domenama i domenama tipovima. Prvo, korisnik je ovlašten za ulogu, a zatim je uloga ovlaštena za pristup domenama. Konačno, domena može imati pristup samo određenim tipovima objekata.
LSM i SE arhitekturaLinux
Uprkos imenu, LSM-ovi zapravo nisu moduli koji se mogu učitati. LinuxMeđutim, baš kao i SELinux, direktno je integriran u kernel. Svaka promjena izvornog koda LSM-a zahtijeva novu kompilaciju kernela. Odgovarajuća opcija mora biti omogućena u postavkama kernela, u suprotnom se LSM kod neće aktivirati nakon pokretanja. Međutim, čak i u ovom slučaju, može se omogućiti putem opcije bootloadera operativnog sistema.

Hrpa LSM čekova
LSM je opremljen kukicama u funkcijama jezgre jezgre koje mogu biti relevantne za provjere. Jedna od glavnih karakteristika LSM-a je da su bazirani na steku. Dakle, standardne provjere se i dalje izvode, a svaki LSM sloj samo dodaje dodatne kontrole i kontrole. To znači da se zabrana ne može povući. Ovo je prikazano na slici, ako je rezultat rutinskih DAC provjera kvar, onda neće ni doći do LSM kuka.
SELinux usvojila je Flask sigurnosnu arhitekturu istraživačkog operativnog sistema Fluke, a posebno princip najmanjih privilegija. Suština ovog koncepta, kao što i samo ime sugerira, jeste da se korisniku ili procesu dodijele samo prava potrebna za izvršavanje namjeravane radnje. Ovaj princip se implementira putem obaveznog tipiziranja pristupa, čime se kontroliraju prava pristupa u SE.Linux zasnovano na modelu domena => tip.
Zahvaljujući prisilnom tipkanju pristupa SELinux ima mnogo značajnije mogućnosti kontrole pristupa od tradicionalnog DAC modela koji se koristi u Unix OS-u/LinuxNa primjer, možete ograničiti broj mrežnog porta na kojem će FTP server slušati, dozvoljavajući pisanje i modifikaciju datoteka u određenoj mapi, ali ne i njihovo brisanje.
Glavne komponente SELinux ovo su:
- Server za sprovođenje politike - Glavni mehanizam za organizovanje kontrole pristupa.
- Baza podataka o sigurnosnim politikama sistema.
- Interakcija sa slušačem LSM događaja.
- Selinuxfs — Pseudo-FS, isti kao /proc i montiran u /sys/fs/selinux. Dinamički popunjen od strane kernela. Linux tokom izvršavanja i sadrži datoteke koje sadrže informacije o statusu SELinux.
- Pristupite vektorskoj predmemoriji - Pomoćni mehanizam za poboljšanje performansi.

SE operativna shemaLinux
Sve ovo funkcionira na sljedeći način.
- Određena tema, u terminologiji Jugoistočne EvropeLinux, izvršava dozvoljenu radnju na objektu nakon DAC verifikacije, kao što je prikazano na gornjoj slici. Ovaj zahtjev za izvršavanje operacije se prosljeđuje LSM presretaču događaja.
- Odatle se zahtjev, zajedno sa sigurnosnim kontekstom subjekta i objekta, prosljeđuje SE modulu.Linux Apstrakcija i Hook Logic, odgovorne za interakciju sa LSM-om.
- Tijelo za donošenje odluka u vezi s pristupom subjekta objektu je Server za sprovođenje politika (Policy Enforcement Server), a on prima podatke od SE-a.Linux AnHL.
- Da bi doneo odluku o pristupu ili zabrani, Server za sprovođenje politike se poziva na podsistem keširanja najčešće korišćenih pravila Access Vector Cache (AVC).
- Ako rješenje za odgovarajuće pravilo nije pronađeno u keš memoriji, tada se zahtjev prosljeđuje bazi podataka sigurnosnih politika.
- Rezultat pretrage iz baze podataka i AVC-a se vraća serveru za sprovođenje politike.
- Ako je pronađena politika u skladu sa traženom akcijom, tada je operacija dozvoljena. U suprotnom, operacija je zabranjena.
Upravljanje SE postavkamaLinux
SELinux funkcioniše u jednom od tri režima:
- Sprovođenje – Strogo sprovođenje bezbednosnih politika.
- Dozvoljeno - Kršenje ograničenja je dozvoljeno, odgovarajuća oznaka se stavlja u dnevnik.
- Onemogućeno - Sigurnosne politike nisu na snazi.
Pogledajte u kojem je SE moduLinux Možete to uraditi sljedećom naredbom.
[admin@server ~]$ getenforce
Permissive
Promjenom režima prije ponovnog pokretanja, na primjer, postavite ga na prisilno, ili 1. Parametar dozvole odgovara numeričkom kodu 0.
[admin@server ~]$ setenfoce enforcing
[admin@server ~]$ setenfoce 1 #то же самое
Također možete promijeniti način rada uređivanjem datoteke:
[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=cilj
Razlika kod setenfoce-a je u tome što se prilikom pokretanja operativnog sistema aktivira SE mod.Linux bit će postavljeno prema vrijednosti parametra konfiguracijske datoteke SELINUX-a. Nadalje, promjene u primjeni onemogućenog <=> stupaju na snagu tek nakon uređivanja datoteke /etc/selinux/config i nakon ponovnog pokretanja.
Pogledajte sažeti izvještaj o statusu:
[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
Za pregled SE atributaLinux Neki standardni uslužni programi koriste parametar -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
U poređenju sa normalnim izlazom ls -l, postoji nekoliko dodatnih polja u sljedećem formatu:
<user>:<role>:<type>:<level>
Posljednje polje označava nešto poput sigurnosnog pečata i sastoji se od kombinacije dva elementa:
- s0 - značajnost, također zabilježena u intervalu niskog nivoa i visokog nivoa
- c0, c1… c1023 je kategorija.
Promjena konfiguracije pristupa
Koristite semodule za učitavanje SE modulaLinux, dodajte ih i uklonite.
[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 - удалить модуль
Prvi tim semanage login povezuje SE korisnikaLinux s korisnikom operativnog sistema, druga prikazuje listu. Konačno, posljednja naredba s parametrom -r uklanja mapiranje SE korisnikaLinux na OS račune. Sintaksa vrijednosti MLS/MCS raspona objašnjena je u prethodnom odjeljku.
[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
tim korisnik semanage koristi se za upravljanje mapiranjem između korisnika i SE ulogaLinux.
[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
Parametri komande:
- -a dodati prilagođeni unos za mapiranje uloga;
- -l lista odgovarajućih korisnika i uloga;
- -d ukloniti prilagođeni unos mapiranja uloga;
- -R lista uloga pridruženih korisniku;
Datoteke, portovi i logičke vrijednosti
Svaki SE modulLinux Pruža skup pravila za označavanje datoteka, ali po potrebi možete dodati i vlastita pravila. Na primjer, želimo dati web serveru prava pristupa mapi /srv/www.
[admin@server ~]$ semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?
[admin@server ~]$ restorecon -R /srv/www/
Prva komanda registruje nova pravila označavanja, a druga resetuje, odnosno izlaže, tipove datoteka u skladu sa trenutnim pravilima.
Isto tako, TCP/UDP portovi su označeni na način da ih samo odgovarajući servisi mogu slušati. Na primjer, da bi web server slušao port 8080, morate pokrenuti naredbu.
[admin@server ~]$ semanage port -m -t http_port_t -p tcp 8080
Značajan broj SE modulaLinux imaju parametre koji mogu uzimati logičke vrijednosti. Potpunu listu takvih parametara možete pogledati pomoću naredbe getsebool -a. Logičke vrijednosti možete promijeniti pomoću naredbe 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
Praktikum, pristupite Pgadmin-web interfejsu
Razmotrimo primjer iz prakse, instalirali smo pgadmin7.6-web na RHEL 4 za administriranje PostgreSQL baze podataka. Prošli smo mali sa podešavanjem pg_hba.conf, postgresql.conf i config_local.py, postaviti prava na foldere, instalirati nedostajuće Python module sa pip-a. Sve je spremno, trči i dobijaj 500 Interna greška servera.

Počinjemo sa tipičnim osumnjičenima, provjerite /var/log/httpd/error_log. Ima tu zanimljivih unosa.
[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.
Ovdje se nalazi većina administratora Linux Postojat će jako iskušenje da se pokrene setencorce 0, i to je kraj priče. Iskreno, to sam i uradio prvi put. To je svakako rješenje, ali daleko od najboljeg.
Uprkos glomaznosti SE dizajnaLinux Može biti jednostavno za korištenje. Jednostavno instalirajte paket setroubleshoot i pogledajte sistemski dnevnik.
[admin@server ~]$ yum install setroubleshoot
[admin@server ~]$ journalctl -b -0
[admin@server ~]$ service restart auditd
Imajte na umu da se usluga auditd mora ponovo pokrenuti na ovaj način, a ne sa systemctl, uprkos prisustvu systemd-a u OS-u. U sistemskom dnevniku će biti naznačeno ne samo činjenica blokiranja, već i razlog i način da se prevaziđe zabrana.

Izvršavamo ove naredbe:
[admin@server ~]$ setsebool -P httpd_can_network_connect 1
[admin@server ~]$ setsebool -P httpd_can_network_connect_db 1
Provjeravamo pristup web stranici pgadmin4-web, sve radi.
izvor: www.habr.com
