LFCA: Kako poboljšati sigurnost Linux sistema – 20. dio


Kao što svi znamo, root korisnik je kralj i ima neograničene privilegije nad Linux sistemom. Međutim, oni koji nisu root korisnici su ograničeni na osnovne zadatke. Pored toga, sudo korisnicima se dodeljuje samo određeni stepen privilegija root-a koji smatra odgovarajućim za izvršavanje određenih povišenih zadataka.

Problemi nastaju kada obični korisnici imaju nekontrolisani pristup resursima ili su nenamjerno eskalirani na root. Ovo je ozbiljan sigurnosni rizik koji može uzrokovati proboje, neželjene modifikacije i, u najgorem slučaju, pad sistema. Drugi potencijalni rizik je kada datoteke imaju manje bezbedne dozvole za fajlove. Na primjer, datoteke za podizanje sistema sa dozvolama za pisanje za globalne korisnike mogu se lako modificirati ili oštetiti što rezultira pokvarenim sistemom.

Iako možemo implementirati fizičku, mrežnu i sigurnost podataka, zlonamjerni korisnik može zaobići sigurnosne mjere i iskoristiti takve sigurnosne rupe. Iz tog razloga sigurnost sistema datoteka treba shvatiti ozbiljno. Pruža dodatni sloj odbrane pred napadima ili insajderskim prijetnjama zlonamjernih zaposlenika koji ne moraju obavljati težak posao u zaobilaženju sigurnosnih mjera kako bi pristupili datotekama.

U sigurnosti sistema, koncentrisaćemo se na sledeće ključne tačke:

  • Prava pristupa – korisničke i grupne dozvole.
  • Nametnite politike lozinki sa PAM modulom.

Prava pristupa – Odvajanje korisnika i grupe

Sigurno ste čuli da se sve u Linuxu smatra fajlom. A ako nije, to je proces. Svaki fajl na Linux sistemu je u vlasništvu korisnika i korisnika grupe. Također ima dozvole za fajlove za 3 korisničke kategorije: Korisnik (u), Grupa (g) i Ostali (o). Dozvole su predstavljene u čitanju, pisanju i izvršavanju ( rwx ) za svaku kategoriju korisnika.

rwx        rwx	     rwx
User       Group     Others

Kao što smo već vidjeli, u odjeljku o osnovama Linuxa, možete vidjeti dozvole za datoteke koristeći dugi format naredbe ls kao što je prikazano.

ls -l

Samo da rezimiramo, dozvole su obično predstavljene sa devet znakova. Prva tri znaka predstavljaju prava pristupa stvarnog korisnika koji posjeduje datoteku. Drugi skup znakova predstavlja dozvole vlasnika grupe datoteke. Konačno, posljednji set za druge ili globalne korisnike. Ovi znakovi su stalno u redoslijedu čitanja, pisanja, izvršavanja (rwx).

Nakon dozvola, imamo vlasništvo korisnika i grupe, nakon čega slijedi veličina datoteke ili direktorija, datum izmjene i na kraju naziv datoteke.

Promjena dozvola i vlasništva za fajl/direktorijum

Korisničke dozvole datoteka i direktorija mogu se mijenjati kako se smatra odgovarajućim. Opće pravilo je da se koristi sigurnosni princip najmanje privilegija. Jednostavno rečeno, osigurajte da korisnici dobiju minimalna prava pristupa ili dozvole potrebne za obavljanje posla.

Princip najmanjih privilegija ograničava korisnike samo na određene uloge i na taj način minimizira rizik da napadači pristupe i modificiraju kritične podatke korištenjem korisničkog naloga niske razine. Također smanjuje površinu napada i ograničava širenje zlonamjernog softvera u slučaju da napadač preuzme kontrolu nad vašim sistemom.

Stoga, ako korisnik treba samo da vidi sadržaj datoteke ili direktorija, ne bi mu trebalo dodijeliti dozvole za izvršavanje ili pisanje. Na samom osnovnom nivou, dodijelite samo najmanje dozvole i vlasništva koje korisnik zahtijeva za izvršavanje zadataka. Kako promijeniti korisničke dozvole i vlasništvo nad datotekama/direktorijumima pomoću chmod i chown naredbi smo se pozabavili u temi o osnovnim Linux komandama.

Način rada za dopuštenje ljepljivog bita

Da bi administrator sistema lakše upravljao dozvolama, specijalne dozvole ili prava pristupa mogu se dodijeliti cijelim direktorijima. Jedna od posebnih dozvola koja se može primijeniti za ograničavanje brisanja i izmjene datoteke ili direktorija je sticky bit.

