LFCA: Kaip pagerinti Linux sistemos saugumą – 20 dalis


Kaip visi žinome, pagrindinis vartotojas yra karalius ir turi neribotas privilegijas Linux sistemoje. Tačiau ne root vartotojai apsiriboja pagrindinėmis užduotimis. Be to, sudo naudotojams suteikiamos tik tam tikro laipsnio root teisės, kurias root naudotojas laiko tinkamomis atlikti konkrečias aukštesnes užduotis.

Problemos kyla, kai įprasti vartotojai turi nekontroliuojamą prieigą prie išteklių arba netyčia priverčiami įsišaknyti. Tai yra rimta saugumo rizika, dėl kurios gali atsirasti pažeidimų, nepageidaujamų modifikacijų ir, blogiausiu atveju, sistemos gedimas. Kita galima rizika yra tada, kai failai turi ne tokius saugius failų leidimus. Pavyzdžiui, įkrovos failai su rašymo leidimais pasauliniams vartotojams gali būti lengvai modifikuoti arba sugadinti, todėl sistema sugenda.

Nors galime įdiegti fizinę, tinklo ir duomenų apsaugą, piktybiškas vartotojas gali apeiti saugos priemones ir pasinaudoti tokiomis saugumo spragomis. Dėl šios priežasties į failų sistemos saugumą reikia žiūrėti rimtai. Tai suteikia papildomą apsaugos lygį, kai susiduria su kenkėjiškų darbuotojų atakomis ar viešai neatskleista grėsme.

Sistemos saugumo srityje mes sutelksime dėmesį į šiuos pagrindinius dalykus:

  • Prieigos teisės – vartotojo ir grupės leidimai.
  • Įveskite slaptažodžių politiką naudodami PAM modulį.

Prieigos teisės – vartotojų ir grupių atskyrimas

Tikriausiai girdėjote, kad viskas Linux sistemoje laikoma failu. O jei ne, tai procesas. Kiekvienas „Linux“ sistemos failas priklauso vartotojui ir grupės vartotojui. Jam taip pat suteikiami 3 naudotojų kategorijų failų leidimai: naudotojas (u), grupė (g) ir kiti (o). Kiekvienos naudotojo kategorijos leidimai pateikiami skaitymo, rašymo ir vykdymo (rwx) formatu.

rwx        rwx	     rwx
User       Group     Others

Kaip matyti anksčiau, „Linux“ pagrindų skiltyje galite peržiūrėti failo teises naudodami ilgą ls komandos formatą, kaip parodyta.

ls -l

Apibendrinant, leidimai paprastai žymimi devyniais simboliais. Pirmieji trys simboliai reiškia tikrojo vartotojo, kuriam priklauso failas, prieigos teises. Antrasis simbolių rinkinys reiškia failo grupės savininko teises. Galiausiai, paskutinis rinkinys kitiems ar pasauliniams vartotojams. Šie simboliai nuolat yra skaitymo, rašymo, vykdymo (rwx) tvarka.

Gavus leidimus, mes turime naudotojų ir grupių nuosavybės teises, po kurių nurodomas failo arba katalogo dydis, modifikavimo data ir galiausiai failo pavadinimas.

Failų/katalogų leidimų ir nuosavybės teisių keitimas

Failų ir katalogų naudotojų leidimai gali būti modifikuoti, jei manoma, kad tai tinka. Nykščio taisyklė yra naudoti mažiausią privilegijų saugos principą. Paprasčiau tariant, užtikrinkite, kad vartotojai gautų minimalias prieigos teises arba leidimus, reikalingus darbui atlikti.

Mažiausių privilegijų principas apriboja vartotojus tik tam tikruose vaidmenyse ir taip sumažina riziką, kad užpuolikai pasieks ir pakeis svarbiausius duomenis, pasinaudodami žemo sverto vartotojo abonementu. Tai taip pat sumažina atakos paviršių ir riboja kenkėjiškų programų plitimą, jei užpuolikas perima jūsų sistemos valdymą.

Todėl, jei vartotojui reikia tik peržiūrėti failo ar katalogo turinį, jam neturėtų būti suteikiami vykdymo ar rašymo leidimai. Pačiame pagrindiniame lygmenyje suteikite tik mažiausius leidimus ir nuosavybės teises, kurių vartotojui reikia užduotims atlikti. Pagrindinėje „Linux“ komandų temoje mes sprendėme, kaip pakeisti failų/katalogų naudotojų teises ir nuosavybės teises naudojant chmod ir chown komandas.

Lipniojo bito leidimo režimas

Kad sistemos administratoriui būtų lengviau tvarkyti leidimus, ištisiems katalogams gali būti suteikiami specialūs leidimai arba prieigos teisės. Vienas iš specialių leidimų, kurie gali būti taikomi norint apriboti failo ar katalogo ištrynimą ir modifikavimą, yra lipnus bitas.

