Ich möchte ein Protokoll aller Prozesse erhalten, die mit dem Zeitpunkt des Starts und den Argumenten gestartet wurden, mit denen sie gestartet wurden. Ist das unter Linux möglich?
55
Ihr Ausgangspunkt sollte auditiert werden.
Versuchen Sie so etwas:
apt-get install auditd
auditctl -a task,always
ausearch -i -sc execve
The audit system is disabled
Wo kann ich sie aktivieren?chmod 0750 /sbin/audispd
Unable to set audit pid, exiting
aber ich denke , dass das eigentliche Problem , dass das System läuft in LXC Containern sein wirdIch musste dies tun, außer (1) ich brauchte nicht die Zeit und (2) ich interessierte mich nur für Prozesse, die von einem bestimmten Prozess gestartet werden, und seine Kinder und nachfolgenden Nachkommen. Auch in der Umgebung, die ich benutzte, war es nicht möglich,
auditd
oder zu bekommenaccton
, aber es gabvalgrind
.Stellen Sie dem gewünschten Prozess in der Befehlszeile Folgendes voran:
Die Informationen, die Sie benötigen, werden in der Protokollausgabe von STDERR angezeigt.
quelle
memcheck
Tool ausgeführt. Um das Werkzeug und den damit verbundenen Protokollierung zu deaktivieren, und drucken nur die Schaffung neuer Befehle (zusätzlich zu dem üblichen Ausgang Ihres Programms), verwenden Sie stattdessen den folgenden Befehl:valgrind --tool=none --trace-children=yes [command and args here]
. Immer wenn ein Unterprozess erzeugt wird, protokolliert Valgrind den vollständigen Befehl, einschließlich der Argumente, die an ihn übergeben wurden.Sie könnten dafür snoopy verwenden .
Es ist sehr einfach zu installieren und kann seit 2.x beliebige Daten (Argumente, Umgebungsvariablen, cwd usw.) protokollieren.
Offenlegung: Snoopy Betreuer hier.
quelle
Sie können startmon ausführen und die Standardausgabe, Strg-C, befolgen, wenn Sie fertig sind. So kompilieren Sie startmon und führen es auf neueren von Red Hat abgeleiteten Distributionen (RHEL, Fedora, CentOS) aus:
Unter Debian (und Ubuntu usw.) ändert sich die erste Zeile der obigen Änderungen in:
Alternativ können Sie das
execsnoop
Skript in perf-tools ausprobieren , siehe diese Antwort . Standardmäßig werden nur die ersten 8 Argumente angezeigt (9 einschließlich des Programmnamens). Sie können dies über erhöhenWenn Sie keinen Root-Zugriff auf das System haben, können Sie am besten weiter abfragen
/proc
und hoffen, dass es alles abfängt (was nicht der Vollständigkeit halber) Dies ist zwar nicht so gut wie das ordnungsgemäße Verfolgen mit einer der oben genannten Methoden, hat jedoch den leichten Vorteil, dass Trennzeichen zwischen den Befehlszeilenargumenten eindeutig angezeigt werden, falls Sie dies jemals mitteilen müssen Unterschied zwischen Leerzeichen innerhalb eines Arguments und Leerzeichen zwischen Argumenten. Dieses Skript ist ineffizient, da es die CPU (also einen seiner Kerne) zu 100% auslastet.Sie können auch patchen
execsnoop
, um genauer zu sagen, welches Argument welches ist:grep -v sub.*arg < execsnoop > n && chmod +x n && mv n execsnoop
quelle
CONFIG_FTRACE
undCONFIG_KPROBES
durchbrendangregg/perf-tools
Auf einer anderen Shell:
Erste Shell zeigt Daten des Formats:
CONFIG_PROC_EVENTS
Beispielsitzung:
CONFIG_PROC_EVENTS
Legt die Ereignisse über einen Netlink-Socket für das Benutzerland offen .proc_events.c angepasst von: https://bewareofgeek.livejournal.com/2945.html
GitHub Upsatream .
Ich glaube jedoch nicht, dass Sie Prozessdaten wie UID und Prozessargumente abrufen können, da diese
exec_proc_event
so wenig Daten enthalten: https://github.com/torvalds/linux/blob/v4.16/include/uapi/linux/cn_proc .h # L80 Wir könnten versuchen, es sofort zu lesen/proc
, aber es besteht die Gefahr, dass der Prozess beendet wird und ein anderer seine PID erhält, so dass es nicht zuverlässig ist.Getestet in Ubuntu 17.10.
quelle
Sie können atop auch zum Anzeigen der Ressourcennutzung nach Prozessen verwenden. Dies ist ein nützliches Tool zum Protokollieren und Analysieren der Ressourcennutzung in jedem Teil der Zeit
quelle
Sie können versuchen,
cat ~/.bash_history
Es gibtsystem log viewer
, das kann Ihnen helfen.quelle
~/.bash_history
enthält nur Befehle, die ich anscheinend in einem Terminal ausgeführt habe. Ich suche nach einem Protokoll aller ausgeführten Programme, z. B. wenn ich auf ein Symbol klicke, um meinen E-Mail-Client oder gedit zu öffnen, oder wenn ich meinen Browser öffne und mein Browser selbst einen anderen Prozess ausführt. Die Antwort von new123456 hat es geschafft.history
die übliche Art ist, auf diese Informationen zuzugreifen.