LFCA: Kako izboljšati varnost sistema Linux - 20. del


Kot vsi vemo, je root uporabnik kralj in ima neomejene privilegije nad sistemom Linux. Nekorenski uporabniki pa so omejeni na osnovna opravila. Poleg tega uporabniki sudo dobijo le določeno stopnjo korenskih pravic, za katere korenski uporabnik meni, da so primerni za izvajanje določenih povišanih nalog.

Težave se pojavijo, kadar imajo redni uporabniki nenadzorovan dostop do virov ali se nenamerno stopnjujejo do korenin. To je resno varnostno tveganje, ki lahko povzroči kršitve, neželene spremembe in v najslabšem primeru sesutje sistema. Drugo potencialno tveganje je, če imajo datoteke manj varna dovoljenja za datoteke. Na primer, zagonske datoteke z dovoljenji za pisanje za globalne uporabnike je mogoče enostavno spremeniti ali poškodovati, kar ima za posledico pokvarjen sistem.

[Morda vam bo všeč tudi: Koristni nasveti za zaščito podatkov in Linux]

Čeprav lahko izvajamo fizično, omrežno in podatkovno varnost, lahko zlonamerni uporabnik zaobide varnostne ukrepe in izkoristi takšne varnostne vrzeli. Zaradi tega je treba varnost datotek vzeti resno. Zagotavlja dodatno obrambno plast pred napadi ali notranjimi grožnjami zlonamernih uslužbencev, ki jim ni treba težko dvigovati zaobilaznih varnostnih ukrepov za dostop do datotek.

Pri varnosti sistema se bomo osredotočili na naslednje ključne točke:

  • Pravice dostopa - dovoljenja za uporabnike in skupine.
  • Uveljavite politike gesel z modulom PAM.

Pravice dostopa - ločevanje uporabnikov in skupin

Verjetno ste že slišali, da se v Linuxu vse šteje za datoteko. In če ni, je to postopek. Vsaka datoteka v sistemu Linux je v lasti uporabnika in uporabnika skupine. Prav tako ima dovoljenja za datoteke za 3 uporabniške kategorije: uporabnik (u), skupina (g) in druge (o). Dovoljenja so predstavljena v branju, pisanju in izvajanju (rwx) za vsako kategorijo uporabnikov.

rwx        rwx	     rwx
User       Group     Others

Kot smo že videli, v ukazu ls, kot je prikazano.

$ ls -l

Če povzamemo, dovoljenja običajno predstavlja devet znakov. Prvi trije znaki predstavljajo pravice dostopa dejanskega uporabnika, ki je lastnik datoteke. Drugi niz znakov predstavlja dovoljenja lastnika skupine za datoteko. Končno še zadnji niz za druge ali globalne uporabnike. Ti znaki so nenehno v vrstnem redu branja, pisanja, izvrševanja (rwx).

Po dovoljenjih imamo lastništvo uporabnikov in skupin, sledijo velikost datoteke ali imenika, datum spremembe in nazadnje ime datoteke.

Spreminjanje dovoljenj za datoteke/imenike in lastništva

Uporabniška dovoljenja datotek in imenikov je mogoče spremeniti, kot se jim zdi primerno. Pravilo je, da se uporablja načelo najmanjšega privilegija. Preprosto povedano, zagotovite, da uporabniki dobijo minimalne pravice dostopa ali dovoljenja, potrebna za delo.

Načelo najmanjših privilegijev omejuje uporabnike samo na določene vloge in s tem zmanjšuje tveganje, da bi napadalci dostopali do kritičnih podatkov in jih spreminjali, tako da izkoristijo uporabniški račun z nizkim vzvodom. Prav tako zmanjšuje površino napada in omejuje širjenje zlonamerne programske opreme, če napadalec prevzame nadzor nad vašim sistemom.

Če si mora uporabnik ogledati samo vsebino datoteke ali imenika, mu zato ne sme dodeliti dovoljenj za izvajanje ali pisanje. Na zelo osnovni ravni podelite le najmanjša dovoljenja in lastništva, ki jih uporabnik potrebuje za izvajanje nalog. V osnovni temi ukazov za Linux smo se lotili, kako spremeniti uporabniška dovoljenja in lastništva datotek/imenikov z uporabo ukazov chmod in chown.

