GNU/Linux >> Linux の 問題 >  >> Linux

Linux プロセスを追跡およびトレースする方法

この投稿では、ps と strace コマンド ライン ツールの 2 つのツールを使用して、システム上の Linux プロセスを追跡および追跡する方法を紹介します。このシステム ツールは、実際のシステム プロセスとその起源を特定するのに役立ちます。

共有 Web ホスティング サーバーでは、スパムやマルウェアの問題に直面することがよくあります。この問題はさまざまな理由で発生する可能性があり、送信されるスパムや攻撃は、多くの CPU リソースを使用する perl スクリプトなどのシステム プロセスから開始されることがあります。

ほとんどの場合、どうやらこれは perl プロセス「のみ」のようですが、興味深い質問がいくつかあります。 Linux システム プロセスはどのようにしてその本当の名前を隠すことができますか? この Linux プロセスが開始された場所を見つける最も簡単で信頼できる方法は何ですか?

今日は、このすべての質問に、簡単で簡単な実際の例を使って答えようとします.

ps コマンドを使用して Linux プロセスをトレースする

私が管理している専用サーバーで数日前に発生した実際の例を見てみましょう.

ある特定の Web サイトで、大量の電子メールを送信する送信スパムの問題がありましたが、public_html フォルダー内にマルウェアは検出されず、FTP/cPanel アカウントのパスワードと同じように、すべての電子メール ボックスのパスワードも変更されました。それでも、攻撃者が Linux システムを使用して電子メールを送信する方法がありました。

電子メールの送信元は、「johndoe」ユーザーの下で実行されている悪意のあるプロセスであり、それが主張するものではありませんでした:

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

ご覧のとおり、プロセスを見つけるための最初のことは、以下に示すように ps コマンドを使用することでした:

ps -U user -u user u

「ユーザー」を実際のシステム ユーザーに置き換えてください。

その後、疑わしいプロセスを一覧表示したら、ll を使用します。 PID を使用して詳細情報を検索するコマンド 、前に見たように:

ご覧のとおり、このプロセスは自分自身を隠すために「httpd」であると主張しています (どのプロセスもプロセスのタイトルを変更できます)。これは実際には perl プロセスです:

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

ただし、それに関連付けられたスクリプト ファイルはありませんでした。スクリプトは、トレースを残すファイル システムに何かを配置することを避けるために、おそらく perl プロセスにパイプされました。

このスクリプトがどのようにしてこのユーザーの下で実行されるようになったのかはわかりませんが、これは脆弱な WordPress インストールであり、多くの古いプラグインと挿入されたマルウェアがこの種の問題を簡単に引き起こす可能性がありました.

この場合、rouge プロセスを強制終了することが最善の方法でした:

kill -9 59289

「59289」を実際のプロセス ID に置き換えます。

Strace:システム プロセスをトレースするもう 1 つの簡単な方法

トレース

このデバッグ ツールを使用すると、プログラマーやシステム ユーザーは、プログラムが OS とどのように対話しているかをすばやく調べることができます。これは、システム コールとシグナルを監視することによって行われます。

次の例で見るように、strace は、システム コール名、その引数、および戻り値 (括弧内) を含むトレースの各行を出力します。

トレースの例

/bin/ls に対して strace を実行し、出力を ls.txt というファイルに保存しましょう

strace -o ls.txt /bin/ls

出力を読むには、以下を実行してください:

more ls.txt

しかし、これは基本的な strace の例にすぎません。興味深いのは、Web サーバー プロセスをトレースして、そのプロセスが正確に何を行っているかを調べることができるときです。 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]:~]

CTRL + C を押すと、トレースが終了し、切り離されます。

また、トレースする必要があるものを指定することもできます。たとえば、open および read システム コールのみをトレースする必要がある場合は、以下に示すように strace 構文で指定する必要があります。

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

この簡単な strace の例では、いくつかのコマンド オプションを使用しました。ここで説明します:

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

繰り返しますが、出力を読むには、以下を実行してください:

more /root/php-fpm.debug.txt

これで、2 つの単純なコマンドを使用して Linux プロセスを簡単にトレースする方法がわかりました。この情報を使用して、Linux プロセスを簡単に追跡し、サーバー内で正確に何が行われているかを調べることができます。 strace は、マニュアルから理解するのに少し時間がかかりますが、Linux プロセスをトレースするための決定的なツールです。

さらに読む:

  • man strace
  • strace hello world
  • ps コマンド
Linux プロセスを追跡およびトレースする方法が最後に変更されました:2017 年 7 月 13 日、Esteban Borges によって
Linux
  1. OSとLinuxのバージョンを確認する方法

  2. Linuxでゾンビプロセスを見つけて殺す方法

  3. Linux でファイルシステムをマウントおよびアンマウントする方法

  1. KaliLinuxとWindows10をデュアルブートする方法

  2. Linuxでプロセスを強制終了する方法

  3. Linuxでプロセスを一時停止して後で再開する方法

  1. LinuxシステムにGitをインストールして使用する方法

  2. RHELLinuxでファイルシステムをチェックして修復する方法

  3. LinuxシステムにNFSサーバーをインストールして構成する方法