プロセスで開かれたファイルをリアルタイムで監視する方法は?

プロセスで開かれたファイルをリアルタイムで監視する方法は?

私は以下を使用してプロセスの開かれたファイルを見ることができることを知っています。lsof その瞬間私のLinuxコンピュータで。ただし、プロセスはファイルを開いたり、変更したり、閉じたりする可能性があるため、標準のシェルスクリプト(たとえば)をwatch使用して監視するときは表示されません。「Linuxで開かれたプロセスファイルの監視(リアルタイム)」

だから私はプロセスに感謝し、時間が経つにつれて何が起こるのかを確認する簡単な方法を探しているようです。プロセスが監査を開始せずに実行される前に、どのネットワーク接続が監査を確立して開始するかを確認できればよいでしょう。

理想的には、次のことをしたいと思います。

sh $ audit-lsof /path/to/executable
4530.848254 OPEN  read  /etc/myconfig
4530.848260 OPEN  write /var/log/mylog.log
4540.345986 OPEN  read  /home/gert/.ssh/id_rsa          <-- suspicious
4540.650345 OPEN  socket TCP ::1:34895 -> 1.2.3.4:80    |
[...]
4541.023485 CLOSE       /home/gert/.ssh/id_rsa          <-- would have missed
4541.023485 CLOSE socket TCP ::1:34895 -> 1.2.3.4:80    |   this when polling

straceすべてのシステムコールを表示しないために使用できるフラグはありますか?

ベストアンサー1

実行する

strace -e trace=open,openat,close,read,write,connect,accept your-command-here

それで十分だと思います。

-oプロセスがstderrとして印刷できる場合は、このオプションを使用してコンソール以外の場所にstraceの出力を配置する必要があります。プロセスが分岐している場合-fまたは-ff

ああ、あなた-tもそうしたいかもしれません。いつ電話が来ました。


プロセスが実行する操作に応じて、関数呼び出しのリストを調整する必要があります。getdentsたとえば、より良い例のために以下を追加しましたls

$ strace -t -e trace=open,openat,close,read,getdents,write,connect,accept ls >/dev/null
...
09:34:48 open("/etc/ld.so.cache", O_RDONLY) = 3
09:34:48 close(3)                       = 0
09:34:48 open("/lib64/libselinux.so.1", O_RDONLY) = 3
09:34:48 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@V\0\0\0\0\0\0"..., 832) = 832
09:34:48 close(3)                       = 0
...
09:34:48 open("/proc/filesystems", O_RDONLY) = 3
09:34:48 read(3, "nodev\tsysfs\nnodev\trootfs\nnodev\tb"..., 1024) = 366
09:34:48 read(3, "", 1024)              = 0
09:34:48 close(3)                       = 0
09:34:48 open("/usr/lib/locale/locale-archive", O_RDONLY) = 3
09:34:48 close(3)                       = 0
09:34:48 open(".", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
09:34:48 getdents(3, /* 5 entries */, 32768) = 144
09:34:48 getdents(3, /* 0 entries */, 32768) = 0
09:34:48 close(3)                       = 0
09:34:48 write(1, "file-A\nfile-B\nfile-C\n", 21) = 21
09:34:48 close(1)                       = 0
09:34:48 close(2)                       = 0

おすすめ記事