V tomto příspěvku vám ukážeme, jak sledovat a sledovat proces Linuxu v systému pomocí dvou nástrojů, nástrojů příkazového řádku ps a strace. Tyto systémové nástroje vám mohou pomoci identifikovat skutečné systémové procesy a jejich původ.
Na sdílených webhostingových serverech je velmi běžné čelit problémům se spamem a malwarem. K těmto problémům může dojít z mnoha důvodů a někdy jsou tyto odchozí spamy nebo útoky spouštěny ze systémových procesů, jako jsou skripty v jazyce Perl, které využívají spoustu zdrojů CPU.
Ve většině těchto případů se zjevně jedná „pouze“ o perlský proces, ale zde přichází několik zajímavých otázek:jak víte, odkud pochází? Jak by systémový proces Linux mohl maskovat své skutečné jméno? Jaký je nejsnadnější a nejspolehlivější způsob, jak zjistit, kde tento proces Linuxu začal?
Dnes se pokusíme na všechny tyto otázky odpovědět několika rychlými a snadnými praktickými příklady.
Sledujte proces Linuxu pomocí příkazu ps
Podívejme se na skutečný příklad, který se stal před dny na vyhrazeném serveru, který spravuji.
Na jednom konkrétním webu se vyskytl problém s odchozím spamem, který posílal spoustu e-mailů, ale ve složce public_html nebyl nalezen žádný malware, byla také změněna hesla všech e-mailových schránek, stejně jako heslo účtu FTP/cPanel. Přesto existoval způsob, jak útočník používal systém Linux k odesílání odchozích e-mailů.
Zdrojem e-mailů byl proces běžící pod uživatelem „johndoe“, který se zdál být škodlivý a nebyl tím, za co tvrdil:
[[email protected] ~] ps -U johndoe -u johndoe u USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND johndoe 59289 4.0 0.0 43568 9528 ? Ss Jun08 110:01 httpd
Jak vidíte, první věcí, kterou jste zjistili, bylo použití příkazu ps, jak vidíte níže:
ps -U user -u user u
Nahraďte „uživatel“ svým skutečným uživatelem systému.
Poté, jakmile budete mít uvedeny podezřelé procesy, použijte ll Chcete-li zjistit více informací pomocí jeho PID , jak bylo vidět dříve:
Jak vidíte, proces prohlašuje, že je „httpd“, aby se skryl (jakýkoli proces může změnit svůj vlastní název procesu), je to ve skutečnosti proces perl:
[[email protected] ~] ll /proc/59289/exe lrwxrwxrwx 1 johndoe johndoe 0 Jun 10 10:05 /proc/59289/exe -> /usr/bin/perl*
Nebyl s tím však spojen žádný soubor skriptu. Skript byl s největší pravděpodobností vložen do procesu perl, aby se zabránilo umístění čehokoli na souborový systém, kde by zanechal stopu.
Nevím, jak se skript pod tímto uživatelem spustil, ale jednalo se o zranitelnou instalaci WordPressu s mnoha zastaralými pluginy a injektovaným malwarem, které by mohly snadno vést k tomuto druhu problémů.
Zabití procesu rouge bylo v tomto případě to nejlepší:
kill -9 59289
Nahraďte „59289“ skutečným ID procesu.
Strace:další snadný způsob sledování systémového procesu
strace je velmi praktický a užitečný nástroj používaný systémovými administrátory pro ladění a diagnostiku problémů souvisejících se systémem a procesy, kde zdroj není při rychlém a prvním pohledu skutečně jasný a dostupný.
Tento ladicí nástroj umožňuje programátorům a uživatelům systému rychle zjistit, jak program interaguje s OS. Dělá to monitorováním systémových volání a signálů.
Jak uvidíme v dalších příkladech, strace vypíše každý řádek trasování, který obsahuje jméno systémového volání, jeho argumenty a návratovou hodnotu (v závorkách).
příklad strace
Spusťte strace proti /bin/ls a uložte výstup do souboru s názvem ls.txt
strace -o ls.txt /bin/ls
Chcete-li přečíst výstup, stačí spustit:
more ls.txt
Ale to je jen základní ukázkový příklad. Zajímavá část přichází, když můžete sledovat proces webového serveru a zjistit, co přesně dělá. Vezměme si jako příklad proces php-fpm:
strace -p 18478 -s 80 -o /root/php-fpm.debug.txt
[[email protected]:~]strace -p 18478 -s 80 -o /root/php-fpm.debug.txt Process 18478 attached ^CProcess 18478 detached [[email protected]:~]
Stisknutím CTRL + C ukončíte trasování a bude odpojeno.
Můžete také určit, co potřebujete trasovat, například pokud potřebujete trasovat pouze otevřená a čtená systémová volání, měli byste to zadat v syntaxi strace, jak vidíte níže:
strace -e trace=open,read -p 18478 -s 80 -o /root/php-fpm.debug.txt
Tento příklad rychlého strace používal několik voleb příkazů, které jsou vysvětleny zde:
-o filename: used to write the strace output into a file name. -p PID: here you must specify the system process ID. -s SIZE: sets the maximum string size to print (32 is the default).
Chcete-li znovu přečíst výstup, stačí spustit:
more /root/php-fpm.debug.txt
Nyní víte, jak snadno sledovat linuxový proces pomocí dvou jednoduchých příkazů, s těmito informacemi můžete snadno sledovat linuxový proces a zjistit, co přesně dělá uvnitř vašeho serveru. strace zabere trochu více času, než pochopíte manuál, ale je to definitivní nástroj pro sledování linuxového procesu.
Další čtení:
- man strace
- strace ahoj světe
- příkaz ps