如何透過 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不足以解決這個問題。

相關內容