Wie zählt man, wie oft eine Datei / ein Verzeichnis geöffnet wurde?

1

Ich versuche herauszufinden, wie oft eine Datei geöffnet wurde (seit der Einführung des Betriebssystems). Ich denke daran, dies über stat zu tun, aber die meisten Flags geben nur den Unterschied zwischen dem letzten Zeitpunkt zurück, zu dem sie geöffnet wurden.

mynameis
quelle
Ich bin nicht sicher, ob diese Informationen tatsächlich von den meisten Dateisystemen erfasst werden. Möglicherweise müssen Sie Tools verwenden, um bestimmte Dateien zu überwachen und zu berichten, wann sie geöffnet werden. Ich bin sicher, dass es diese gibt, aber selbst kein Linux-Benutzer bin, kenne ich den Namen der genannten Tools nicht.
Crippledsmurf

Antworten:

2

Diese Antwort erklärt Was muss getan werden, aber die Besonderheiten von Wie hängen Sie von Ihrer Distribution, Ihrem Setup und Zweck ab und welche Tools Sie zum Analysieren der Daten wählen:

Was Sie suchen, ist das Auditd Daemon innerhalb von Linux. Aus der Manpage auditd (8) :

auditd ist die Userspace-Komponente des Linux-Auditing-Systems. Es ist für das Schreiben von Audit-Datensätzen auf die Festplatte verantwortlich. Anzeigen der   Protokolle werden mit dem erledigt ausearch oder aureport Dienstprogramme. Konfigurieren der   Audit-Regeln werden mit der auditctl Nützlichkeit. Während des Startvorgangs wird der   Regeln in /etc/audit/audit.rules werden von gelesen auditctl und geladen in   der Kernel Alternativ gibt es auch ein augenrules-Programm, das liest   Regeln in /etc/audit/rules.d/ und kompiliert sie zu einem audit.rules Datei. Der Audit-Daemon selbst hat einige Einstellungen   Optionen, die der Administrator möglicherweise anpassen möchte. Sie sind im gefunden auditd.conf Datei.

Bei der Überwachung werden im Kernel integrierte Funktionen verwendet, um bei bestimmten Systemaufrufen nach Ihren Vorgaben Protokolle zu erstellen. Nach dem Setup finden Sie die Protokolle in /var/log/audit oder irgendwo in Ihrer Distribution ähnlich.

Um den Zugriff auf eine Datei zu prüfen, verwenden Sie Folgendes:

auditctl -w /path/to/interesting/files/ -p rwxa -k myfileaudits

Woher -w gibt den Pfad zu den Dateien an -p gibt an, dass das System eine Prüfung durchführt r eads w Riten, e x Ecutions und ein Attribut- oder Berechtigungsänderungen. Endlich, das -k Mit dieser Option können Sie einen beliebigen Schlüssel angeben, der bei der Suche nach dieser Regel mit verwendet werden soll ausearch .

Beachten Sie, dass obwohl auditd arbeitet Systemaufrufe ab, -p r verfolgt das nicht lesen Funktion, aber eher öffnen Damit die Protokolle nicht bei jedem Lesevorgang überflutet werden, wird bei jedem Öffnen einer Datei ein Eintrag zum Lesen gemacht.

Wenn die Überwachung aktiviert ist und die Protokolle installiert sind, kann mit ausearch diese Protokolle für den gesamten Zugriff auf die angegebenen Dateien analysiert werden, und mit Standardtext- oder Statistiktools können die Ergebnisse erstellt werden. Diese können von abweichen grep und wc -l um die Protokolleinträge zu zählen oder eine Kombination aus Scripting und GNU-R oder Gnuplot Diagramme und Berichte erstellen.


Eine andere Alternative ist zu verwenden SELinux . Während SELinux ein Werkzeug zur Zugriffskontrolle ist, das normalerweise nur Zugriffsverweigerungen protokolliert, kann es so eingerichtet werden, dass es ALLE Zugriffe protokolliert und ähnliche Informationen wie auditd bereitstellt.


