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


Kao što svi znamo, root korisnik je kralj i ima neograničene privilegije nad Linux sustavom. No nekorijenski korisnici ograničeni su na osnovne zadatke. Osim toga, sudo korisnici dobivaju samo određeni stupanj root povlastica koje root korisnik smatra prikladnim za obavljanje određenih povišenih zadataka.

Problemi nastaju kada obični korisnici imaju nekontroliran pristup resursima ili su nenamjerno eskalirani na root. Ovo je ozbiljan sigurnosni rizik koji bi mogao uzrokovati proboje, neželjene izmjene i, u najgorem slučaju, pad sustava. Još jedan potencijalni rizik je kada datoteke imaju manje sigurne dozvole za datoteke. Na primjer, datoteke za pokretanje s dopuštenjima pisanja za globalne korisnike mogu se lako izmijeniti ili oštetiti, što može dovesti do kvara sustava.

Iako možemo implementirati fizičku, mrežnu i podatkovnu sigurnost, zlonamjerni korisnik može zaobići sigurnosne mjere i iskoristiti takve sigurnosne rupe. Iz tog razloga sigurnost datotečnog sustava treba shvatiti ozbiljno. Pruža dodatnu razinu obrane u slučaju napada ili insajderskih prijetnji od strane zlonamjernih zaposlenika koji ne moraju raditi teške poslove u zaobilaženju sigurnosnih mjera za pristup datotekama.

U sigurnosti sustava usredotočit ćemo se na sljedeće ključne točke:

  • Prava pristupa – korisnička i grupna dopuštenja.
  • Provedite pravila zaporke s PAM modulom.

Prava pristupa – odvajanje korisnika i grupe

Vjerojatno ste čuli da se sve u Linuxu smatra datotekom. A ako nije, to je proces. Svaka datoteka na Linux sustavu je u vlasništvu korisnika i grupe korisnika. Također ima dopuštenja za datoteke za 3 kategorije korisnika: Korisnik (u), Grupa (g) i Ostali (o). Dopuštenja su predstavljena u čitanju, pisanju i izvršavanju (rwx) za svaku kategoriju korisnika.

rwx        rwx	     rwx
User       Group     Others

Kao što smo vidjeli prije, u odjeljku Osnove Linuxa možete vidjeti dopuštenja za datoteke pomoću dugog formata naredbe ls kao što je prikazano.

ls -l

Samo da rezimiramo, dopuštenja su obično predstavljena s devet znakova. Prva tri znaka predstavljaju prava pristupa stvarnog korisnika koji posjeduje datoteku. Drugi skup znakova predstavlja dopuštenja vlasnika grupe datoteke. Konačno, zadnji set za druge ili globalne korisnike. Ovi su znakovi stalno u redoslijedu čitaj, pišu, izvršavaju (rwx).

Nakon dopuštenja, imamo korisnička i grupna vlasništva, nakon čega slijedi veličina datoteke ili direktorija, datum izmjene i na kraju naziv datoteke.

Promjena dopuštenja i vlasništva datoteke/direktorija

Korisnička dopuštenja datoteka i direktorija mogu se mijenjati prema potrebi. Osnovno pravilo je korištenje načela sigurnosti s najmanjim privilegijama. Jednostavno rečeno, osigurajte da korisnici dobiju minimalna prava pristupa ili dopuštenja potrebna za obavljanje posla.

Načelo najmanjih privilegija ograničava korisnike samo na određene uloge i na taj način minimizira rizik da napadači pristupe kritičnim podacima i izmijene ih korištenjem korisničkog računa niske razine. Također smanjuje površinu napada i ograničava širenje zlonamjernog softvera u slučaju da napadač preuzme kontrolu nad vašim sustavom.

Stoga, ako korisnik treba samo vidjeti sadržaj datoteke ili direktorija, ne bi mu trebalo dodijeliti dopuštenje za izvršavanje ili pisanje. Na vrlo osnovnoj razini dodijelite samo najmanje dopuštenja i vlasništva koja su potrebna korisniku za izvršavanje zadataka. Pozabavili smo se time kako izmijeniti korisnička dopuštenja i vlasništvo nad datotekama/imenicima pomoću naredbi chmod i chown u temi osnovnih Linux naredbi.

Sticky Bit Permission Mode

Kako bi administrator sustava lakše upravljao dopuštenjima, posebna dopuštenja ili prava pristupa mogu se dodijeliti cijelim imenicima. Jedno od posebnih dopuštenja koje se može primijeniti za ograničavanje brisanja i izmjene datoteke ili direktorija je ljepljivi bit.

Ljepljivi dio

U scenariju u kojem zajedničkom imeniku mogu pristupiti svi korisnici u sustavu ili mreži, postoji potencijalni rizik da neki korisnici mogu izbrisati ili izmijeniti datoteke unutar imenika. Ovo nije poželjno ako želite zadržati cjelovitost sadržaja direktorija. I tu dolazi na scenu ono ljepljivo.

Ljepljivi bit je posebna dozvola za datoteku postavljena na datoteku ili cijeli direktorij. Samo vlasniku te datoteke/direktorija daje dopuštenje za brisanje ili mijenjanje sadržaja datoteke ili direktorija. Nijedan drugi korisnik ne može brisati ili mijenjati datoteku/direktorij. Ima simboličku vrijednost t i numeričku vrijednost 1000.

Za uključivanje ljepljivog bita u imeniku upotrijebite chmod naredbu na sljedeći način:

chmod +t directory_name

U donjem primjeru primijenili smo ljepljivi bit na direktorij pod nazivom test. U slučaju imenika, sav će sadržaj naslijediti dopuštenja ljepljivih bitova. Možete provjeriti dopuštenja ljepljivih bitova pomoću naredbe ls -ld. Svakako primijetite simbol t na kraju dopuštenja datoteke.

