Nov 7, 2023

SELinux

 Šta je SELinux?

SELinux (Security-Enhanced Linux) je oblik obaveznog kontrolisanja pristupa (MAC) za Linux operativni sistem. Ovo je mehanizam za unapređenje sigurnosti koji se koristi za ograničavanje pristupa korisnika i procesa resursima na sistemu, kao i za sprovođenje politika sigurnosti. SELinux dodaje dodatne slojeve sigurnosti pomoću etiketa ili oznaka koje se dodjeljuju fajlovima, procesima i uređajima.

SELinux funkcioniše na osnovu politika sigurnosti koje se primenjuju na sistem. Politike definišu prava pristupa za različite subjekte (korisnike, procese itd.) prema objektima (fajlovi, direktorijumi, uređaji itd.). Ove politike su strogo definisane i propisane, čime se osigurava ograničavanje pristupa i smanjenje potencijalnih ranjivosti.

SELinux je posebno koristan u situacijama gdje je potrebno pojačati sigurnost sistema, kao što su serveri i infrastrukturni uređaji. Međutim, SELinux može biti kompleksan za konfiguraciju i zahtijeva razumevanje politika sigurnosti i etiketa.

Važno je napomenuti da, dok SELinux dodaje značajne slojeve sigurnosti, neki korisnici ga mogu smatrati nepotrebnim ili teško konfigurisanim. U takvim slučajevima, možete ga onemogućiti ili konfigurisati na način koji odgovara potrebama vašeg sistema.

Kako se konfiguriše?

Da biste proverili i postavili status SELinux-a na Linux sistemu, koristite komande sestatus i setenforce. Evo kako to možete učiniti:

  1. Provera trenutnog statusa SELinux-a: Koristite komandu sestatus da biste proverili trenutni status SELinux politika i prava pristupa. Ovo će vam reći da li je SELinux omogućen i u kom režimu radi.

    sestatus

    Rezultat će sadržavati informacije o statusu SELinux-a (omogućeno/isključeno), režimu rada (Enforcing, Permissive, Disabled) i drugim informacijama.

  2. Promena režima rada SELinux-a: Možete promeniti režim rada SELinux-a na tri različita načina:

    a. Enforcing (strogo ograničenje): U ovom režimu, SELinux primenjuje stroge politike sigurnosti i odbija pristup resursima koji nisu odobreni.

    setenforce 1

    b. Permissive (dozvoljavajući): U ovom režimu, SELinux beleži povrede politika, ali ne odbija pristup resursima. Koristi se za dijagnostiku problema sa SELinux-om.

    setenforce 0

    c. Disabled (onemogućen): U ovom režimu, SELinux je potpuno onemogućen.

    setenforce 0

    Ako želite da promenite režim rada SELinux-a na trajnoj osnovi, trebaće vam izmeniti odgovarajući konfiguracioni fajl, obično /etc/selinux/config. U tom fajlu možete postaviti SELINUX=permissive za Permissive režim, SELINUX=disabled za Disabled režim ili SELINUX=enforcing za Enforcing režim.

Nakon izmene režima rada SELinux-a, trebalo bi da ponovo pokrenete sistem kako bi se promene primenile.

SELinux context

SELinux context (SELinux kontekst) je ključni koncept u SELinux sistemu za upravljanje sigurnošću. Svaka datoteka, proces, uređaj i resurs na sistemu ima svoj SELinux kontekst koji određuje pravila za pristup i interakciju sa drugim resursima. SELinux kontekst sadrži informacije kao što su tip, uloga, i korisnik.

Evo šta svaki deo SELinux konteksta predstavlja:

  1. Security Context Identifier (SE-IDL): Ovo je numerički identifikator koji jedinstveno identifikuje tip resursa. Na primer, ovo može biti numerička vrednost koja označava tip fajla kao "httpd_sys_content_t" za web sadržaj.

  2. Security Context Role: Rola (Role) predstavlja ulogu koja je dodeljena subjektu (procesu ili korisniku). Uobičajene uloge u SELinux-u uključuju "system_r" za sistemski softver i "user_r" za korisničke aplikacije.

  3. Security Context Type: Tip (Type) opisuje vrstu resursa ili subjekta. Na primer, "httpd_t" može označavati tip Apache web servera, dok "user_t" može označavati tip korisničkog procesa.

  4. Security Context User: Korisnik (User) predstavlja korisnika ili subjekt koji poseduje resurs ili izvršava proces.

