# Veebiserveris hiljuti muudetud failide leidmine

> Muudetud failide leidmine Linuxis: ajaaken käsuga find, mtime ja ctime õige tõlgendamine, võrdlus pakettide ja varukoopiatega ning valehäirete välistamine.

Allikas: https://phpsos.de/et/blog/geaenderte-dateien-finden/  
Seis: 25.10.2026  
Pakkuja: PHP SOS, PHP hädaabi ja serveri turvalisus. Kohene abi WhatsAppis: https://wa.me/491736494914?text=Tere%2C%20PHP%20SOS%2C%20vajame%20abi%20oma%20PHP-serveriga.%20Ettev%C3%B5te%3A%20%E2%80%A6%20Veebisait%3A%20%E2%80%A6

**Lühidalt:** Muudetud faile leiate Linuxis käsuga `find` ja ajaaknaga, näiteks alates 17. oktoobrist 2026, meediaaruannete kohaselt esimesest täheldatud PHP2Shelli rünnakukatsest. Kontrollige seejuures mitte ainult sisu muutmisaega (mtime), vaid ka metaandmete oma (ctime), sest esimest on lihtne võltsida. Usaldusväärseks muutub tulemus alles võrdlusega paketi kontrollsummade, Giti või varukoopiaga.

## Miks ajatemplid on hea algus, kuid mitte tõend

Kes toob serverisse koodi, muudab faile. Uued veebishellid, kohandatud seadistusfailid, olemasolevatesse skriptidesse lisatud read: see kõik jätab ajatemplid. Muudatuste otsimine õiges ajaaknas on seetõttu üks kiiremaid teid esimeste leidudeni.

