监控文件系统活动

use*_*000 6 linux security process monitoring files

说,我有一个程序,我想监视它的文件系统活动(创建/修改/删除了哪些文件/目录等)该程序可能能够产生进一步的进程,因此,我想获得这些也产生了进程。

我该怎么做呢?

Mic*_*mer 7

您可以strace为此使用:

strace -f -e trace=file command args...
Run Code Online (Sandbox Code Playgroud)

strace跟踪系统调用并在它们发生时将它们的描述打印到标准错误中。该-f选项还告诉它跟踪子进程和线程。-e让你修改它会跟踪呼叫:-e trace=file将记录每次使用的openunlink等等,但没有非文件的行为。

如果您想查看从文件中读取和写入的内容,请将其-e trace=file,read,write改为;您也可以在那里列出要检查的任何其他调用。如果你完全放弃这个论点,你会得到每个系统调用。

输出是这样的(我mkdir /tmp/test在跟踪的 shell 中运行):

[pid  1444] execve("/usr/bin/mkdir", ["mkdir", "/tmp/test4"], [/* 33 vars */]) = 0
[pid  1444] access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
[pid  1444] open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
[pid  1444] open("/usr/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
[pid  1444] open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
[pid  1444] mkdir("/tmp/test", 0777)    = 0
[pid  1444] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=1444, si_status=0, si_utime=0, si_stime=0} ---
Run Code Online (Sandbox Code Playgroud)

您可以使用 登录到文件而不是终端-o filename,并使用 -v 使输出(甚至)更加详细。也可以使用 附加到已经存在的进程-p PID,以防更有用。

如果您希望以编程方式执行此操作,而不是检查自己,请查看ptracecall,这strace是构建的内容。