Sticky bit

U scenariju u kojem dijeljenom direktoriju mogu pristupiti svi korisnici u sistemu ili mreži, postoji potencijalni rizik da neki korisnici mogu izbrisati ili modificirati datoteke unutar direktorija. Ovo je nepoželjno ako želite održati integritet sadržaja direktorija. I tu dolazi do ljepljivosti.

Lepljivi bit je posebna dozvola datoteke postavljena na datoteku ili cijeli direktorij. Samo vlasniku te datoteke/direktorija daje dozvolu za brisanje ili unošenje promjena u sadržaj datoteke ili direktorija. Nijedan drugi korisnik ne može obrisati ili modificirati datoteku/direktorij. Ima simboličku vrijednost t i numeričku vrijednost 1000.

Da uključite sticky bit na direktorij, koristite chmod naredbu kako slijedi:

chmod +t directory_name

U primjeru ispod, primijenili smo ljepljivi bit na direktorij pod nazivom test. U slučaju direktorija, sav sadržaj će naslijediti dozvole sticky bit. Dozvole ljepljivog bita možete provjeriti pomoću naredbe ls -ld. Obavezno primijetite simbol t na kraju dozvola za fajl.

ls -ld test

Ako drugi korisnik pokuša obrisati direktorij ili izmijeniti datoteku unutar direktorija, dočekat će ga greškom Dozvola odbijena.

A to je suština dozvole stick bit datoteke.

Nadgledanje SUID & SGID dozvola

SUID (Postavi korisnički ID) je još jedna posebna dozvola za datoteku koja dozvoljava drugom redovnom korisniku da pokrene datoteku s dozvolama za fajl vlasnika datoteke. Obično se označava simboličkom vrijednošću s u korisničkom dijelu dozvola za fajl umjesto x koji predstavlja dozvole za izvršavanje. SUID ima numeričku vrijednost 4000.

SGID, (Set Group ID) omogućava redovnom korisniku da naslijedi grupne dozvole vlasnika grupe datoteka. Umjesto x za dozvole izvršavanja, vidjet ćete s u grupnom dijelu dozvola za fajl. SGID ima numeričku vrijednost od 2000.

Koliko god zgodne bile, dozvole SUID i SGID povezane su sa sigurnosnim rizicima i treba ih izbjegavati po svaku cijenu. To je zato što daju posebne privilegije redovnim korisnicima. Ako uljez koji se predstavlja kao običan korisnik naiđe na izvršnu datoteku u vlasništvu root korisnika sa SUID bitom postavljenim na njemu, oni mogu iskoristiti tu rupu i iskoristiti sistem.

Da biste pronašli sve datoteke sa SUID bitom postavljenim u Linuxu, pokrenite naredbu find kao root korisnik.

find / -perm -4000 type -f

Za direktorije pokrenite:

find / -perm -4000 type -d

Da biste pronašli sve datoteke sa SGID postavljenim bitovima, pokrenite:

find / -perm -2000 type -f

Za direktorije izvršite:

find / -perm -2000 type -d

Da biste uklonili SUID bit na datoteci, pokrenite naredbu chmod kao što je prikazano:

chmod u-s /path/to/file

Da biste uklonili SGID bit na datoteci, izvršite naredbu:

chmod g-s filename /path/to/file

Provedite politiku lozinki s PAM modulom

Nije neuobičajeno da korisnici postavljaju slabe lozinke. Dobar broj postavlja kratke, jednostavne i lako pogodne lozinke kako bi se izbjeglo zaboravljanje prilikom prijave. Iako su zgodne, slabe lozinke se lako mogu probiti korištenjem skripti za napad brute-force.

PAM modul ( Pluggable Authentication Module) je modul koji omogućava administratorima sistema da nametnu politiku lozinki na Linux sistemima. Da biste to postigli, potreban vam je modul pam_pwquality koji je osigurana biblioteka libpam_pwquality. Modul pam_pwquality provjerava snagu lozinke u odnosu na skup pravila i sistemski rječnik i utvrđuje slabe izbore lozinki.

Da instalirate pam_pwquality modul na Ubuntu 18.04 i novijim verzijama, pokrenite:

sudo apt install libpam_pwquality

Za RHEL/CentOS 8, pokrenite naredbu:

sudo dnf install libpwquality

Konfiguracijski fajl se nalazi na sljedećoj lokaciji:

  • Na Debian-Systems – /etc/pam.d/common-password
  • Na RedHat sistemima – /etc/pam.d/system-auth