SELinux koristi ove kontekste za primenu politika sigurnosti. Ako se konteksti ne podudaraju, pristup će biti odbijen. Na primer, ako SELinux kontekst za Apache web server (httpd_t) pokuša da pristupi sistemskim datotekama sa kontekstom koji ne dozvoljava takav pristup, SELinux će ga sprečiti.

SELinux konteksti mogu biti vidljivi pomoću komandi kao što su ls -Z za prikaz konteksta datoteka ili ps -Z za prikaz konteksta procesa. Ovo je korisno za dijagnostiku problema sa sigurnošću i praćenje kako SELinux primenjuje svoje politike na sistemu.

Provera konteksta:

  1. Provera SELinux konteksta za datoteku pomoću ls komande:

    Koristite ls -Z za prikaz SELinux konteksta za datoteke u trenutnom direktorijumu. Na primer:

    ls -Z /putanja/do/datoteke
  2. Provera SELinux konteksta za proces pomoću ps komande:

    Koristite ps -eZ za prikaz SELinux konteksta za sve procese. Na primer:

    ps -eZ

Instalacija SELinux-a

Da biste instalirali SELinux (Security-Enhanced Linux) na vašem Linux sistemu, koristite sledeće korake. Imajte na umu da procedura može varirati zavisno o vašoj Linux distribuciji. U ovom primeru koristićemo distribuciju zasnovanu na Debianu kao referencu.

  1. Provera da li je SELinux već instaliran: Pre nego što instalirate SELinux, proverite da li je već instaliran. Upotrebite komandu sestatus ili getenforce:

    sestatus

    Ako dobijete odgovarajuće informacije o SELinux-u, to znači da je već instaliran. U suprotnom, možete nastaviti sa instalacijom.

  2. Instalacija SELinux komponenata: SELinux se obično instalira kao skup paketa na većini Linux distribucija. Za distribucije temeljene na Debianu, možete koristiti apt-get:

    sudo apt-get install selinux-basics selinux-policy-default auditd

    Za distribucije temeljene na Red Hat-u, koristite yum:

    sudo yum install selinux-policy selinux-policy-targeted setroubleshoot-server

    Ove komande će instalirati osnovne SELinux komponente i politike.

  3. Podešavanje SELinux-a: Nakon instalacije, morate konfigurisati SELinux da biste ga uključili. To obično uključuje izmenu /etc/selinux/config fajla da biste postavili SELINUX na "enforcing". Primer za Red Hat bazirane distribucije:

    sudo vi /etc/selinux/config

    Izmenite liniju da izgleda ovako:

    SELINUX=enforcing
  4. Restartovanje sistema: Nakon što izmenite konfiguraciju, trebalo bi da ponovo pokrenete računar da biste primenili promene.

  5. Provera statusa: Nakon ponovnog pokretanja, možete proveriti status SELinux-a koristeći sestatus:

    sestatus

    Trebalo bi da vidite da je SELinux u "enforcing" režimu.

  6. Korišćenje SELinux-a: Sada možete koristiti SELinux kako biste poboljšali sigurnost vašeg sistema i postavili pravila politike za resurse na sistemu.

Napomena: Ovi koraci su opšti i mogu se razlikovati zavisno o distribuciji i verziji sistema. Uvek se konsultujte sa dokumentacijom vaše distribucije za detaljne upute o instalaciji i konfiguraciji SELinux-a.

Pregled logova

Da biste pregledali logove za SELinux na Linux sistemu, možete koristiti alatke poput sealert, audit2why, ausearch, i journalctl u kombinaciji sa grep komandom. Evo nekoliko koraka kako to uraditi:

  1. Korišćenje sealert za analizu audit logova:

    • Pokrenite sealert kako biste pregledali i analizirali SELinux audit logove:

      sealert
    • sealert će vam prikazati pregled incidenata sa SELinux-om i ponuditi vam savete i sugestije kako da rešite probleme. Pratite upute koje pruža.

  2. Korišćenje audit2why za analizu audit logova:

    • Koristite audit2why kako biste pregledali audit logove i dobili više informacija o događajima:

      sudo audit2why < /var/log/audit/audit.log
    • Ovaj alat će vam dati bolje razumevanje zašto je SELinux blokirao određene akcije.

  3. Korišćenje ausearch za pretragu logova:

    • ausearch je koristan za pretragu SELinux logova i pronalaženje konkretnih događaja:

      ausearch -m avc
    • Ova komanda će vam prikazati samo AVC (Access Vector Cache) događaje, što je tipično za SELinux incidente.

  4. Korišćenje journalctl za pregled sistema logova:

    • Koristite journalctl kako biste pregledali sistemski dnevnik i pronašli informacije o SELinux događajima:

      journalctl -t setroubleshoot
    • Ova komanda će vam prikazati logove povezane sa SELinux-om.

  5. Korišćenje grep za pretragu logova:

    • Možete koristiti grep za pretragu datoteka sa SELinux logovima. Na primer:

      grep "SELinux is preventing" /var/log/audit/audit.log
    • Ovo će vam pomoći da pronađete konkretne incidente u audit logu.

