カーネルで kprobes が有効になっている場合は、 execsnoop
を使用できます perf-tools から:
最初のターミナルで:
% while true; do uptime; sleep 1; done
別の端末で:
% 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...
最も簡単な方法は、システム コールの監査を有効にすることです
詳細については、次のリンクを参照してください。
ルートプロセスのスポーンを監視する簡単な方法を知っている人はいますか?サーバー障害
すべてのプロセスを監視している場合は、-F uid=0
を削除するだけです 一部
ログは /var/log/audit/audit.log
に書き込まれます
bpftrace
の例 目標を達成するための使用。
最も単純なものは、すべての exec
をトレースすることです システム内の呼び出し:
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_exec*{ printf("pid: %d, comm: %s, args: ", pid, comm); join(args->argv); }'
sys_enter_execve
を監視する必要があるトレースポイントが少なくとも 2 つあります。 と enter_execveat
.この例では、 *
を使用しています 両方の syscall に一致する記号 (この構文は 2019 年から機能します) .
システムで作成されているすべてのスレッドを次のように監視することもできます。
sudo bpftrace -e 'kprobe:_do_fork{ printf("pid = %d, comm = %s\n", pid, comm); }'
この場合、プロセスの引数はありませんが、役に立つかもしれません。
使用可能なすべてのイベントのリストを表示するには、bpftrace -l
を実行します。 .