所以我想知道哪个进程正在我的根目录中创建目录“]”。我假设这是某些脚本中的拼写错误。因此,我对该目录设置了审核,与上所示非常相似这个问题。
第二天查看日志,发现目录又被创建了,并且已经被审计记录下来了。但我从这个输出中只能看出根创建了它。
输出:
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不足以解决这个问题。