Konfiguriranje politike lozinke

Prije nego počnemo mijenjati PAM konfiguracijski fajl, prvo razmotrimo prikupljanje uvida o kontrolama starenja lozinke.

Pojedinosti o starenju lozinke

Oni se mogu naći u datoteci /etc/login.defs.

Datoteka sadrži sljedeće ključne kontrole lozinke:

  • PASS_MAX_DAYS: Maksimalan broj dana kada se lozinka može koristiti.
  • PASS_MIN_DAYS: Minimalni broj. dozvoljenih dana između promjena lozinke.
  • PASS_WARN_AGE: Broj dana upozorenja prije isteka lozinke.

Zadane vrijednosti su navedene u nastavku.

Atribut PASS_MAX_DAYS ograničava broj dana u kojima korisnik može koristiti svoju lozinku. Kada se ova vrijednost postigne ili lozinka istekne, korisnik je primoran promijeniti svoju lozinku kako bi se prijavio na sistem. Prema zadanim postavkama, ova vrijednost je postavljena na 99999, što znači 273 godine. Ovo nema puno smisla što se tiče sigurnosti jer korisnik može nastaviti koristiti svoju lozinku cijeli životni vijek.

Ovo možete postaviti na značajnu vrijednost, recimo 30 dana kao što je prikazano.

PASS_MAX_DAYS  30

Nakon 30 dana, korisnik će biti primoran da promijeni svoju lozinku u drugu.

Atribut PASS_MIN_DAYS navodi minimalno trajanje za koje korisnici mogu koristiti svoju lozinku prije nego što je promijene. Šta to znači? Ako je, na primjer, ova vrijednost postavljena na 15 dana, korisnik neće moći ponovo promijeniti svoju lozinku prije isteka 15 dana.

PASS_MAX_DAYS  15

Atribut PASS_WARN_AGE određuje broj dana u kojima će korisnik dobiti upozorenje o predstojećem isteku njihove lozinke prije nego što istekne. Na primjer, ovo možete postaviti na 7 dana kao što je prikazano.

PASS_MAX_DAYS  7

NAPOMENA: Ove kontrole lozinki ne rade s već postojećim računima. Primjenjuju se samo na nove račune kreirane nakon definiranja pravila.

Postavljanje složenosti lozinke sa PAM modulom

Prije nego što uredite datoteku /etc/pam.d/common-password, napravite rezervnu kopiju. U ovom primjeru, kreirali smo common-password.bak datoteku sigurnosne kopije.

sudo cp /etc/pam.d/common-password /etc/pam.d/common-password.bak

Zatim otvorite datoteku.

sudo vim /etc/pam.d/common-password 

Pronađite liniju prikazanu ispod.

password        requisite          pam_pwquality.so retry=3

Opcija ponovi postavlja maksimalan broj puta od vas se traži da unesete pravu lozinku prije nego što dobijete grešku. Podrazumevano, ovo je postavljeno na 3. Ovo je samo jedna opcija i mi ćemo uključiti nekoliko opcija.

Dodajte sljedeće atribute u red:

minlen=10 difok=3 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 reject_username 

Hajde da dočaramo ove atribute.

  • minlen=10: Postavlja minimalnu prihvatljivu veličinu za lozinku. U ovom slučaju, 10 znakova.
  • difok=3: Ovo je maksimalan broj znakova koji je prisutan u prethodnoj lozinki.
  • lcredit=-1: Ovo je minimalni broj malih znakova koji bi trebao biti prisutan u lozinki.
  • ucredit=-1: Maksimalni broj malih znakova koji bi trebao biti prisutan u lozinki.
  • dcredit=-1: Minimalni broj numeričkih znakova koji bi trebao biti definiran u lozinki.
  • ocredit=-1: Minimalni broj specijalnih znakova, npr. @, #, & koji bi trebao biti definiran u lozinki.
  • reject_username: Ova opcija pokreće odbijanje lozinke ako je lozinka korisničko ime u ravnom ili obrnutom formatu.

Ako pokušate kreirati novog korisnika koji ne ispunjava pravila lozinki, naići ćete na takve greške kao što je prikazano.

Sažetak

Ovim je završena tema o sigurnosti sistema i osnovama sigurnosti općenito. U cijelom poglavlju bacili smo svjetlo na osnovne sigurnosne mjere koje možete primijeniti kako biste zaštitili svoj Linux sistem od zlonamjernih korisnika kao što su hakeri ili nezadovoljni zaposlenici.