APRAŠYMAS
Įsivaizduokite — vidurnaktį gaunate įspėjimą, serveris elgiasi keistai. Prisijungiate per SSH ir… nežinote kur žiūrėti. Kur yra logai? Kur konfigūracijos failai? Kur apskritai viskas yra? Neišmanant Linux failų sistemos struktūros esate kaip svetimšalis svetimame mieste be žemėlapio. Šis žemėlapis — prieš jus.
KO IŠMOKSITE
Kaip suorganizuota Linux failų sistema ir kuo ji skiriasi nuo Windows
Kas yra kiekvienoje pagrindinėje direktorijoje
Kur saugomi konfigūracijos failai, logai, binariniai failai ir duomenys
Kodėl FHS struktūra svarbi saugumui
Kaip naudoti failų sistemos žinias tiriant incidentus
VISKAS YRA FAILAS
Linux sistemoje viskas yra failas. Ne tik dokumentai ir programos — bet ir įrenginiai, procesai, tinklo ryšiai. Kietasis diskas yra failas. Klaviatūra yra failas. Operatyvioji atmintis yra failas. Tai ne metafora — tai architektūrinis principas, kuris daro Linux nepaprastai lanksčia ir nuspėjama sistema.
Linux failų sistema prasideda nuo šaknies — simbolio /. Viskas kita yra jo viduje. Nėra C:\ ir D:\ diskų kaip Windows sistemoje — yra vienas direktorijų medis, į kurį montuojami visi įrenginiai ir skaidiniai.
FHS STANDARTAS
Linux direktorijų struktūrą apibrėžia FHS standartas — Filesystem Hierarchy Standard. Tai ne atsitiktinis aplankų rinkinys, o aiškiai aprašytas susitarimas apie tai, kas kur turi būti. Kiekvienas Linux distributyvus laikosi šio standarto — todėl žinodami Ubuntu struktūrą iš karto orientuositės ir Debian, ir Rocky Linux sistemose.
FAILŲ SISTEMOS ŽEMĖLAPIS
/
├── etc/ # visų servisų konfigūracijos failai
│ ├── ssh/ # SSH konfigūracija
│ ├── nginx/ # nginx konfigūracija
│ ├── systemd/ # systemd konfigūracija
│ └── cron.d/ # cron užduotys
├── var/ # kintamieji duomenys
│ ├── log/ # sistemos ir servisų logai
│ │ ├── auth.log # prisijungimo bandymai
│ │ ├── syslog # sistemos įvykiai
│ │ └── nginx/ # žiniatinklio serverio logai
│ ├── www/ # svetainių failai
│ └── lib/ # programų duomenys
├── home/ # vartotojų namų direktorijos
│ └── username/
│ └── .ssh/ # vartotojo SSH raktai
├── root/ # root vartotojo namų direktorija
├── bin/ -> usr/bin/ # sisteminės komandos
├── sbin/ -> usr/sbin/ # administravimo komandos
├── usr/
│ ├── bin/ # vykdomieji failai
│ ├── sbin/ # sisteminės priemonės
│ └── lib/ # bibliotekos
├── tmp/ # laikinieji failai (pavojinga zona!)
├── proc/ # virtuali FS — procesai ir branduolys
│ └── sys/ # branduolio parametrai (sysctl)
├── sys/ # virtuali FS — įrenginiai
├── dev/ # įrenginių failai
│ ├── sda # pirmasis diskas
│ ├── null # juodoji skylė
│ └── urandom # atsitiktinių skaičių generatorius
├── boot/ # įkroviklis ir branduolys
├── lib/ -> usr/lib/ # bibliotekos
├── opt/ # trečiųjų šalių programinė įranga
├── srv/ # servisų duomenys
├── mnt/ # laikinos montavimo vietos
└── media/ # keičiamieji įrenginiai
PAGRINDINĖS DIREKTORIJOS
/ — failų sistemos šaknis. Viskas prasideda čia. Galvokite apie ją kaip apie medžio kamieną — visos kitos direktorijos yra šakos.
/etc — sistemos konfigūracijos širdis. Čia gyvena visi konfigūracijos failai: tinklo nustatymai, SSH, nginx, PostgreSQL, cron ir šimtai kitų servisų. Jei kažkas konfigūruojama — konfigūracijos failas beveik tikrai yra /etc. Tai pirma vieta, kur administratorius žiūri tyrinėdamas sistemą — ir pirma vieta, kur užpuolikas žiūri po įsilaužimo. Gavai prieigą prie /etc — laikyk, gavai prieigą prie visos sistemos.
/var — kintamieji duomenys. Viskas, kas keičiasi sistemos veikimo metu: logai, duomenų bazės, pašto eilės, paketų talpykla. Čia auga failai, kurie gali užpildyti diską, jei jų nestebėsite. Vienas užpildytas /var gali pargriūti visą serverį — be jokios išorinės atakos.
/var/log — logų direktorija. Čia saugoma visų sistemos įvykių istorija. /var/log/auth.log — prisijungimo ir autorizacijos bandymai. /var/log/syslog — sistemos įvykiai (jei įdiegtas rsyslog). Sistemose su grynu systemd logai skaitomi per journalctl. Bet kurio incidento atveju pirmiausia einame čia. Beje, pirmas dalykas, kurį protingas užpuolikas padaro po įsilaužimo — išvalo būtent šiuos logus.
/home — vartotojų namų direktorijos. Kiekvienas turi savo: /home/username. Čia saugomi asmeniniai failai ir SSH raktai (~/.ssh/).
SSH raktų prieigos teisės — kritiškai svarbi tema. Privatus raktas su teisėmis 644 — tai saugumo skylė, didelė kaip vartai. Teisės 644 reiškia, kad raktą gali perskaityti bet kuris sistemos vartotojas. Tai yra, jei serveryje yra bent viena pažeista paskyra — užpuolikas perskaito jūsų privatų raktą ir prisijungia prie kiekvieno serverio, kurį tas raktas atrakiną. Teisingos teisės: 600 rakto failui ir 700 ~/.ssh direktorijai. SSH pats atsisakys veikti, jei pamatys, kad raktas yra „per atviras” — išmes klaidą „Permissions are too open”.
/root — supervartotojo root namų direktorija. Atskira nuo /home — sąmoningai. Root nėra paprastas vartotojas ir jo namai atitinkami.
/bin ir /usr/bin — sisteminių komandų vykdomieji failai. ls, cp, mv, cat ir tūkstančiai kitų priemonių. Šiuolaikiniuose distributyvuose /bin yra simbolinė nuoroda į /usr/bin. Jei šiuos failus kažkas pakeitė — sistema yra pažeista žemiausiame lygyje.
/sbin ir /usr/sbin — sistemos administravimo priemonės. Komandos, kurioms reikalingos root teisės: fdisk, iptables, useradd. Paprastiems vartotojams jos neprieinamos — ir tai teisinga.
/tmp — laikinieji failai. Išvaloma perkrovus sistemą. Bet kuris vartotojas gali rašyti į /tmp — tai klasikinė vieta, kur užpuolikai palieka savo įrankius po įsilaužimo. Po perkrovimo pėdsakai išnyksta. Įtartini vykdomieji failai /tmp — geras įsilaužimo požymis.
/proc — virtuali failų sistema. Neegzistuoja diske — branduolys ją sukuria atmintyje paleidžiant sistemą. Joje yra informacija apie vykdomus procesus ir branduolio parametrus. /proc/sys/ — čia gyvena parametrai, kuriuos keičiame per sysctl. Norite žinoti, kas iš tikrųjų vyksta sistemoje dabar — žiūrėkite į /proc.
/sys — dar viena virtuali failų sistema. Informacija apie įrenginius ir branduolio tvarkykles. Kaip /proc, bet apie aparatinę įrangą.
/dev — įrenginių failai. /dev/sda — pirmasis kietasis diskas. /dev/null — „juodoji skylė”, į kurią galima nukreipti bet kokią išvestį, kurios nereikia. /dev/random ir /dev/urandom — atsitiktinių skaičių generatoriai, naudojami kriptografijoje. Be /dev/urandom neveiktų nė vienas SSL sertifikatas.
/boot — sistemos įkrovos failai. Linux branduolys, initrd, GRUB įkroviklio konfigūracija. Lieskite tik esant būtinybei — klaida čia ir sistema apskritai neįsikraus.
/lib ir /usr/lib — bibliotekos. Bendras kodas, kurį naudoja daug programų — Linux analogas Windows DLL failams. Bibliotekos pakeitimas yra vienas atakos metodų — vadinamas library hijacking.
/opt — papildoma programinė įranga. Programos, kurios netinka į standartinę FHS struktūrą. Dažnai naudojama komercinei programinei įrangai ir savarankiškai sukompiliuotoms programoms.
/srv — servisų duomenys. Pagal FHS standartą čia turėtų būti serverio teikiami duomenys — svetainių failai, FTP duomenys. Praktikoje daugelis distributyvų naudoja /var/www žiniatinklio duomenims.
/mnt ir /media — montavimo taškai. /mnt — laikinas failų sistemų montavimas administratoriaus. /media — keičiamiems įrenginiams (USB, CD).
PRAKTIKA
Peržiūrėkite šakninę failų sistemos struktūrą:
ls -la /
Ištirkite /etc turinį:
ls /etc | head -30
Peržiūrėkite sistemos logus:
ls -la /var/log/
Raskite visus SSH konfigūracijos failus:
ls -la /etc/ssh/
Peržiūrėkite sistemos informaciją per /proc:
cat /proc/version
cat /proc/cpuinfo | head -20
cat /proc/meminfo | head -10
Patikrinkite branduolio parametrus, kurie įtakoja saugumą:
cat /proc/sys/net/ipv4/ip_forward
cat /proc/sys/kernel/dmesg_restrict
Sužinokite, kiek vietos užimta diskuose:
df -h
Raskite didžiausius failus /var/log:
du -sh /var/log/* | sort -rh | head -10
DAŽNIAUSIOS KLAIDOS
Programų duomenų saugojimas /tmp. Tai laikinoji direktorija — viskas joje ištrinami perkrovus sistemą. Programų duomenys turi būti /var arba /opt.
/var užpildymo ignoravimas. Logai auga, paketų talpykla kaupiasi — ir vieną dieną /var užsipildo iki 100%. Sistema pradeda elgtis nenuspėjamai. Sukonfigūruokite logrotate ir disko vietos stebėjimą.
Programoms suteikiamos rašymo teisės į /etc. Konfigūracijos failus turi keisti tik administratorius, ne programa. Jei programa pati rašo į /etc — tai raudonas vėliavėlė.
Slaptų duomenų saugojimas /tmp arba /home. SSH raktai, slaptažodžiai, token’ai — tik direktorijose su tinkamai apribotomis prieigos teisėmis.
SVARBU ŽINOTI
/proc ir /sys neužima vietos diske — tai virtualios failų sistemos atmintyje. Nebandykite jų išvalyti norėdami atlaisvinti vietos.
Simbolinės nuorodos — /bin → /usr/bin, /lib → /usr/lib — yra normalios šiuolaikiniuose distributyvuose. Neišsigąskite, kai jas pamatysite ls -la išvestyje.
Montavimo taškai yra tiesiog direktorijos. Kai montuojate diską į /mnt/backup, disko turinys tampa pasiekiamas per tą direktoriją. Atmontuosite — direktorija lieka, tik tuščia.
Failų sistemos saugumas prasideda nuo teisingų prieigos teisių. Konfigūracijos failas su teisėmis 777 — katastrofa. Teisingos teisės: /etc — 755, privatiems raktams — 600, .ssh direktorijai — 700.
PATIKRINKITE SAVE
1. Kurioje direktorijoje saugomi visų servisų konfigūracijos failai?
2. Kur ieškoti sistemos ir servisų logų tiriant incidentą?
3. Kuo /proc skiriasi nuo įprastos direktorijos diske?
4. Kodėl /tmp yra pavojinga saugumo požiūriu?
5. Kokios prieigos teisės turi būti nustatytos privačiam SSH raktui ir kodėl?
IŠVADOS
Linux failų sistema nėra chaosas — tai aiškiai suorganizuota struktūra su logika už kiekvienos direktorijos. Šios struktūros žinojimas yra pagrindinis saugumo administratoriaus įgūdis. Kai įvyks incidentas — o jis įvyks — žinosite tiksliai kur žiūrėti: /var/log logams, /etc konfigūracijoms, /proc sistemos būsenai. Šios žinios sutaupo minutes kritinėje situacijoje. O kai serveris yra atakuojamas, minutės — tai viskas.