Da bi sistemski skrbnik lažje upravljal dovoljenja, lahko posebna dovoljenja ali pravice dostopa dodelijo celotnim imenikom. Eno od posebnih dovoljenj, ki ga lahko uporabite za omejevanje brisanja in spreminjanja datoteke ali imenika, je lepljivi bit.

V primeru, ko lahko do imenika v skupni rabi dostopajo vsi uporabniki v sistemu ali omrežju, obstaja tveganje, da lahko nekateri uporabniki izbrišejo ali spremenijo datoteke v imeniku. To ni zaželeno, če želite ohraniti celovitost vsebine imenika. In tu pride lepljivi delček.

Lepljivi bit je posebno dovoljenje za datoteko, nastavljeno na datoteko ali celoten imenik. Samo lastniku te datoteke/imenika podeli dovoljenje za brisanje ali spreminjanje vsebine datoteke ali imenika. Noben drug uporabnik ne more izbrisati ali spremeniti datoteke/imenika. Ima simbolično vrednost t in številčno vrednost 1000.

Za vklop lepljivega bitja v imeniku uporabite ukaz chmod, kot sledi:

$ chmod +t directory_name

V spodnjem primeru smo v imenik, imenovan test, uporabili lepljiv bit. V primeru imenika bo vsa vsebina podedovala dovoljenja za lepljivi bit. Dovoljenja za lepljivi bit lahko preverite z ukazom ls -ld. Na koncu dovoljenj datoteke opazite simbol t .

$ ls -ld test

Če drug uporabnik poskuša izbrisati imenik ali spremeniti datoteko v njem, se pozdravi z napako Zavrnjeno dovoljenje.

In to je bistvo dovoljenja za datoteko bit bit.

SUID (Set User ID) je še eno posebno dovoljenje za datoteko, ki drugemu običajnemu uporabniku omogoča zagon datoteke z dovoljenji datoteke lastnika datoteke. Običajno je označena s simbolično vrednostjo s na uporabnikovem delu dovoljenj datoteke namesto z x , ki predstavlja dovoljenja za izvajanje. SUID ima številčno vrednost 4000.

SGID, (Set Group ID) omogoča rednemu uporabniku, da podeduje dovoljenja za skupino lastnika skupine datotek. Namesto x za dovoljenja za izvajanje boste v skupinskem delu dovoljenj datoteke videli s . SGID ima številčno vrednost 2000.

Kakor koli se izkaže, da je dovoljenje SUID in SGID povezano z varnostnimi tveganji in se ju je treba izogibati za vsako ceno. To je zato, ker rednim uporabnikom podeljujejo posebne privilegije. Če vsiljivec, ki se predstavlja kot običajni uporabnik, naleti na izvršljivo datoteko, ki je v lasti korenskega uporabnika in ima nastavljen bit SUID, lahko to vrzel uporabi in izkoristi sistem.

Če želite poiskati vse datoteke z nastavljenim bitom SUID v Linuxu, zaženite ukaz find kot korenski uporabnik.

$ find / -perm -4000 type -f

Za zagnane imenike:

$ find / -perm -4000 type -d

Če želite poiskati vse datoteke z nastavljenim bitom SGID:

$ find / -perm -2000 type -f

Za imenike izvedite:

$ find / -perm -2000 type -d

Če želite odstraniti bit SUID iz datoteke, zaženite ukaz chmod, kot je prikazano:

$ chmod u-s /path/to/file

Če želite odstraniti bit SGID iz datoteke, izvedite ukaz:

$ chmod g-s filename /path/to/file

Uporabniki nenavadno nastavijo šibka gesla. Dobra številka je nastavila kratka, navadna in zlahka uganljiva gesla, da jih med prijavo ne pozabite. Šibka gesla so sicer priročna, vendar jih je mogoče zlahka zlorabiti s pomočjo skript za napad.

Modul PAM (Pluggable Authentication Module) je modul, ki sistemskim skrbnikom omogoča uveljavitev pravilnikov o geslih v sistemih Linux. Za to potrebujete modul pam_pwquality, ki ga nudi knjižnica libpam_pwquality. Modul pam_pwquality preverja moč gesla glede na nabor pravil in sistemski slovar ter ugotavlja šibke izbire gesla.

