GNU/Linux >> Linux Esercitazione >  >> Linux

Come tracciare e tracciare un processo Linux

In questo post ti mostreremo come tracciare e tracciare un processo Linux sul sistema con due strumenti, ps e strumenti da riga di comando strace. Questi strumenti di sistema possono aiutarti a identificare il processo del sistema reale e la loro origine.

Sui server di hosting Web condivisi è molto comune affrontare problemi di spam e malware. Questo problema può verificarsi per molte ragioni e talvolta questi spam o attacchi in uscita vengono lanciati da processi di sistema come gli script perl che utilizzano molte risorse della CPU.

Nella maggior parte di questi casi, a quanto pare è "solo" un processo perl, ma ecco alcune domande interessanti:come fai a sapere da dove viene? In che modo un processo di sistema Linux potrebbe mascherare il suo vero nome? Qual ​​è il modo più semplice e affidabile per scoprire dove è stato avviato questo processo Linux?

Oggi cercheremo di rispondere a tutte queste domande con alcuni esempi pratici facili e veloci.

Traccia un processo Linux usando il comando ps

Vediamo un esempio di vita reale accaduto giorni fa in un server dedicato che gestisco.

Su un particolare sito Web si è verificato un problema di spam in uscita che inviava molte e-mail, ma non è stato trovato alcun malware all'interno della cartella public_html, inoltre tutte le password delle caselle di posta elettronica sono state modificate, come la password dell'account FTP/cPanel. Tuttavia, c'era un modo in cui l'attaccante utilizzava il sistema Linux per inviare e-mail in uscita.

La fonte delle e-mail era un processo in esecuzione sotto l'utente "johndoe" che sembrava essere dannoso e non era quello che affermava di essere:

[[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

Come vedi, la prima cosa per scoprire il processo è stata usare il comando ps, come vedi sotto:

ps -U user -u user u

Sostituisci "utente" con il tuo utente di sistema reale.

Dopodiché, una volta elencati i processi sospetti, utilizza ll comando per scoprire ulteriori informazioni utilizzando il suo PID , come visto prima:

Come vedi, il processo afferma di essere "httpd" per nascondersi (qualsiasi processo può cambiare il proprio titolo di processo), in realtà è un processo perl:

[[email protected] ~] ll /proc/59289/exe
lrwxrwxrwx 1 johndoe johndoe 0 Jun 10 10:05 /proc/59289/exe -> /usr/bin/perl*

Tuttavia, non esisteva alcun file di script associato. Lo script molto probabilmente è stato reindirizzato al processo perl per evitare di inserire qualcosa nel filesystem dove avrebbe lasciato una traccia.

Non so come sia stato eseguito lo script con questo utente, ma si trattava di un'installazione vulnerabile di WordPress con molti plug-in obsoleti e malware iniettato che potevano facilmente causare questo tipo di problemi.

Uccidere il processo di rossetto è stata la cosa migliore da fare in questo caso:

kill -9 59289

Sostituisci "59289" con l'ID processo reale.

Strace:un altro modo semplice per tracciare un processo di sistema

traccia è uno strumento molto utile e utile utilizzato dagli amministratori di sistema per il debug e la diagnostica dei problemi relativi al sistema e al processo in cui la fonte non è molto chiara e disponibile quando si dà una rapida occhiata.

Questo strumento di debug consente ai programmatori e agli utenti del sistema di scoprire rapidamente come un programma interagisce con il sistema operativo. Lo fa monitorando le chiamate e i segnali di sistema.

Come vedremo nei prossimi esempi, strace restituisce ogni riga nella traccia che include il nome della chiamata di sistema, i suoi argomenti e il valore restituito (tra parentesi).

esempio di traccia

Eseguiamo strace su /bin/ls e salviamo l'output in un file chiamato ls.txt

strace -o ls.txt /bin/ls

Per leggere l'output, esegui:

more ls.txt

Ma questo è solo un esempio di strace di base. La parte interessante arriva quando puoi tracciare il processo del server web e scoprire cosa sta facendo esattamente. Prendiamo un processo php-fpm come esempio:

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]:~]

Premendo CTRL+C terminerai la traccia e verrà staccata.

Puoi anche specificare cosa devi tracciare, ad esempio, se devi solo tracciare le chiamate di sistema aperte e lette, dovresti specificarlo nella sintassi strace, come vedi di seguito:

strace -e trace=open,read -p 18478 -s 80 -o /root/php-fpm.debug.txt

Questo rapido esempio di strace utilizzava alcune opzioni di comando, spiegate qui:

-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).

Ancora una volta, per leggere l'output, esegui:

more /root/php-fpm.debug.txt

Ora sai come tracciare facilmente un processo Linux con due semplici comandi, con queste informazioni puoi facilmente tracciare un processo Linux per scoprire cosa sta facendo esattamente all'interno del tuo server. strace richiede un po' più di tempo per essere compreso dal manuale, ma è lo strumento definitivo per tracciare un processo Linux.

Ulteriori letture:

  • uomo straccio
  • strace ciao mondo
  • comando ps
Come tracciare e tracciare un processo Linux Ultima modifica:13 luglio 2017 da Esteban Borges
Linux
  1. Come eseguire il dual boot di Kali Linux e Windows 10

  2. Come uccidere un processo in Linux

  3. Come controllare la versione del sistema operativo e di Linux

  4. Come trovare e uccidere il processo Zombie in Linux

  5. Come montare e smontare un file system in Linux

Come installare e utilizzare YouTube-DL su sistema Linux

Come modificare nome utente e nome host su sistema Linux

Come installare e configurare AnyDesk su sistema Linux

Come installare e configurare Django su sistema Linux

Come installare e configurare PrestaShop su sistema Linux

Come installare e configurare Elasticsearch su sistema Linux