Nakon analize logova, možete preduzeti odgovarajuće korake za rešavanje problema koji se javljaju sa SELinux-om na sistemu.

Izmena konteksta

Izmena SELinux konteksta za fajlove ili direktorijume može biti potrebna kada želite promeniti nivo bezbednosti ili dozvole za određene resurse na Linux sistemu. Evo kako možete izmeniti SELinux kontekst:

  1. Korišćenje chcon komande:

    • Za pojedinačne fajlove ili direktorijume, možete koristiti chcon komandu. Na primer, ako želite promeniti kontekst za fajl myapp.conf:

      sudo chcon -t httpd_sys_content_t /putanja/do/fajla/myapp.conf
    • Ova komanda će postaviti kontekst na httpd_sys_content_t za datoteku myapp.conf.

  2. Korišćenje restorecon komande:

    • Ako želite vratiti SELinux kontekst na podrazumevane vrednosti za datoteku ili direktorijum, možete koristiti restorecon komandu. Na primer:

      sudo restorecon -v /putanja/do/fajla/myapp.conf
    • Ova komanda će postaviti SELinux kontekst na podrazumevane vrednosti za datoteku myapp.conf.

  3. Korišćenje semanage alata:

    • semanage alat omogućava napredniju kontrolu nad SELinux kontekstima. Na primer, možete koristiti semanage da dodate novu vrstu fajlova ili direktorijuma sa određenim kontekstom.

    • Na primer, za dodavanje nove vrste fajlova sa određenim kontekstom:

      sudo semanage fcontext -a -t httpd_sys_content_t '/customfiles(/.*)?'

      Ovo će dodati pravilo koje omogućava fajlovima unutar /customfiles direktorijuma da koriste kontekst httpd_sys_content_t.

Napomena: Budite pažljivi prilikom izmene SELinux konteksta jer to može uticati na sigurnost i performanse sistema. Preporučuje se korišćenje ovih komandi samo ako znate tačno šta radite i zašto je potrebna izmena konteksta.

Booleans

U kontekstu SELinux-a, "booleans" se odnosi na specifične promenljive koje se koriste za kontrolu ponašanja i dozvola za aplikacije i usluge na Linux sistemu. Booleans su deo mehanizma politike sigurnosti SELinux-a i pružaju dodatne mogućnosti za prilagođavanje bezbednosnih politika. Evo nekoliko ključnih tačaka o booleans u SELinux-u:

  1. On/Off Prekidači: Booleans su kao prekidači koji mogu biti uključeni (on) ili isključeni (off). Oni definišu određena pravila i dozvole za resurse na sistemu. Na primer, postoji boolean za omogućavanje ili onemogućavanje Apache HTTP servera da se poveže na mrežu.

  2. Prilagođavanje Politike: Korišćenjem booleans-a, administratori mogu prilagoditi politiku sigurnosti SELinux-a na sistemu, a da ne moraju menjati samu politiku. To omogućava bolju kontrolu nad dozvolama za aplikacije i usluge.

  3. Korišćenje getsebool i setsebool: Da biste videli trenutno stanje booleans-a, možete koristiti komandu getsebool. Na primer:

    getsebool httpd_can_network_connect

    Da biste promenili vrednost boolean-a, koristite setsebool. Na primer:

    setsebool -P httpd_can_network_connect 1

    Ovde -P flag znači da želite da promenite vrednost trajno, tako da će se promena očuvati i nakon ponovnog pokretanja sistema.

  4. Pravila Zahteva: Booleans su često korišćeni u pravilima politike sigurnosti SELinux-a da bi se odredila dozvola za aplikacije. Na primer, ako želite omogućiti Apache serveru da se poveže na mrežu, možda ćete morati promeniti vrednost boolean-a httpd_can_network_connect.

  5. Dokumentacija i Pomoć: Administratori mogu pristupiti dokumentaciji i pomoći za booleans kako bi bolje razumeli njihovo ponašanje i svrhu.

Korišćenje booleans-a može biti korisno za postizanje određenih funkcionalnosti ili prilagođavanje bezbednosnih politika sistema na način koji najbolje odgovara potrebama organizacije. Važno je pažljivo upravljati booleans-ima, jer nekontrolisane promene mogu dovesti do narušavanja sigurnosti sistema.

