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

1223
mynameis

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.

1
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 vor 9 Jahren 0

1 Antwort auf die Frage

2
glallen

In dieser Antwort wird erläutert, was zu tun ist, aber die Einzelheiten hängen davon ab, welche Verteilung, Einrichtung und Zweck Sie haben und welche Tools Sie zum Analysieren der Daten verwenden:

Was Sie suchen, ist der Auditd- Dämon in 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. Das Anzeigen der Protokolle erfolgt mit den Dienstprogrammen ausearch oder aureport . Das Konfigurieren der Überwachungsregeln erfolgt mit dem Dienstprogramm auditctl . Während des Startvorgangs werden die Regeln /etc/audit/audit.rulesvon auditctl gelesen und in den Kernel geladen. Alternativ gibt es auch ein augenrules-Programm, das die darin enthaltenen Regeln liest /etc/audit/rules.d/und in eine audit.rulesDatei kompiliert . Der Audit-Daemon selbst verfügt über einige Konfigurationsoptionen, die der Administrator möglicherweise anpassen möchte. Sie befinden sich in der auditd.confDatei.

Bei der Überwachung werden im Kernel integrierte Funktionen verwendet, um bei bestimmten Systemaufrufen nach Ihren Vorgaben Protokolle zu erstellen. Nach der Einrichtung finden Sie die Protokolle in /var/log/auditIhrer Distribution oder an einem ähnlichen Ort.

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

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

Wo -wder Pfad zu den Dateien gibt -pgibt an, dass das System Audit r eads w Riten, e x ecutions und ein ttribute oder Berechtigungsänderungen. Schließlich -kkönnen Sie mit dieser Option einen beliebigen Schlüssel angeben, der bei der Suche nach dieser Regel mit ausearch verwendet werden soll .

Beachten Sie, dass, obwohl auditd abarbeitet Systemaufrufe, -p rnicht die nicht verfolgt Lesefunktion, sondern offen, so dass die Protokolle mit jeder Lese nicht überflutet werden, aber ein Eintrag gemacht, jedes Mal einer Datei zum Lesen geöffnet wird.

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 grepund wc -lzum Zählen der Protokolleinträge oder einer Kombination aus Skripting und GNU-R oder gnuplot zum Erstellen von Diagrammen und Berichten variieren .


Eine andere Alternative ist die Verwendung von SELinux . Während SELinux ein Werkzeug für die 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 von Anfang an eine Aufzeichnung des Zugriffs erforderlich ist : z. B. während der Betriebssysteminstallation, während des Startvorgangs vor dem Start von auditd oder vor der Installation von auditd, sind strengere Maßnahmen erforderlich. initrd.imgMöglicherweise muss ein benutzerdefiniertes Installationsprogramm oder eine benutzerdefinierte Startdatei erstellt werden, um die erforderlichen Tools für die Debugger- oder Kernel-Ablaufverfolgung laden zu können. Zu diesen Ablaufverfolgungstools gehören beispielsweise dtrace, perf, SystemTap, ktap oder ähnliche Debugger-Tools, 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 Überwachung, sondern Bootchart .

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

+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 vor 9 Jahren 0
@ 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 vor 9 Jahren 0
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 eine beliebige Datei geöffnet wurde. 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 vor 9 Jahren 1
Richtig. Es muss eingerichtet sein. Siehe [Struktur eines Inodes in ext4] (https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Inode_Table) ... In dieser Struktur gibt es keinen Eintrag für Zugriffszahlen, nur Einträge wie ` i_ * time` für verschiedene Interaktionszeiten: Zugriff, Inode-Änderung, Datenänderung und Löschung. glallen vor 9 Jahren 0
Ist es möglich, ein Skript zu schreiben, das die Anzahl der Öffnen einer Datei oder eines Verzeichnisses ab jetzt zählt? mynameis vor 9 Jahren 0