PHP2Shelli puhul sobib akna alguseks 17. oktoober 2026, meediaaruannete kohaselt esimese täheldatud rünnakukatse päev. Paigad ilmusid 21. oktoobril. Kes uuendas oma serveri alles pärast seda, otsib oma uuenduse päevani ja kaugemalegi. Kuidas veebishelle leidude seast ära tunda, kirjeldab [Veebishelli tuvastamine ja eemaldamine](https://phpsos.de/et/ratgeber/webshell-erkennen/). Siin on jutt otsingu meetodist endast.

## Faili kolm ajatemplit

Linux salvestab iga faili kohta mitu ajahetke. Muutuste otsimisel on otsustavad kaks.

| Ajatempel | Tähendus | Kas võltsitav? |
|---|---|---|
| mtime | sisu viimane muutmine | jah, nt käsuga `touch`, igaühe poolt, kes tohib faili kirjutada |
| ctime | sisu või metaandmete, nagu õigused, viimane muutmine | mitte lihtsate vahenditega |
| atime | viimane lugemine | sageli välja lülitatud või ebatäpne, otsinguks vähe sobiv |

Ründajad dateerivad mtime'i meelsasti naaberfailide kuupäevale tagasi, et uus fail silma ei jääks. ctime muutub seejuures aga kaasa. Vana mtime'i ja värske ctime'iga fail on seetõttu tugev märk manipuleerimisest.

Võrdlemisel jälgige ajavööndeid. `find` ja `ls` näitavad serveri kohalikku aega, paljud logifailid ja teenused töötavad aga UTC-s. Kes paneb failisüsteemi ja logide leiud kõrvuti, peaks kõik andmed ümber arvutama samasse ajavööndisse, muidu ei haaku sündmused näiliselt kokku. Paigad ilmusid ligikaudu 21. oktoobril kell 14:00 UTC, see tähendab kell 16 Saksamaa aja järgi.

## Muudetud failide leidmine Linuxis käsuga find

Kõik käsud ainult loevad. Kohandage tee ja kuupäev.

```bash
# Sisu muudetud alates 17.10.2026, sorteeritud, koos mtime, ctime ja omanikuga
find /var/www -type f -newermt "2026-10-17" -printf '%TY-%Tm-%Td %TH:%TM  %CY-%Cm-%Cd %CH:%CM  %u  %p\n' | sort

# Metaandmed muudetud alates 17.10.2026 (leiab ka tagasi dateeritud failid)
find /var/www -type f -newerct "2026-10-17" -printf '%C+  %T+  %p\n' | sort

# Tuntud müra välja filtreerimine: vahemälu, logid, sessioonid
find /var/www -type f -newerct "2026-10-17" \
  -not -path "*/cache/*" -not -path "*/logs/*" -not -path "*/sessions/*" -printf '%C+  %p\n' | sort

# Vaadake järele ka väljaspool veebikataloogi
find /etc /usr/local/bin /tmp /var/tmp /dev/shm -xdev -type f -newerct "2026-10-17" -printf '%C+  %p\n' 2>/dev/null | sort
```

Võrrelge iga leiu juures mõlemat ajatemplit. Kui ctime on märgatavalt noorem kui mtime ja keegi ei ole sel ajal õigusi muutnud ega faile kopeerinud, kuulub fail nimekirja. Jälgige ka omanikku: veebiserveri kasutaja fail juurutuskasutaja failide vahel jääb silma.

Ärge unustage peidetud faile ja katalooge. Nimesid, mis algavad punktiga, paljud failihaldurid ja lihtne `ls` ei näita. Ründajad kasutavad seda meelsasti, samuti nimesid, mis on päris failidega äravahetamiseni sarnased.

```bash
# Peidetud failid ja kaustad veebikataloogis, ilma tuntud nagu .htaccess ja .git
find /var/www -name ".*" -not -name ".htaccess" -not -name ".well-known" -not -path "*/.git/*" -printf '%C+  %u  %p\n' | sort
```

## Võrdlus usaldusväärse allikaga

Ajatemplid näitavad, kus midagi on liikunud. Kas see oli legitiimne muudatus, näitab alles võrdlus allikaga, mida usaldate.

1. **Paketihaldus:** Süsteemifailide puhul kontrollivad `dpkg --verify` (Debian/Ubuntu) või `rpm -Va` (RHEL-perekond) faile paigaldatud pakettide kontrollsummade vastu. Seadistusfailid erinevad legitiimselt, programmifailid mitte.
2. **Git:** Kui rakendus asub hoidlas, näitab `git -C /var/www/projekt status --porcelain` iga kõrvalekallet viimasest commitist.
3. **CMS-i kontrollsummad:** Paljud süsteemid oskavad oma tuumafaile ametlike kontrollsummadega võrrelda, vt [CMS-i tuumafailide võrdlemine originaaliga](https://phpsos.de/et/blog/cms-kerndateien-vergleichen/).
4. **Varukoopia enne intsidenti:** Proovikäivituses võrdlus loetleb erinevused midagi kopeerimata.

```bash
# Varukoopia seisu ja töötava süsteemi erinevuste ainult loetlemine (proovikäivitus, ei kopeeri midagi)
rsync -rcn --out-format="%n" /backup/www-2026-10-15/ /var/www/
```

Varukoopiaga võrdlus eeldab, et varukoopia tekkis enne intsidenti ja seda ei ole ise muudetud. Miks eraldi hoitud varukoopiad on siin otsustavad, selgitab [Varukoopiad 3-2-1 reegli järgi](https://phpsos.de/et/ratgeber/backups-3-2-1/).

> **Näpunäide:**
> Salvestage iga otsingu tulemused kuupäevaga serverist väljaspool asuvasse faili. Neist nimekirjadest tekib hiljem intsidendi ajajoon ja need tõendavad, mida te millal kontrollisite.

## Kui varukoopiat ega hoidlat pole

Paljudel väiksematel veebisaitidel puudub puhas võrdlusalus: Giti ei ole, varukoopiat enne intsidenti ei ole, pluginaid on aastaid käsitsi uuendatud. Päris ilma tugipunktita te siiski ei ole.

Laadige CMS ja laiendused tootja juurest alla täpselt paigaldatud versioonides ja võrrelge neid faile serveriga. Mis seal erineb või puudub, väärib pilku. Alles jäävad teie enda kohandused, üleslaadimised ja seadistus; seal aitab ajatemplite otsing, täiendatuna pilguga omanikule ja õigustele. Failid, millel on kataloogis ainsana teine grupp, teised õigused või naabritest märgatavalt noorem ctime, kuuluvad nimekirja.

Ausalt öeldes: ilma võrdlusaluseta jääb jääkmääramatus. Tundlike andmetega süsteemide puhul on puhastest allikatest uuesti ülesehitamine siis sageli usaldusväärsem kui iga üksiku muudetud faili otsimine. Tuleviku jaoks on õppetund lihtne: hoidla koodi jaoks ja korrapärased, eraldi hoitud varukoopiad.

## Tüüpilised veaallikad otsingul

- **Liiga heldelt välistatud:** vahemälu- ja üleslaadimiskaustad on armastatud peidukohad.
- **Kontrolliti ainult mtime'i:** tagasi dateeritud failid lipsavad läbi.
- **Juurutus ajaaknas:** tavaline juurutus muudab sadu faile ja varjab üksikuid leide. Võrrelge hoidlaga.
- **Failid juba avatud või kopeeritud:** ajatempleid säilitamata kopeerimine hävitab jäljed. Kindlustage tööriistadega, mis ajatemplid säilitavad.
- **Otsiti ainult veebikataloogist:** ründajad paigutavad tööriistu ka kataloogidesse `/tmp`, `/dev/shm` või veebiserveri kasutaja kodukataloogi.
- **Õiguste muutused märkamata:** fail, mille õigused lubavad äkitselt kõigile kirjutamist, on leid, ka kui selle sisu on muutumatu.

Kuidas leiud kokku ahelaks sobitada, näitab [Intsidendi ajajoone koostamine](https://phpsos.de/et/blog/zeitleiste-eines-vorfalls/).

## Kuidas PHP SOS konkreetselt aitab?

- **Süstemaatiline otsing:** Läbime veebikataloogid ja süsteemiteed muudatuste leidmiseks asjakohases ajaaknas ning hindame mtime'i ja ctime'i koos.
- **Originaalide vastu kontroll:** Võrdleme pakettide, hoidla, CMS-i kontrollsummade ja teie varukoopiatega.
- **Leidude hindamine:** Eristame tavalisi muudatusi manipulatsioonidest ja kindlustame tõendeid.
- **Puhastamine:** [Kahjuliku tarkvara eemaldamisega](https://phpsos.de/et/leistungen/malware-entfernung/) taastame puhta seisu ja dokumenteerime selle.


## Korduma kippuvad küsimused

**Kuidas leian kõik failid, mida on teatud kuupäevast alates muudetud?**  
Käsuga find ja valikuga -newermt, näiteks find /var/www -type f -newermt "2026-10-17". Metaandmete muudatuste jaoks kasutage valikut -newerct. Mõlemad käsud ainult loevad ega muuda midagi.

**Mis vahe on mtime'il ja ctime'il?**  
mtime on sisu viimase muutmise ajahetk ja seda saab lihtsate vahenditega tagasi dateerida. ctime on sisu või metaandmete viimase muutmise ajahetk ja seda ei saa nii lihtsalt võltsida. Kui need kaks erinevad tugevalt, tasub täpsemalt vaadata.

**Kuidas välistan otsingust vahemälufailid?**  
Valikuga -not -path tuntud vahemälu-, logi- ja sessioonikaustade jaoks. Ärge välistage aga liiga heldelt, sest ründajad paigutavad faile meelsasti just sinna, kus palju muudatusi on normaalne.

**Milline kontroll on kõige usaldusväärsem?**  
Võrdlus usaldusväärse allikaga: paketihalduse kontrollsummad, Giti hoidla või varukoopia enne intsidenti. Ajatemplid on hea algus, kuid mitte tõend.

## Allikad

- [BSI: Saksamaa föderaalne infoturbeamet](https://www.bsi.bund.de/)
- [Debian Security Tracker](https://security-tracker.debian.org/)
- [OWASP Cheat Sheet Series](https://cheatsheetseries.owasp.org/)
