Pokud jsou v jádře povoleny kprobes, můžete použít execsnoop
z perf-tools:
V prvním terminálu:
% while true; do uptime; sleep 1; done
V jiném terminálu:
% git clone https://github.com/brendangregg/perf-tools.git
% cd perf-tools
% sudo ./execsnoop
Tracing exec()s. Ctrl-C to end.
Instrumenting sys_execve
PID PPID ARGS
83939 83937 cat -v trace_pipe
83938 83934 gawk -v o=1 -v opt_name=0 -v name= -v opt_duration=0 [...]
83940 76640 uptime
83941 76640 sleep 1
83942 76640 uptime
83943 76640 sleep 1
83944 76640 uptime
83945 76640 sleep 1
^C
Ending tracing...
Nejjednodušší způsob je povolit audit systémových volání
Podrobnosti naleznete na následujícím odkazu,
Zná někdo jednoduchý způsob, jak sledovat spawn kořenového procesu | Chyba serveru
Pokud sledujete všechny procesy, stačí odstranit -F uid=0
část
Protokoly se zapisují do /var/log/audit/audit.log
Některé příklady bpftrace
použití k dosažení cíle.
-
Nejjednodušší je sledování všech
exec
volání v systému:sudo bpftrace -e 'tracepoint:syscalls:sys_enter_exec*{ printf("pid: %d, comm: %s, args: ", pid, comm); join(args->argv); }'
Existují alespoň dva sledovací body, které musíte sledovat
sys_enter_execve
aenter_execveat
. V příkladu používám*
symbol, aby odpovídal oběma systémovým voláním (tato syntaxe funguje od roku 2019) . -
Můžete také chtít sledovat všechna vlákna vytvářená v systému jako:
sudo bpftrace -e 'kprobe:_do_fork{ printf("pid = %d, comm = %s\n", pid, comm); }'
V tomto případě pro vás nejsou žádné procesní argumenty, nicméně to může být užitečné.
Chcete-li zobrazit seznam všech dostupných událostí, spusťte bpftrace -l
.