Ich wollte also wissen, welcher Prozess ein Verzeichnis ']' in meinem Stammverzeichnis erstellt. Ich nahm an, dass es sich um einen Tippfehler in einem Skript handelte. Also richtete ich ein Audit für dieses Verzeichnis ein, ganz ähnlich wie aufDiese Frage.
Am nächsten Tag habe ich meine Protokolle überprüft und festgestellt, dass das Verzeichnis erneut erstellt wurde und es von Audit protokolliert wurde. Aber alles, was ich aus dieser Ausgabe erkennen kann, ist, dassWurzelhat es erstellt.
Ausgabe:
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
In Zeilen unterteilt:
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
Ich möchte wissen, welches Skript diesen Befehl als Root ausgibt. Ist das möglich? Der Prozess, der diese PPID verwendet, läuft nicht mehr.
Antwort1
Angenommen, dies wird durch ein von cron gestartetes Skript verursacht, können Sie alle Crond-Kinder verfolgen:
strace -p $CRONPID -f -o /path/to/cron-strace.log -e trace=mkdir
Dies sollte zu einer Ausgabe wie dieser führen:
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
Natürlich verlangsamt strace die Skriptausführung, aber das sollte normalerweise kein Problem sein.
Antwort2
Anhand dieser Ausgabe allein lässt sich nicht ermitteln, welches Programm den mkdir
Befehl aufgerufen hat.
Wenn Sie habenBSD-Prozessabrechnungzeigt der folgende Befehl, welches Programm PID 24114 hatte:
dump-acct /var/log/account/pacct | awk -F '|' '$10 ~ / 24114 / {print}'
Dies ist wahrscheinlich sh
. Spalte 10 (mit |
als Trennzeichen) enthält die PID des aufgezeichneten Prozesses, gefolgt von seiner PPID. Wiederholen Sie also die Suche mit der PPID, um zu sehen, welches Programm aufgerufen wurde sh
usw. Sie erfahren auch, wann der Prozess gestartet wurde, was dabei helfen kann, herauszufinden, welcher Cron-Job dies war.
Mit auditd allein müssen Sie nicht nur den mkdir
Aufruf, sondern alle Zugriffe auf dieses Verzeichnis aufzeichnen, um die Befehle aufzuzeichnen, die in das Verzeichnis wechseln oder auf Dateien darin zugreifen. Wenn das Verzeichnis erstellt wird, aber nichts anderes darauf zugreift, reicht auditd allein meiner Meinung nach nicht aus, um dies herauszufinden.