Lipnus truputis

Esant scenarijui, kai bendrai naudojamą katalogą gali pasiekti visi sistemos ar tinklo vartotojai, gali kilti pavojus, kad kai kurie vartotojai gali ištrinti arba modifikuoti kataloge esančius failus. Tai nepageidautina, jei norite išlaikyti katalogo turinio vientisumą. Ir čia atsiranda lipnus dalelis.

Lipnus bitas yra specialus failo leidimas, nustatytas faile arba visame kataloge. Ji suteikia tik to failo/katalogo savininkui leidimą ištrinti arba keisti failo ar katalogo turinį. Joks kitas vartotojas negali ištrinti ar keisti failo/katalogo. Jo simbolinė reikšmė yra t, o skaitinė 1000.

Norėdami kataloge įjungti lipnų bitą, naudokite chmod komandą taip:

chmod +t directory_name

Toliau pateiktame pavyzdyje katalogui, pavadintam testas, pritaikėme lipnią bitą. Katalogo atveju visas turinys paveldės lipniųjų bitų teises. Priklijuojančių bitų leidimus galite patikrinti naudodami komandą ls -ld. Būtinai atkreipkite dėmesį į simbolį t failo leidimų pabaigoje.

ls -ld test

Jei kitas vartotojas bando ištrinti katalogą arba pakeisti kataloge esantį failą, jam pateikiama klaida Leidimas atmestas.

Ir tai yra „stick bit“ failo leidimo esmė.

Stebėti SUID ir SGID leidimus

SUID (Nustatyti vartotojo ID) yra kitas specialus failo leidimas, leidžiantis kitam įprastam vartotojui paleisti failą su failo savininko leidimais. Paprastai jis žymimas simboline reikšme s naudotojo failo leidimų dalyje, o ne x, kuri reiškia vykdymo leidimus. SUID skaitinė reikšmė yra 4000.

Naudodami SGID (nustatyti grupės ID) paprastas vartotojas gali paveldėti failų grupės savininko grupės leidimus. Vietoj vykdymo leidimų x, failo leidimų grupės dalyje matysite s. SGID skaitinė vertė yra 2000.

Kad ir kokie patogūs jie būtų, SUID ir SGID leidimai yra susiję su saugumo rizika ir jų reikėtų vengti bet kokia kaina. Taip yra todėl, kad jie suteikia specialias privilegijas įprastiems vartotojams. Jei įsibrovėlis, apsimetantis paprastu vartotoju, aptinka vykdomąjį failą, priklausantį pagrindiniam vartotojui, kuriame nustatytas SUID bitas, jis gali pasinaudoti ta spraga ir išnaudoti sistemą.

Norėdami rasti visus failus su SUID bitais, nustatytais Linux sistemoje, paleiskite komandą rasti kaip pagrindinis vartotojas.

find / -perm -4000 type -f

Paleistiems katalogams:

find / -perm -4000 type -d

Norėdami rasti visus failus su SGID bitų rinkiniu, paleiskite:

find / -perm -2000 type -f

Katalogams vykdyti:

find / -perm -2000 type -d

Norėdami pašalinti failo SUID bitą, paleiskite komandą chmod, kaip parodyta:

chmod u-s /path/to/file

Norėdami pašalinti SGID bitą iš failo, vykdykite komandą:

chmod g-s filename /path/to/file

Įveskite slaptažodžio politiką naudodami PAM modulį

Neretai vartotojai nustato silpnus slaptažodžius. Daug trumpų, paprastų ir lengvai atspėjamų slaptažodžių, kad jų nepamirštumėte prisijungdami. Nors tai patogu, silpnus slaptažodžius galima lengvai pažeisti naudojant brutalios jėgos atakos scenarijus.

Modulis PAM (Pluggable Authentication Module) yra modulis, leidžiantis sistemos administratoriams vykdyti slaptažodžių politiką Linux sistemose. Kad tai padarytumėte, jums reikia modulio pam_pwquality, kurį teikia libpam_pwquality biblioteka. Modulis pam_pwquality tikrina slaptažodžio stiprumą pagal taisyklių rinkinį ir sistemos žodyną bei nustato silpnus slaptažodžio pasirinkimus.

Norėdami įdiegti pam_pwquality modulį Ubuntu 18.04 ir vėlesnėse versijose, paleiskite:

sudo apt install libpam_pwquality

Jei naudojate RHEL/CentOS 8, paleiskite komandą:

sudo dnf install libpwquality

Konfigūracijos failas yra šioje vietoje:

  • „Debian-Systems“ – /etc/pam.d/common-password
  • RedHat sistemose – /etc/pam.d/system-auth

