Si kprobes sont activés dans le noyau, vous pouvez utiliser execsnoop
de perf-tools :
Dans le premier terminal :
% while true; do uptime; sleep 1; done
Dans un autre terminal :
% 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...
Le moyen le plus simple consiste à activer l'audit des appels système
Voir le lien suivant pour plus de détails,
Est-ce que quelqu'un connaît un moyen simple de surveiller l'apparition du processus racine | Erreur de serveur
Si vous surveillez tous les processus, supprimez simplement le -F uid=0
partie
Les journaux sont écrits dans /var/log/audit/audit.log
Quelques exemples de bpftrace
utilisation pour atteindre l'objectif.
-
Le plus simple est de tracer tous les
exec
appels dans le système :sudo bpftrace -e 'tracepoint:syscalls:sys_enter_exec*{ printf("pid: %d, comm: %s, args: ", pid, comm); join(args->argv); }'
Il y a au moins deux points de trace que vous devez surveiller
sys_enter_execve
etenter_execveat
. Dans l'exemple j'utilise le*
symbole pour correspondre aux deux appels système (cette syntaxe fonctionne depuis 2019) . -
On peut également souhaiter surveiller tous les threads créés dans le système comme :
sudo bpftrace -e 'kprobe:_do_fork{ printf("pid = %d, comm = %s\n", pid, comm); }'
Aucun argument de processus pour vous dans ce cas, néanmoins, cela peut être utile.
Pour voir la liste de tous les événements disponibles, exécutez bpftrace -l
.