我注意到 /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 文件的进程的父进程。我的方法没有太多过滤器,并且会创建太大的日志。