如何找出是什么在创建临时文件

Nic*_*oft 6 linux bash auditd

我注意到 /tmp 中有很多空文件,它们的名称类似于“/tmp/tmp.tMIHx17730”。我运行审计规则,我发现 mktemp 正在创建它,这不是很有帮助。

如何找出哪个脚本调用 mktemp 来创建这些文件?我可以使用 auditd 捕获父进程 ID/命令行吗?

更新:我相信我有父进程 ID (ppid=17729),但脚本很快退出,我找不到脚本。我也可以设置 auditd 来获取父进程命令行吗?

更新 2:这是我如何设置 auditd 以显示写入 tmp 的内容:

auditctl -w /tmp -k tmpfiles
Run Code Online (Sandbox Code Playgroud)

然后:

ausearch  -k tmpfiles|grep "tmp."
Run Code Online (Sandbox Code Playgroud)

然后我选择一个文件然后我做

ausearch  -k tmpfiles -f /tmp/tmp.tMIHx17730
Run Code Online (Sandbox Code Playgroud)

这向我展示了创建文件和父进程 pid 的进程。我需要设置某种进程启动侦听器来捕获该 pid 的最新进程

Nic*_*oft 3

好的。我发现它是这样的:

设置auditd:

auditctl -w /tmp -k tmpfiles
auditctl -a task,always
Run Code Online (Sandbox Code Playgroud)

然后搜索

ausearch  -k tmpfiles|grep "/tmp/tmp."
Run Code Online (Sandbox Code Playgroud)

我得到这样的东西:

然后我得到 ppid=5807 并搜索或过程:

ausearch -p 5807
Run Code Online (Sandbox Code Playgroud)

我得到了类似的东西

time->Thu Nov 12 12:14:34 2015
type=SYSCALL msg=audit(1447323274.234:2547064): arch=c000003e syscall=231 a0=1 a1=3c a2=1 a3=0 items=0 ppid=5772 pid=5807 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=84330 comm="bitdefender-wra" exe="/bin/bash" key=(null)
Run Code Online (Sandbox Code Playgroud)

其中 exe="/bin/bash" 是可执行文件,comm="bitdefender-wra" 是(截断的)命令行。

所以我只是运行:

# locate bitdefender-wra
/usr/lib/MailScanner/bitdefender-wrapper
Run Code Online (Sandbox Code Playgroud)

就是这样:

LogFile=$(mktemp) || { echo "$0: Cannot create temporary file" >&2; exit 1; }
Run Code Online (Sandbox Code Playgroud)

我将其更改为:

LogFile=$(mktemp /tmp/bitdefender.XXXXXXXXXXXX) || { echo "$0: Cannot create temporary file" >&2; exit 1; }
Run Code Online (Sandbox Code Playgroud)

为了验证这是不会删除其临时文件的脚本。下面有rm -f $LogFile,但之前也有出口。

请记住,可能有更好的方法。因此,我将等待有人给出使用正在创建 tmp 文件的进程的命令行查找父级的最佳方法。我的方式没有太多过滤器并且创建了太大的日志。