存在しないファイルまたはディレクトリにアクセスしようとするプロセスを監視します。

存在しないファイルまたはディレクトリにアクセスしようとするプロセスを監視します。

私たちはウェブサイトを1つのサーバー構成から新しい構成に移行しており、ウェブサイトは以前とは異なるパスにあります。古いパスを慎重に確認して新しいパスに置き換える予定ですが、欠落している場合は、古いパスにアクセスするプロセスを監視し、そのプロセスのUIDが何であるかを知る方法はありますか?

答え1

この小さなsystemtapスクリプトを使用できます。

#!/usr/bin/stap
function proc:string() { return sprintf("PID(%d) UID(%d) PROC(%s)", pid(), uid(), execname()) }

probe syscall.open.return, syscall.stat.return,
  syscall.open64.return ?, syscall.stat64.return ? {
  filename = user_string($filename)
  if ($return < 0) {
    printf("failed %s on %s by %s\n", pn(), proc(), filename)
  }
}

システムコールを開き、返却時に統計をフックします(コードをコピー/貼り付けることができます。他のシステムコールを忘れた可能性があります)。システムコールはカーネルと通信する唯一の方法なので、何も見逃すことはありません。スクリプトは次の出力を生成します。

failed syscall.stat.return on PID(4203) UID(1000) PROC(bash) by /tmp/rofl
failed syscall.stat.return on PID(4203) UID(1000) PROC(bash) by /tmp/hihi

systemtapを使用する利点は次のとおりです。

  • プロセス中断の削減
  • システム全体(監視対象のプロセスだけでなく)では、スクリプトから直接選択を減らすことができます。
  • リソース集約度が低い(すべてのジョブの後にgrepingする代わりに失敗したジョブのみを表示)
  • 呼び出しプログラムに関する詳細情報(トレース、呼び出し時間など)を取得するためにスクリプトを改善できます。あなたのアプリケーションによって異なります。

欠点は次のとおりです。

  • 標準ではないため、インストールする必要があります(ただし、ほとんどのディストリビューションで動作するのに十分な標準です)。 Redhatと亜種の場合:sudo yum install systemtap
  • モジュールをビルドするには、デバッグ情報が必要です。 Redhatと亜種の場合:sudo debuginfo-install kernel

便利なリンク:Tapset(含まれる機能)インデックス、そして初心者ガイド

移民に幸運を祈ります!

答え2

次のようにする必要があります。

strace -f \
-e trace=open,stat,stat64,lstat,lstat64,chdir,mkdir,rename,symlink,creat \
 -o >(grep "the paths you want to catch" > log) \
commandToStartYourServer

-fスイッチが子プロセスを追跡することを試みます。トレースオプションは、製造トレース(IO)fabricateを追跡するために使用されるサブセットです。"open,stat,stat64,lstat,lstat64,execve,exit_group,chdir,mkdir,rename,clone,vfork,fork,symlink,creat"

これは、grepとプロセスの交換(デフォルトではシステムレベルのパイプ)を介して出力をフィルタリングし、ディスクIOをさらに制限します。

答え3

パトレースを使用できます。カーネルサポートはほとんどの最新システムに存在する必要がありますが、fatraceユーザースペースアプリケーションは一部のオペレーティングシステムの標準リポジトリにはありません。 fatraceは、古いファイルが別々のファイルシステムにある場合に特に便利です。

http://www.lanedo.com/filesystem-monitoring-linux-kernel/

-

より一般的な方法は auditd ですが、使用するのは少し難しいです。

http://linux-audit.com/configuring-and-auditing-linux-systems-with-audit-daemon/

-

シンボリックリンクが完全に異なるパスを介したアクセスを許可している場合は、パスごとのファイル使用量を監視するための基本的な問題があるため、これには特に注意を払うことをお勧めします。

関連情報