Slaptažodžio politikos konfigūravimas

Prieš pradėdami keisti PAM konfigūracijos failą, pirmiausia apsvarstykime galimybę surinkti įžvalgų apie slaptažodžio senėjimo valdiklius.

Slaptažodžio senėjimo detalės

Juos galima rasti /etc/login.defs faile.

Faile yra šie pagrindiniai slaptažodžio valdikliai:

  • PASS_MAX_DAYS: maksimalus dienų skaičius, kurį galima naudoti slaptažodį.
  • PASS_MIN_DAYS: minimalus skaičius. dienų tarp slaptažodžio keitimų.
  • PASS_WARN_AGE: įspėjimo dienų skaičius prieš pasibaigiant slaptažodžio galiojimui.

Žemiau nurodytos numatytosios vertės.

Atributas PASS_MAX_DAYS riboja dienų, kurias naudotojas gali naudoti slaptažodį, skaičių. Pasiekus šią reikšmę arba pasibaigus slaptažodžiui, vartotojas yra priverstas pakeisti slaptažodį, kad galėtų prisijungti prie sistemos. Pagal numatytuosius nustatymus ši vertė nustatyta į 99999, o tai reiškia 273 metus. Tai nėra prasminga saugumo požiūriu, nes vartotojas gali toliau naudoti slaptažodį visą savo gyvenimą.

Galite nustatyti reikšmingą reikšmę, tarkime, 30 dienų, kaip parodyta.

PASS_MAX_DAYS  30

Praėjus 30 dienų, vartotojas bus priverstas pakeisti slaptažodį į kitą.

Atributas PASS_MIN_DAYS nurodo minimalią trukmę, kurią naudotojai gali naudoti savo slaptažodį prieš jį keisdami. Ką tai reiškia? Jei, pavyzdžiui, ši vertė nustatyta į 15 dienų, vartotojas negalės dar kartą pakeisti slaptažodžio, kol nepraeis 15 dienų.

PASS_MAX_DAYS  15

Atributas PASS_WARN_AGE nurodo dienų skaičių, per kurį naudotojas gaus įspėjimą apie gresiantį slaptažodžio galiojimo laiką, kol jis nesibaigs. Pavyzdžiui, galite nustatyti 7 dienas, kaip parodyta.

PASS_MAX_DAYS  7

PASTABA: šie slaptažodžių valdikliai neveikia su jau esančiomis paskyromis. Jie taikomi tik naujoms paskyroms, sukurtoms apibrėžus taisykles.

Slaptažodžio sudėtingumo nustatymas naudojant PAM modulį

Prieš redaguodami failą /etc/pam.d/common-password, sukurkite atsarginę kopiją. Šiame pavyzdyje sukūrėme common-password.bak atsarginės kopijos failą.

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

Tada atidarykite failą.

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

Raskite žemiau pateiktą eilutę.

password        requisite          pam_pwquality.so retry=3

Parinktis bandyti dar kartą nustato maksimalų skaičių kartų, kiek reikia įvesti tinkamą slaptažodį, kad gautumėte klaidą. Pagal numatytuosius nustatymus tai yra 3. Tai tik viena parinktis ir mes ketiname įtraukti kelias parinktis.

Į eilutę pridėkite šiuos atributus:

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

Išsiaiškinkime šias savybes.

  • minlen=10: nustato mažiausią priimtiną slaptažodžio dydį. Šiuo atveju 10 simbolių.
  • difok=3: tai didžiausias ankstesniame slaptažodžio simbolių skaičius.
  • lcredit=-1: tai mažiausias mažųjų raidžių skaičius, kuris turi būti slaptažodžiu.
  • ucredit=-1: tai didžiausias mažųjų raidžių skaičius, kuris turi būti slaptažodžiu.
  • dcredit=-1: mažiausias skaitinių simbolių skaičius, kuris turi būti apibrėžtas slaptažodžiu.
  • ocredit=-1: mažiausias specialiųjų simbolių skaičius, pvz., @, # ir, kuris turėtų būti apibrėžtas slaptažodžiu.
  • reject_username: ši parinktis suaktyvina slaptažodžio atmetimą, jei slaptažodis yra tiesioginio arba atvirkštinio formato naudotojo vardas.

Jei bandysite sukurti naują vartotoją, kuris neatitinka slaptažodžių politikos, susidursite su tokiomis klaidomis, kaip parodyta.

Santrauka

Tai baigia temą apie sistemos saugumą ir saugumo pagrindus apskritai. Visame skyriuje paaiškinome pagrindines saugos priemones, kurias galite įgyvendinti norėdami apsaugoti savo „Linux“ sistemą nuo kenkėjiškų vartotojų, tokių kaip įsilaužėliai ar nepatenkinti darbuotojai.