Če želite namestiti modul pam_pwquality v Ubuntu 18.04 in novejše različice, zaženite:

$ sudo apt install libpam_pwquality

Za RHEL/CentOS 8 zaženite ukaz:

$ sudo dnf install libpwquality

Konfiguracijsko datoteko najdete na tem mestu:

  • Na sistemih Debian - /etc/pam.d/common-password
  • Na sistemih RedHat - /etc/pam.d/system-auth

Preden začnemo spreminjati konfiguracijsko datoteko PAM, najprej razmislimo o zbiranju vpogledov v kontrolnike staranja gesla.

Najdete jih v datoteki /etc/login.defs.

Datoteka vsebuje naslednje ključne kontrole gesla:

  • PASS_MAX_DAYS: največje število dni uporabe gesla.
  • PASS_MIN_DAYS: Najmanjše število. dovoljenih dni med spremembami gesla.
  • PASS_WARN_AGE: Število dni opozorila pred potekom gesla.

Privzete vrednosti so navedene spodaj.

Atribut PASS_MAX_DAYS omejuje število dni, ko lahko uporabnik uporabi svoje geslo. Ko je ta vrednost dosežena ali geslo poteče, je uporabnik prisiljen spremeniti svoje geslo, da se prijavi v sistem. Privzeto je ta vrednost nastavljena na 99999, kar pomeni 273 let. Kar zadeva varnost, to nima posebnega smisla, saj lahko uporabnik še naprej uporablja svoje geslo celo življenje.

To lahko nastavite na smiselno vrednost, recimo 30 dni, kot je prikazano.

PASS_MAX_DAYS  30

Po preteku 30 dni bo uporabnik prisiljen spremeniti svoje geslo na drugo.

Atribut PASS_MIN_DAYS opisuje minimalno trajanje, ki ga lahko uporabniki uporabijo, preden ga spremenijo. Kaj to pomeni? Če je na primer ta vrednost nastavljena na 15 dni, uporabnik ne bo mogel znova spremeniti gesla, preden preteče 15 dni.

PASS_MAX_DAYS  15

Atribut PASS_WARN_AGE določa, koliko dni bo uporabnik prejel opozorilo o bližnjem izteku gesla, preden poteče. Tako lahko na primer nastavite na 7 dni, kot je prikazano.

PASS_MAX_DAYS  7

OPOMBA: Ti kontrolniki za gesla ne delujejo z že obstoječimi računi. Uporabljajo se samo za nove račune, ustvarjene po določitvi pravil.

Preden uredite datoteko /etc/pam.d/common-password, ustvarite varnostno kopijo. V tem primeru smo ustvarili datoteko za varnostno kopijo common-password.bak.

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

Nato odprite datoteko.

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

Poiščite spodnjo vrstico.

password        requisite          pam_pwquality.so retry=3

Možnost ponovnega poskusa nastavi največje število vnosov pravega gesla, preden dobite napako. Privzeto je nastavljeno na 3. To je samo ena možnost in vključili bomo več možnosti.

V vrstico dodajte naslednje atribute:

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

Izboljšajmo te lastnosti.

  • minlen = 10: nastavi najmanjšo sprejemljivo velikost gesla. V tem primeru 10 znakov.
  • difok = 3: To je največje število znakov, ki so prisotni v prejšnjem geslu.
  • lcredit = -1: To je najmanjše število malih črk, ki mora biti v geslu.
  • ucredit = -1: največje število malih črk, ki bi morale biti prisotne v geslu.
  • dcredit = -1: najmanjše število številskih znakov, ki jih je treba določiti v geslu.
  • ocredit = -1: najmanjše število posebnih znakov, npr. @, #, &, ki jih je treba določiti v geslu.
  • reject_username: ta možnost sproži zavrnitev gesla, če je geslo uporabniško ime v naravni ali obratni obliki.

Če poskusite ustvariti novega uporabnika, ki ne izpolnjuje pravil o geslih, boste naleteli na take napake, kot je prikazano.

S tem je zaključena tema o varnosti sistema in osnovah varnosti na splošno. V celotnem poglavju smo osvetlili osnovne varnostne ukrepe, ki jih lahko uporabite za zaščito sistema Linux pred zlonamernimi uporabniki, kot so hekerji ali nezadovoljni zaposleni.