GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So verfolgen und verfolgen Sie einen Linux-Prozess

In diesem Beitrag zeigen wir Ihnen, wie Sie einen Linux-Prozess auf dem System mit zwei Tools, den Befehlszeilen-Tools ps und strace, verfolgen und verfolgen. Diese Systemwerkzeuge können Ihnen helfen, reale Systemprozesse und deren Ursprung zu identifizieren.

Auf gemeinsam genutzten Webhosting-Servern kommt es häufig zu Problemen mit Spam und Malware. Diese Probleme können aus vielen Gründen auftreten, und manchmal werden diese ausgehenden Spams oder Angriffe von Systemprozessen wie Perl-Skripten gestartet, die viele CPU-Ressourcen verbrauchen.

In den meisten dieser Fälle handelt es sich anscheinend „nur“ um einen Perl-Prozess, aber hier kommen ein paar interessante Fragen:Woher wissen Sie, woher er kommt? Wie könnte ein Linux-Systemprozess seinen richtigen Namen maskieren? Was ist der einfachste und zuverlässigste Weg, um herauszufinden, wo dieser Linux-Prozess gestartet wurde?

Heute werden wir versuchen, all diese Fragen mit einigen schnellen und einfachen praktischen Beispielen zu beantworten.

Verfolgen Sie einen Linux-Prozess mit dem Befehl ps

Sehen wir uns ein reales Beispiel an, das vor Tagen auf einem dedizierten Server passiert ist, den ich verwalte.

Auf einer bestimmten Website gab es ein ausgehendes Spam-Problem, das viele E-Mails verschickte, aber im Ordner public_html wurde keine Malware gefunden, außerdem wurden alle Passwörter für E-Mail-Postfächer geändert, genau wie das Passwort für das FTP/cPanel-Konto. Trotzdem nutzte der Angreifer das Linux-System, um ausgehende E-Mails zu versenden.

Die Quelle der E-Mails war ein Prozess, der unter dem Benutzer „johndoe“ ausgeführt wurde, der böswillig zu sein schien und nicht das war, was er vorgab:

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

Wie Sie sehen, war das erste, was Sie herausfinden mussten, der ps-Befehl, wie Sie unten sehen:

ps -U user -u user u

Ersetzen Sie „Benutzer“ durch Ihren echten Systembenutzer.

Danach, sobald Sie die verdächtigen Prozesse aufgelistet haben, verwenden Sie ll Befehl, um weitere Informationen über seine PID zu erhalten , wie zuvor gesehen:

Wie Sie sehen, gibt der Prozess vor, „httpd“ zu sein, um sich zu verstecken (jeder Prozess kann seinen eigenen Prozesstitel ändern), es ist tatsächlich ein Perl-Prozess:

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

Es war jedoch keine Skriptdatei damit verbunden. Das Skript wurde höchstwahrscheinlich in den Perl-Prozess geleitet, um zu vermeiden, dass irgendetwas im Dateisystem abgelegt wird, wo es eine Spur hinterlassen würde.

Ich weiß nicht, wie das Skript unter diesem Benutzer ausgeführt wurde, aber dies war eine anfällige WordPress-Installation mit vielen veralteten Plugins und injizierter Malware, die leicht zu dieser Art von Problemen führen könnte.

In diesem Fall war es am besten, den Rouge-Prozess zu beenden:

kill -9 59289

Ersetzen Sie „59289“ durch die echte Prozess-ID.

Strace:ein weiterer einfacher Weg, einen Systemprozess zu verfolgen

Strich ist ein sehr praktisches und nützliches Tool, das von Systemadministratoren zum Debuggen und Diagnostizieren system- und prozessbezogener Probleme verwendet wird, bei denen die Quelle nicht wirklich klar und auf einen ersten Blick verfügbar ist.

Mit diesem Debug-Tool können Programmierer und Systembenutzer schnell herausfinden, wie ein Programm mit dem Betriebssystem interagiert. Dies geschieht durch Überwachung von Systemaufrufen und -signalen.

Wie wir in den nächsten Beispielen sehen werden, gibt strace jede Zeile im Trace aus, die den Namen des Systemaufrufs, seine Argumente und den Rückgabewert (innerhalb der Klammern) enthält.

Stretch-Beispiel

Lassen Sie uns strace gegen /bin/ls laufen lassen und die Ausgabe in einer Datei namens ls.txt

speichern
strace -o ls.txt /bin/ls

Um die Ausgabe zu lesen, führen Sie einfach Folgendes aus:

more ls.txt

Aber das ist nur ein einfaches Strace-Beispiel. Der interessante Teil kommt, wenn Sie den Webserver-Prozess verfolgen und herausfinden können, was er genau tut. Nehmen wir als Beispiel einen php-fpm-Prozess:

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

Durch Drücken von STRG + C beenden Sie die Ablaufverfolgung und sie wird getrennt.

Sie können auch spezifizieren, was Sie nachverfolgen müssen, zum Beispiel, wenn Sie nur die offenen und gelesenen Systemaufrufe nachverfolgen müssen, sollten Sie das in der Strace-Syntax angeben, wie Sie unten sehen:

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

Dieses schnelle Strace-Beispiel verwendete einige Befehlsoptionen, die hier erklärt werden:

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

Um die Ausgabe zu lesen, führen Sie erneut einfach Folgendes aus:

more /root/php-fpm.debug.txt

Jetzt wissen Sie, wie Sie einen Linux-Prozess einfach mit zwei einfachen Befehlen verfolgen können. Mit diesen Informationen können Sie einen Linux-Prozess einfach verfolgen, um herauszufinden, was genau auf Ihrem Server passiert. strace braucht etwas mehr Zeit, um das Handbuch zu verstehen, aber es ist das definitive Werkzeug, um einen Linux-Prozess zu verfolgen.

Weiterführende Literatur:

  • man strace
  • Strace Hallo Welt
  • ps-Befehl
Wie man einen Linux-Prozess verfolgt und verfolgt, wurde zuletzt geändert:13. Juli 2017 von Esteban Borges
Linux
  1. So starten Sie Kali Linux und Windows 10 dual

  2. So beenden Sie einen Prozess in Linux

  3. So überprüfen Sie die Betriebssystem- und Linux-Version

  4. So finden und töten Sie den Zombie-Prozess in Linux

  5. So mounten und unmounten Sie ein Dateisystem unter Linux

So installieren und verwenden Sie YouTube-DL auf einem Linux-System

So ändern Sie den Benutzernamen und den Hostnamen auf einem Linux-System

So installieren und konfigurieren Sie AnyDesk auf einem Linux-System

So installieren und konfigurieren Sie Django auf einem Linux-System

So installieren und konfigurieren Sie PrestaShop auf einem Linux-System

So installieren und konfigurieren Sie Elasticsearch auf einem Linux-System