ls -ld test

Ako drugi korisnik pokuša izbrisati direktorij ili izmijeniti datoteku unutar imenika, dočekat će ga pogreška Dozvola odbijena.

I to je bit dopuštenja stick bit datoteke.

Praćenje SUID i SGID dozvola

SUID (Set User ID) još je jedno posebno dopuštenje za datoteku koje drugom redovnom korisniku omogućuje pokretanje datoteke s dopuštenjima za datoteku vlasnika datoteke. Obično se označava simboličkom vrijednošću s na korisničkom dijelu dopuštenja datoteke umjesto x koji predstavlja dopuštenja za izvršenje. SUID ima numeričku vrijednost 4000.

SGID (Postavi ID grupe) omogućuje običnom korisniku da naslijedi dopuštenja grupe od vlasnika grupe datoteka. Umjesto x za dopuštenja izvršenja, vidjet ćete s u grupnom dijelu dopuštenja datoteke. SGID ima numeričku vrijednost 2000.

Koliko god se ispostavilo da su prikladne, dozvole SUID i SGID povezane su sa sigurnosnim rizicima i treba ih izbjegavati pod svaku cijenu. To je zato što daju posebne privilegije redovnim korisnicima. Ako uljez koji se predstavlja kao obični korisnik naiđe na izvršnu datoteku u vlasništvu root korisnika s postavljenim bitom SUID, može iskoristiti tu rupu u zakonu i iskoristiti sustav.

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

find / -perm -4000 type -f

Za pokretanje imenika:

find / -perm -4000 type -d

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

find / -perm -2000 type -f

Za imenike izvršite:

find / -perm -2000 type -d

Da biste uklonili SUID bit iz datoteke, pokrenite naredbu chmod kao što je prikazano:

chmod u-s /path/to/file

Za uklanjanje SGID bita na datoteci izvršite naredbu:

chmod g-s filename /path/to/file

Provedite pravila za lozinke s PAM modulom

Nije neuobičajeno da korisnici postavljaju slabe lozinke. Dobar broj postavlja kratke, jednostavne lozinke koje je lako pogoditi kako ih ne biste zaboravili tijekom prijave. Iako su praktične, slabe lozinke mogu se lako probiti korištenjem skripti za brutalni napad.

Modul PAM (Pluggable Authentication Module) je modul koji administratorima sustava omogućuje provođenje pravila o lozinkama na Linux sustavima. Da biste to postigli, potreban vam je modul pam_pwquality koji pruža biblioteka libpam_pwquality. Modul pam_pwquality provjerava snagu lozinke prema skupu pravila i rječniku sustava i precizno otkriva slabe izbore lozinki.

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

sudo apt install libpam_pwquality

Za RHEL/CentOS 8 pokrenite naredbu:

sudo dnf install libpwquality

Konfiguracijska datoteka se nalazi na sljedećem mjestu:

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

Konfiguriranje pravila o lozinkama

Prije nego što počnemo mijenjati PAM konfiguracijsku datoteku, prvo razmislimo o prikupljanju uvida o kontrolama starenja zaporke.

Pojedinosti o starenju lozinke

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

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

  • PASS_MAX_DAYS: Maksimalni broj dana koliko se lozinka može koristiti.
  • PASS_MIN_DAYS: Minimalni broj. dopuštenih dana između promjena lozinke.
  • PASS_WARN_AGE: Upozorenje o broju dana prije isteka lozinke.

Zadane vrijednosti navedene su 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 u sustav. Prema zadanim postavkama, ova je vrijednost 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 život.

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

PASS_MAX_DAYS  30

Nakon isteka 30 dana, korisnik će biti prisiljen promijeniti svoju lozinku u drugu.

Atribut PASS_MIN_DAYS navodi minimalno trajanje u kojem korisnici mogu koristiti svoju lozinku prije nego što je promijene. Što 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 tijekom kojih će korisnik dobiti upozorenje o skorom isteku lozinke prije nego što ona istekne. Na primjer, ovo možete postaviti na 7 dana kao što je prikazano.

PASS_MAX_DAYS  7

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

Postavljanje složenosti lozinke s PAM modulom

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

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 u nastavku.

password        requisite          pam_pwquality.so retry=3

Opcija ponovo pokušaj postavlja najveći broj puta od kojih morate unijeti ispravnu lozinku prije nego što dobijete pogrešku. Prema zadanim postavkama ovo je postavljeno na 3. Ovo je samo jedna opcija, a 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 

Idemo konkretizirati ove atribute.

  • minlen=10: postavlja minimalnu prihvatljivu veličinu zaporke. U ovom slučaju, 10 znakova.
  • difok=3: Ovo je najveći broj znakova koji su prisutni u prethodnoj zaporci.
  • lcredit=-1: ovo je minimalni broj malih slova koji bi trebao biti prisutan u lozinci.
  • ucredit=-1: Maksimalni je broj malih slova koji bi trebao biti prisutan u zaporci.
  • dcredit=-1: Minimalan broj numeričkih znakova koji bi trebao biti definiran u lozinci.
  • ocredit=-1: Minimalni broj posebnih znakova, npr. @, #, & koji bi trebao biti definiran u zaporci.
  • reject_username: Ova opcija pokreće odbijanje lozinke ako je lozinka korisničko ime u ravnom ili obrnutom formatu.

Ako pokušate stvoriti novog korisnika koji ne zadovoljava pravila zaporke, naići ćete na pogreške kao što je prikazano.

Sažetak

Ovime je zaključena tema o sigurnosti sustava 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 sustav od zlonamjernih korisnika kao što su hakeri ili nezadovoljni zaposlenici.