Bearbeiten: Wenn eine Aufzeichnung des Zugriffs erforderlich ist von Anfang an : Zum Beispiel während der Betriebssysteminstallation, während des Startvorgangs vor dem Start von auditd oder vor der Installation von auditd sind strengere Maßnahmen erforderlich. Ein benutzerdefiniertes Installationsprogramm oder ein benutzerdefiniertes Installationsprogramm initrd.img Die Boot-Datei muss möglicherweise erstellt werden, um die erforderlichen Debugger- oder Kernel-Trace-Tools laden zu können. Diese Verfolgungswerkzeuge könnten umfassen dtrace . perf . SystemTap . ktap oder ähnliche Tools auf Debugger-Ebene, um den Zugriff während des Startvorgangs abzufangen. Eine gute Referenz ist http://www.brendangregg.com/linuxperf.html Ein Beispiel für diese Art von Analyse für die Systemleistung ist nicht die Prüfung Bootchart .

Die Einrichtung dieser Einstellung liegt jedoch außerhalb meines Erfahrungsbereichs - ich hoffe, dass die Referenzen sich als nützlich erweisen.

glallen
quelle
+1 - Dies ist eine großartige Antwort auf die Einrichtung, um dies durchzuführen. Die Frage stellt die Frage, wie Sie diese Informationen von der Einführung des Betriebssystems erhalten, was rückwirkend impliziert. Können Sie Ihre Antwort auf die Frage erweitern, ob dies möglich ist?
fixer1234
@ fixer1234 Ich würde sagen, es hängt davon ab, wie 'OS Inception' definiert ist. Wenn Sie eine "Produktionssache" verfolgen, sollten Sie die Installation, Härten, Audits und Protokollierung, Basislinien und Sicherungen durchführen, BEVOR Sie das Betriebssystem in Betrieb nehmen. Wenn Sie also nicht den Installationsvorgang selbst analysieren, konfigurieren Sie einfach die Überwachung, bevor Sie etwas anderes installieren. Wenn nicht, und Sie möchten die 'Dinge' auf Betriebssystemebene verfolgen, die irgendwo zwischen Bare-Metal, dem ersten Lesen / Schreiben des Installationsprogramms oder 'first-boot' beginnen, dann entweder ein benutzerdefiniertes initrd oder ein benutzerdefiniertes Installationsprogramm mit Funktionen auf Debug-Ebene ist in ordnung. Hinzufügen von Bearbeitungen zu diesem Effekt.
glallen
1
Meine Lektüre der Frage war eigentlich etwas anderes. Ich dachte, es wäre eine Frage, ob es einen Weg gibt, nach der Tatsache zu wissen. Sie haben bereits vor einiger Zeit ein vorhandenes System erstellt. An dieser Stelle möchten Sie den Verlauf der Verwendung einer Datei erfahren. Gibt es einen Verlauf oder einen Parameter, der jeder Datei zugeordnet ist, die Teil des Dateisystems ist, und die angibt, wie oft beliebige Dateien geöffnet wurden Es klingt, als würden Sie sagen, dass die Antwort nein ist. Sie können das so einstellen, dass die Nutzung ab diesem Punkt verfolgt wird. Wenn Sie es benötigen, müssen Sie es vorher eingerichtet haben.
fixer1234
Richtig. Es muss eingerichtet sein. Siehe die Struktur einer Inode in ext4 ... es gibt keinen Eintrag in dieser Struktur für Zugriffszahlen, nur Einträge wie i_*time für verschiedene Interaktionszeiten: Zugriff, Inode-Änderung, Datenänderung und Löschung.
glallen
Ist es möglich, ein Skript zu schreiben, das die Anzahl der Öffnen einer Datei oder eines Verzeichnisses ab jetzt zählt?
mynameis