Perl folyamat gyilkolás

Sajnos előfordul, hogy tárhely szerverünkön hekkerek feltörnek egy-egy oldalt, és sikerül elindítaniuk egy-két szkriptet, melyek általában Perl alapúak. Ezek aztán memóriát és processzort nem kímélve próbálják feltörni a szervert, jelszavakat, adatbázist stb. Szerencsére sok kárt nem tudnak okozni, és aránylag könnyen lelepleződnek, mert a szerver CPU használata igencsak megnő. De mit lehet tenni, ha már észrevettük a problémát?

Ha még elérjük a szervert, szerencsénk van, mert a módszer nem túl nehéz. Mivel mi mindent virtualizált környezetben futtatunk, nem nehéz belépni a gépre még akkor sem, ha az már minden erőforrást felemésztett. Ha bent vagyunk keressük meg a felhasználót, aki a perl-t futtatja, ezt én a top vagy ps xa parancsokkal szoktam megkeresni. Általában könnyű észrevenni ki a hunyó, mert sok perl folyamata lesz amik ráadásul a top-ban fent vannak.

Első próbálkozás lehet a

killall -u usernév

Sajnos ez nem minden esetben vezet sikerre, mert az ügyesebb szkripteket azonnal újraindítja egy másik szkript, amit viszont a killall nem talál meg. (Ezt még elemezni fogjuk, hogy is van.) A megoldás az lsof használata ami képes kilistázni minden nyitott fájlt, és a hozzátartozó felhasználót valamint process id-t.

lsof | grep usernév | grep perl | cut -b 11-20 | uniq | xargs kill -9

Az lsof kimenetét szűrni kell a grep paranccsal a felhasználónévre és a perl-re, ebből vágjuk ki a hozzá tartozó folyamat azonosítót, amit aztán átküldünk a kill parancsnak a uniq-on keresztül.

Perl kinyírva, lehet szólni a tulajnak, rakja rendbe az oldalát, hogy ne ismétlődjön meg az eset egy óra múlva.

Kövess minket!