如何通过 ausearch 结果找到负责的脚本?

如何通过 ausearch 结果找到负责的脚本?

所以我想知道哪个进程正在我的根目录中创建目录“]”。我假设这是某些脚本中的拼写错误。因此,我对该目录设置了审核,与上所示非常相似这个问题

第二天查看日志,发现目录又被创建了,并且已经被审计记录下来了。但我从这个输出中只能看出创建了它。

输出:

type=SYSCALL msg=audit(26.04.2013 06:25:20.275:85) : arch=i386 syscall=mkdir success=yes exit=0 a0=bfd02ea5 a1=1ed a2=bfd02ea5 a3=bfd025b8 items=2 ppid=24114 pid=24115 auid=unset uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=(none) ses=4294967295 comm=mkdir exe=/bin/mkdir key=weird 

断行:

type=SYSCALL 
msg=audit(26.04.2013 06:25:20.275:85) : 
arch=i386 
syscall=mkdir 
success=yes 
exit=0 a0=bfd02ea5 
a1=1ed a2=bfd02ea5 a3=bfd025b8 
items=2 ppid=24114 pid=24115 
auid=unset 
uid=root 
gid=root 
euid=root 
suid=root 
fsuid=root 
egid=root 
sgid=root 
fsgid=root 
tty=(none) 
ses=4294967295 
comm=mkdir 
exe=/bin/mkdir 
key=weird 

我想知道哪个脚本以 root 身份发出此命令。那可能吗?使用该 PPID 的进程不再运行。

答案1

假设这是由 cron 启动的脚本引起的,您可以跟踪所有 crond-children:

strace -p $CRONPID -f -o /path/to/cron-strace.log -e trace=mkdir

这应该会导致如下输出:

Process 3584 attached
Process 18227 attached
[pid 18227] execve("./testscript", ["./testscript"], [/* 100 vars */]) = 0
Process 18228 attached
[pid 18228] execve("/usr/bin/mkdir", ["mkdir", "/home/hl/tmp/strace-testdir"], ...) = 0
[pid 18228] mkdir("/home/hl/tmp/strace-testdir", 0777) = 0

当然,strace 会减慢脚本执行速度,但这通常不会成为问题。

答案2

仅根据此输出,您无法确定哪个程序调用了该mkdir命令。

如果你有BSD 进程会计,以下命令显示哪个程序的 PID 为 24114:

dump-acct /var/log/account/pacct | awk -F '|' '$10 ~ / 24114 / {print}'

这大概是sh。第 10 列(以|作为分隔符)包含记录进程的 PID,后跟其 PPID,因此使用 PPID 重复搜索以查看调用的程序sh等。您还可以了解进程开始的时间,这可能有助于确定这是哪个 cron 作业。

仅使用auditd,您不仅需要记录mkdir调用,还需要记录对该目录的所有访问,以便记录更改该目录或访问其中文件的命令。如果创建了目录但没有其他东西访问它,我认为单独的auditd不足以解决这个问题。

相关内容