如何找出创建临时文件的原因

如何找出创建临时文件的原因

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

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

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

更新 2:下面是我设置 auditd 来显示对 tmp 的写入内容的方法:

auditctl -w /tmp -k tmpfiles

然后:

ausearch  -k tmpfiles|grep "tmp."

然后我选择一个文件并执行

ausearch  -k tmpfiles -f /tmp/tmp.tMIHx17730

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

答案1

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

设置 auditd:

auditctl -w /tmp -k tmpfiles
auditctl -a task,always

然后搜索

ausearch  -k tmpfiles|grep "/tmp/tmp."

我得到了这样的信息:

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

ausearch -p 5807

我得到了类似的东西

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)

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

所以我只需运行:

# locate bitdefender-wra
/usr/lib/MailScanner/bitdefender-wrapper

这就是:

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

我将其改为:

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

为了验证这是不删除临时文件的脚本。rm -f $LogFile下面有,但在此之前还有 exit。

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

相关内容