Syntax der LoggedFS-Konfigurationsdatei

8

Wie lautet die Syntax der LoggedFS- Konfigurationsdatei?

Die offizielle Dokumentation enthielt nur Gebrauchsanweisungen für den loggedfsBefehl und ein Beispiel für eine Konfigurationsdatei. Ok, es ist XML, aber was sind alle möglichen Tags und Attribute und was bedeuten sie?

Gilles 'SO - hör auf böse zu sein'
quelle

Antworten:

8

Ich habe Config.cppdie Datei durchgesehen , die für das Parsen der Konfiguration verantwortlich ist. Die Beispielkonfiguration macht tatsächlich einen ziemlich guten Job beim Erfassen der verfügbaren Optionen - es gibt nicht sehr viele

Wenn ich mich unten auf "die Beispielausgabe" beziehe, spreche ich von dieser Zeile (zufällig von der Beispielseite gezogen):

17:29:35 (src/loggedfs.cpp:136) getattr /var/ {SUCCESS} [ pid = 8700 kded [kdeinit] uid = 1000 ]

Das Root-Tag ist <loggedFS>. Es hat zwei optionale Attribute:

  • logEnabled ist eine Zeichenfolge - "true" bedeutet, dass tatsächlich Protokollinformationen ausgegeben werden sollen. Alles andere deaktiviert die gesamte Protokollierung. Der Standardwert ist "true", da dies der springende Punkt des Programms ist
  • printProcessName ist eine Zeichenfolge - "true" bedeutet, dass die Protokollausgabe den Prozessnamen enthält, alles andere bedeutet, dass dies nicht der Fall ist. Der Standardwert ist "true". In der Beispielausgabe kded [kdeinit]ist der Prozessname

Die einzigen untergeordneten Knoten, die es interessiert, sind <include>und <exclude>. Im Beispiel gruppieren sie diese unter <includes>und <excludes>Blöcke, aber diese werden vom Parser ignoriert (wie alle anderen Knoten außer <include>und <exclude>).

Natürlich führen <include>Regeln dazu, dass die Protokollzeile ausgegeben wird, wenn sie übereinstimmt, während <exclude>Zeilen dies nicht tun. Im Falle einer Überlappung <exclude>überschreiben <include>. Normalerweise muss mindestens eine <include>Regel übereinstimmen, damit ein Ereignis protokolliert werden kann. Eine Ausnahme ist jedoch, wenn 0 <include>Regeln vorhanden sind. Alle Ereignisse werden protokolliert, auch wenn übereinstimmende <exclude>Zeilen vorhanden sind .

Beide <include>und <exclude>nehmen die gleichen Attribute:

  • Die Erweiterung ist ein regulärer Ausdruck, der mit dem absoluten Pfad der Datei abgeglichen wird, auf die zugegriffen wurde / die geändert wurde / was auch immer ( extensionist ein ziemlich schlechter Name, aber ich denke, das ist die übliche Verwendung). Wenn Sie dies beispielsweise tun touch /mnt/loggedfs/some/file, muss der reguläre Ausdruck in extension(teilweise) übereinstimmen/mnt/loggedfs/some/file
  • uid ist eine Zeichenfolge, die entweder eine Ganzzahl oder enthält *. Die Regel stimmt nur mit einer bestimmten Operation überein, wenn der Eigentümer des Prozesses, der die Operation verursacht hat, über die angegebene Benutzer-ID verfügt (was *natürlich bedeutet, dass eine Benutzer-ID übereinstimmt). In der Beispielausgabe 1000ist die UID
  • Aktion ist die spezifische Art der Operation, die auf dem Dateisystem ausgeführt wird. In der Beispielausgabe getattrist die Aktion. Die möglichen Aktionen sind:
    • Zugriff
    • chmod
    • chown
    • getattr
    • Verknüpfung
    • mkdir
    • mkfifo
    • mknod
    • öffnen
    • nur offen lesbar
    • Open-Readwrite
    • nur offen schreiben
    • lesen
    • readdir
    • readlink
    • umbenennen
    • rmdir
    • statfs
    • symlink
    • kürzen
    • Verknüpfung aufheben
    • utime
    • utimens
    • schreiben
  • retname ist ein regulärer Ausdruck. Wenn der Rückkehrcode der von LoggedFS ausgeführten tatsächlichen Dateisystemoperation 0 ist, wird der reguläre Ausdruck mit der Zeichenfolge abgeglichen SUCCESS. Ein Rückkehrcode ungleich Null bewirkt, dass er mit übereinstimmt FAILURE. Das sind die einzigen möglichen Werte, so dass die meisten wahrscheinlich wirst du entweder hart codieren SUCCESS, FAILUREoder die Verwendung , .*wenn Sie beide wollen. In der Beispielausgabe SUCCESSist dieretname

Im Gegensatz zu den <loggedFS>Attributen haben diese keine Standardeinstellungen. Während der Parser unbekannte Attribute und Fehler erkennt, erkennt er keine fehlenden Attribute. Wenn Sie also ein Attribut vergessen, wird nicht initialisierter Speicher verwendet.

Michael Mrozek
quelle
Was ist die Standard-Einschluss- / Ausschlussliste (leer, damit nichts enthalten ist, denke ich)? Wenn Sie einschließen /a, ausschließen /a/bund einschließen /a/b/c, wird /a/b/cbeobachtet? Enthält das Einfügen eines Verzeichnisses immer dessen Inhalt?
Gilles 'SO - hör auf böse zu sein'
@ Gilles Es weiß nichts über Verzeichnisse, es nimmt nur den vollständigen absoluten Pfad und vergleicht ihn mit dem regulären Ausdruck. Es wird also <include extension="/a" uid="*" action=".*" retname=".*" />mit jeder Operation übereinstimmen, die mit einer Datei ausgeführt wird, deren Pfad enthält /a- es könnte sogar sein /foo/abc/bar. Sie möchten sie wahrscheinlich alle mit ^und verankern $, aber dann müssen Sie den gesamten Pfad angeben, damit er übereinstimmt
Michael Mrozek
@ Gilles Keine Regeln zu haben ist eigentlich ein Sonderfall, also werde ich es der Antwort hinzufügen
Michael Mrozek