semodule

semodule je komanda koja se koristi za upravljanje SELinux modulima na Linux sistemu. Moduli su paketi koji sadrže definicije pravila politike, konteksta fajla i drugih SELinux elemenata. Moduli se koriste za dodavanje ili promenu politike sistema.

Evo nekoliko čestih komandi i kako se koriste:

  1. Prikazivanje Liste Instaliranih Modula:

    semodule -l

    Ova komanda prikazuje listu svih instaliranih SELinux modula na sistemu.

  2. Instalacija SELinux Modula:

    semodule -i mymodule.pp

    Ovom komandom instalirate SELinux modul sa ekstenzijom .pp. Modul definiše nove politike ili menja postojeće.

  3. Brisanje SELinux Modula:

    semodule -r mymodule

    Ova komanda briše SELinux modul sa nazivom "mymodule" sa sistema.

  4. Aktivacija Modula:

    semodule -e mymodule

    Aktiviranje modula omogućava primenu njegovih pravila bez potrebe za ponovnim pokretanjem sistema.

  5. Deaktivacija Modula:

    semodule -d mymodule

    Deaktiviranje modula ga isključuje tako da se njegova pravila ne primenjuju.

  6. Ažuriranje Modula:

    semodule -u mymodule.pp

    Ova komanda se koristi za ažuriranje postojećeg modula sa novim definicijama iz .pp fajla.

  7. Prikazivanje Detalja Modula:

    semodule -lfull

    Ova komanda prikazuje detaljne informacije o svim instaliranim modulima, uključujući kontekst fajlova, pravila i druge informacije.

  8. Kreiranje Modula Iz Policy Fajla:

    checkmodule -M -m -o mymodule.mod mymodule.te semodule_package -o mymodule.pp -m mymodule.mod

    Ove komande se koriste za kreiranje modula iz politike koja je definisana u mymodule.te fajlu.

  9. Prikazivanje Atributa Modula:

    semodule -l | grep mymodule

    Ova komanda će prikazati atribute i staze modula sa nazivom "mymodule".

Napomena: Manipulisanje SELinux modulima zahteva određena administratorska prava, pa se komande obično izvršavaju kao superkorisnik ili sa odgovarajućim privilegijama. Pre nego što promenite SELinux politiku na sistemu, dobro je razumeti efekte tih promena kako biste izbegli neželjene posledice.

Porotvi

SELinux (Security-Enhanced Linux) ne koristi "portove" na isti način kao firewall ili TCP/IP servisi. Umesto toga, SELinux se fokusira na kontrolu pristupa resursima i aplikacijama na nivou politike bezbednosti na Linux sistemu.

U okviru SELinux politike, entiteti kao što su procesi, fajlovi, direktorijumi i uređaji imaju dodeljen kontekst bezbednosti. Pravila SELinux politike definišu kako ovi entiteti mogu da interaguju jedni s drugima. Pravila se zasnivaju na kontekstu bezbednosti i tipu resursa.

Dakle, SELinux ne "blokira" ili "dozvoljava" portove kao što to radi firewall. Umesto toga, SELinux odlučuje koji proces može da pristupi određenom resursu (na primer, fajlu ili direktorijumu) na osnovu konteksta bezbednosti procesa i resursa.

SELinux je napredan mehanizam koji omogućava finu kontrolu nad bezbednošću sistema, ali zahteva dobro razumevanje politike bezbednosti i njene primene na resurse i aplikacije na sistemu.

Primeri:

  1. HTTP Server (Apache) na portu 80:

Ako želite da omogućite da Apache HTTP server koristi port 80, morate konfigurisati SELinux politiku za njega. Na primer, možete izdati sledeću naredbu da biste omogućili Apache da sluša na portu 80:

semanage port -a -t http_port_t -p tcp 80
  1. SSH Server na portu 22:

Da biste omogućili SSH serveru korišćenje port 22, možete koristiti sledeću komandu:

semanage port -a -t ssh_port_t -p tcp 22

Ovo su samo primeri kako možete konfigurisati SELinux politiku za određene portove za određene servise. SELinux će zatim dozvoliti aplikacijama da pristupaju ovim portovima u skladu sa definisanom politikom bezbednosti.

Napomena: Ovi primeri podrazumevaju korišćenje alatke semanage, koja može biti dostupna na nekim Linux distribucijama. Upotreba može varirati u zavisnosti od distribucije i verzije SELinux politike.