Ich versuche herauszufinden, wie eine bestimmte Instanziierung protokolliert werden kann rrdtool
, um festzustellen, ob der empfangene Pfad falsch ist.
Ich weiß, dass ich die ausführbare Datei in ein Shell-Skript einbinden könnte, das die Parameter protokolliert, aber ich habe mich gefragt, ob es eine kernelspezifische Möglichkeit gibt, dies zu überwachen, möglicherweise einen Dateisystem-Rückruf, der erkennt, wann ein bestimmtes / proc / pid / exe vorliegt stimmt mit einer bestimmten Binärdatei überein?
auditd
die Befehlszeilenargumente sowie das ausgeführte Programm aufzuzeichnen? serverfault.com/questions/765179/…Antworten:
Ja, es gibt eine Kernelfunktion: das Audit-Subsystem. Der
auditd
Dämon führt die Protokollierung durch, und der Befehlauditctl
richtet die Protokollierungsregeln ein. Sie können alle Anrufe mit einigen Filtern an einem bestimmten System protokollieren. Wenn Sie alle ausgeführten Befehle und ihre Argumente protokollieren möchten, protokollieren Sie denexecve
Systemaufruf:Fügen Sie der ausführbaren Programmdatei einen Filter hinzu, um den Aufruf eines bestimmten Programms gezielt zu verfolgen:
Die Protokolle werden in angezeigt
/var/log/audit.log
oder überall dort angezeigt, wo Ihre Distribution sie platziert. Sie müssen root sein, um das Audit-Subsystem zu steuern.Verwenden Sie nach Abschluss der Untersuchung dieselbe Befehlszeile mit,
-d
anstatt-a
eine Protokollierungsregel zu löschen oder auszuführenauditctl -D
, um alle Überwachungsregeln zu löschen.Zum Debuggen bietet das Ersetzen des Programms durch ein Wrapper-Skript mehr Flexibilität beim Protokollieren von Elementen wie der Umgebung, Informationen zum übergeordneten Prozess usw.
quelle
-F path=/ust/bin/rrdtool
? Ich verstehe nicht, wierrdtool
überhaupt verwandte Software ist.rrdtool
. Wenn Sie Aufrufe aller Programme protokollieren möchten, löschen Sie das-F path=…
Teil (Sie erhalten natürlich viele Protokolle).auditctl
Befehl nur bis zum Neustart wirksam?auditctl
bleibt nur bis zum Neustart bestehen, aber das ist trotzdem ein guter Punkt. Ich habe Anweisungen zum Entfernen hinzugefügt, ohne meine Antwort neu zu starten.Sie könnten snoopy verwenden .
Snoopy ist eine leichtere Lösung, da keine Kernel-Kooperation erforderlich ist. Alles, was benötigt wird, ist ein dynamischer Loader (dl), der die Snoopy-Bibliothek vorlädt, deren Pfad in angegeben ist
/etc/ld.so.preload
.Offenlegung: Ich bin derzeit Snoopy Maintainer.
quelle
Das Linux-Kernel-Subsystem "audit" kann das tun, was Sie brauchen.
zB wenn Sie diese Befehle ausführen:
Dann wird jedes Ausführungsereignis protokolliert und es werden viele Informationen dazu bereitgestellt
zB das ist die Ausgabe von mir läuft
tail /var/log/audit/audit.log
Es gibt einige interessante Werte, die gesehen werden können; Beispiel: "auid" ist 500, was meine Login-ID ist, obwohl "uid" Null ist (weil ich unter laufe
su
). Auch wenn der Benutzer möglicherweise das Konto gewechselt hatsu
odersudo
wir dennoch auf seine "Audit-ID" zurückgreifen könnenJetzt gehen diese
auditctl
Befehle bei einem Neustart verloren. Sie können sie in eine Konfigurationsdatei einfügen (z. B. im/etc/audit/rules.d/
Verzeichnis unter CentOS 7). Der genaue Speicherort hängt von Ihrer Betriebssystemversion ab. Dieauditctl
Handbuchseite soll hier helfen.Beachten Sie jedoch, dass dadurch viele Protokollnachrichten generiert werden. Stellen Sie sicher, dass Sie genügend Speicherplatz auf der Festplatte haben!
Bei Bedarf können die Regeln auf einen bestimmten Benutzer oder einen bestimmten Befehl beschränkt werden.
Und auch Vorsicht; Wenn ein Benutzer das Kennwort in die Befehlsausführung eingibt (z. B.
mysql --user=username --password=passwd
), wird dies protokolliert.quelle