Gibt es einen Linux-Befehl, der nach neuen Prozessen Ausschau hält?
Mein Ziel dabei ist, dass ich sehen möchte, wann ein neuer gulp
Befehl aufgerufen wird, die Befehlszeile mit etwas wie ausführen lassen ps
und sie dann mit filtern möchte sed
.
Wichtig ist das Beobachten neuer Prozesse, da ich eine PID nicht mehr nachschlagen kann, wenn sie einmal fertig ist.
Antwort1
Sie können das auditd
Subsystem verwenden, um die auf Ihrem System ausgeführten Befehle zu protokollieren. Es ist in den Kernel eingebunden und protokolliert daher sehr zuverlässig alles, was ausgeführt wird.
Meine Beispiele beziehen sich auf Fedora Linux. Abhängig von Ihrer Distribution können Sie kleine Unterschiede feststellen. (Das auditd
Subsystem ist recht komplex, daher kann es schwierig sein, dies richtig zu machen.)
Überprüfen Sie zunächst, ob auditd bereits installiert und ausgeführt wird, und zwar mit:
$ systemctl status auditd.service
Anschließend können Sie prüfen, welche Regeln geladen sind. Standardmäßig erhalten Sie unter Fedora:
$ sudo auditctl -l
-a never,task
Daher müssen wir diese „Task“-Liste (die Systemaufrufe unterdrückt) entfernen und eine hinzufügen, die „execve“ protokolliert (das ist der Systemaufruf, der Befehle ausführt).
$ sudo auditctl -d never,task
$ sudo auditctl -a always,exit -F arch=b64 -S execve
Sobald dies erledigt ist, werden alle Befehle im Prüfsystem protokolliert.
Sie können es dann mit dem Befehl durchsuchen ausearch
. Um beispielsweise alle Ausführungen zu finden, die „gulp“ aufrufen, können Sie Folgendes verwenden:
$ sudo ausearch -c gulp
Die Ausgabe wird recht ausführlich sein... Konzentrieren Sie sich auf die Zeile type=EXECVE. Die Argumente werden wie folgt aufgelistet:a0="gulp" a1="first_argument" a2="second_argument" ...
Wenn Sie anstelle einer Zeichenfolge in Anführungszeichen eine lange Zahlenfolge erhalten, verwenden Sie -i
zur Interpretation.
Das Protokollieren aller Befehle, die auf Ihrem System ausgeführt werden, kann sehr aufwändig sein und viel Speicherplatz beanspruchen! Es ist möglich, dass es auch die Leistung beeinträchtigt. Wenn Sie diese Änderungen rückgängig machen möchten, können Sie den Standardregelsatz mit diesem Befehl neu laden:
$ sudo augenrules --load
Sie können auch einen Filter auf die Protokollierungsregel anwenden, um beispielsweise nur Ausführungen von /usr/bin/gulp zu protokollieren:
$ sudo auditctl -a always,exit -F arch=b64 -F exe=/usr/bin/gulp -S execve
Das ist vielleicht übertrieben, aber es ist so zuverlässig, wie es nur sein kann. Ich hoffe, Sie finden sich im auditd
Subsystem zurecht und es liefert Ihnen die Informationen, nach denen Sie suchen!