Ich möchte keine komplizierten Tools wie den AppArmor-Beschwerdemodus verwenden. Ich benötige einfache Tools, um festzustellen, auf welche Dateien ein bestimmtes Programm zugreift.
linux
files
process
open-files
Boll19
quelle
quelle
fstat()
lstat()
Antworten:
Per Chris Down können Sie
strace -p
einen bereits laufenden Prozess untersuchen, um festzustellen, welche Dateien von jetzt an geöffnet werden, bis Sie strace beenden oder der Prozess selbst abgeschlossen ist.Wenn Sie möchten, dass Dateien für die gesamte Dauer eines Prozesses geöffnet werden, verwenden Sie sie von Anfang an
strace
mit dem Namen der ausführbaren Datei. Durch-f
das Hinzufügen wird sichergestellt, dass auch gegabelte Unterprozesse gemeldet werden. BeispielVerwenden Sie, um
lsof
zu sehen, welche Dateien ein Prozess derzeit geöffnet hatWenn Sie über SystemTap verfügen, können Sie den gesamten Host auf geöffnete Dateien überwachen.
quelle
open
ist nicht der einzige relevante Systemaufruf. Beispielsweise ist es möglich, Dateideskriptoren zwischen Prozessen über einen Unix-Socket zu übergeben, und es gibt denopenat
Systemaufruf, mit dem auch eine Datei geöffnet werden kann.strace
den Zeilen ENOENT im Beispiel angezeigt.Sie können
opensnoop
von BCC verwenden, das eBPF unter der Haube verwendet:Dies ist ziemlich performant, da kprobes verwendet wird, anstatt wie üblich syscalls neu starten zu
strace
müssen.Sie können dies auch mit
strace
(möglicherweise mit-f
, um den untergeordneten Elementen des verfolgten Prozesses zu folgen) tun , aber seine Funktionsweise, bei der Syscalls als Teil von ptrace neu gestartet werden, verlangsamt Ihre Anwendung etwas:Sie können Ihre Anwendung bei Bedarf auch auf diese Weise starten, indem Sie
strace [executable]
oder verwendenstrace -f [executable]
.quelle
Mein Lieblingswerkzeug zur Überwachung der von einer Anwendung geöffneten Dateien ist das leistungsstarke Überwachungsframework
sysdig
.Zum Überwachen aller geöffneten Dateien, die von einem Programm mit dem Namen geöffnet wurden
exe_file
:Überwachen aller auf dem Server geöffneten Dateien:
Erstellen einer Trace-Datei, die nur Schreibereignisse in Home-Verzeichnissen enthält (die wir später überprüfen können
sysdig -r writetrace.scap.gz
):Wenn Sie alles auf Syscall-Ebene sehen, führt ein Prozess mit dem Namen
exe_file
Folgendes aus:Sysdig hat viele Meißel, sehen Sie nach interessanteren Dingen, die es tun kann:
Sysdig Beispiele
Überwachen und Beheben von Problemen mit einem Linux-Server mit sysdig
Sie haben auch
dtrace
das, was unter Linux nicht viel verwendet wird, aber mit * BSD-Betriebssystemen immer noch viel verwendet wird:Außerdem
sysdig
,strace
unddtrace
Sie haben auch bekommenltrace
, die Aufzeichnungen / abfängt Signale / dynamische Bibliotheken / Systemaufrufe , die durch einen Prozess namens / empfangen werden:Wenn das Programm klein ist, können Sie es auch zerlegen
objdump -d exe_file
oder zerlegen / dekompilierenHopper
, um alle Dateien anzuzeigen, mit denen es sich befasst.Weitere Informationen finden Sie unter: Verstehen, was eine Linux-Binärdatei tut
Als ersten Ansatz würde ich auch tun:
Dies ist ein kostengünstiger Ansatz, und mit etwas Glück können einige der Dateinamen mit etwas Glück im ASCII-Modus in der Binärdatei vorhanden sein.
Siehe auch verwandte Antwort Warum sind wahr und falsch so groß?
Bei Binärdateien / Dateien, die mit der Distribution geliefert werden, können Sie die Quellen auch aus den Quell-Repositorys der Distribution oder den offiziellen Repositorys des eigentlichen Dienstprogramms abrufen.
Als letzte Ressource können Sie immer Tools wie gdb oder rr verwenden , um die Binärdatei in Echtzeit zu debuggen.
quelle
sysdig
Fehler zu haben (verwenden Sie ARM?). Bitte stellen Sie eine neue Frage.