Sintassi del file di configurazione registrato


8

Qual è la sintassi del file di configurazione di LoggedFS ?

La documentazione ufficiale conteneva solo istruzioni per l'uso del loggedfscomando e un esempio di file di configurazione. Ok, è XML, ma quali sono tutti i possibili tag e attributi e cosa significano?

Risposte:


8

Ho frugato Config.cpp, il file responsabile dell'analisi della configurazione. La configurazione di esempio in realtà fa un ottimo lavoro nel catturare le opzioni disponibili - non ce ne sono molte

Quando faccio riferimento a "l'output di esempio" di seguito, sto parlando di questa riga (estratta a caso dalla pagina di esempio):

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

Il tag root è <loggedFS>. Ha due attributi opzionali:

  • logEnabled è una stringa - "true" significa che dovrebbe effettivamente generare informazioni sul registro; qualsiasi altra cosa disabilita tutta la registrazione. Il valore predefinito è "true", poiché è un po 'l'intero punto del programma
  • printProcessName è una stringa: "true" indica che l'output del registro includerà il nome del processo, altrimenti significa che non lo sarà. Il valore predefinito è "vero". Nell'output di esempio, kded [kdeinit]è il nome del processo

Gli unici nodi figlio a cui tiene sono <include>e <exclude>. Nell'esempio raggruppano quelli sotto <includes>e i <excludes>blocchi, ma quelli vengono ignorati dal parser (come lo sono tutti gli altri nodi tranne <include>e <exclude>).

Naturalmente, le <include>regole causano l'output della riga di registro se corrispondono, mentre le <exclude>righe lo impediscono. In caso di sovrapposizione, <exclude>sostituisce <include>. Normalmente è necessaria almeno una <include>regola da abbinare per registrare un evento, ma un'eccezione è se ci sono 0 <include>regole - quindi tutti gli eventi vengono registrati, anche se ci sono <exclude>linee corrispondenti .

Entrambi <include>e <exclude>assumono gli stessi attributi:

  • estensione è un'espressione regolare che viene confrontata con il percorso assoluto del file a cui è stato effettuato l'accesso / modificato / qualunque cosa ( extensionè un nome piuttosto scadente, ma immagino che sia l'uso comune). Ad esempio, se tu touch /mnt/loggedfs/some/file, l'espressione regolare in extensiondovrebbe corrispondere (parzialmente)/mnt/loggedfs/some/file
  • uid è una stringa che contiene un numero intero o *. La regola corrisponde a una determinata operazione solo se il proprietario del processo che ha causato l'operazione ha l'ID utente specificato ( *naturalmente significa che qualsiasi ID utente corrisponde). Nell'output di esempio, 1000è l'UID
  • action è il tipo specifico di operazione eseguita sul filesystem. Nell'output di esempio, getattrè l'azione. Le azioni possibili sono:
    • accesso
    • chmod
    • chown
    • getattr
    • collegamento
    • mkdir
    • mkfifo
    • mknod
    • Aperto
    • open-sola lettura
    • open-readwrite
    • open-writeonly
    • leggere
    • readdir
    • readlink
    • rinominare
    • rmdir
    • statfs
    • link simbolico
    • troncare
    • unlink
    • utime
    • utimens
    • Scrivi
  • retname è un'espressione regolare. Se il codice di ritorno dell'operazione effettiva del filesystem eseguita da LoggedFS è 0, l'espressione regolare viene confrontata con la stringa SUCCESS. Un codice di ritorno diverso da zero fa sì che corrisponda a FAILURE. Questi sono i valori possibili soltanto, in modo molto probabilmente sei o andando a hardcode SUCCESS, FAILUREo l'uso .*se si vuole entrambi. Nell'output di esempio, SUCCESSè ilretname

A differenza degli <loggedFS>attributi, questi non hanno valori predefiniti. Inoltre, mentre il parser riconoscerà gli attributi sconosciuti e gli errori, non rileva gli attributi mancanti, quindi se si dimentica un attributo userà la memoria non inizializzata.


Qual è l'elenco di inclusione / esclusione predefinito (vuoto quindi non è incluso nulla, credo)? Se includi /a, escludi /a/be includi /a/b/c, viene /a/b/cguardato? Includere una directory include sempre il suo contenuto?
Gilles 'SO- smetti di essere malvagio'

@Gilles Non sa nulla delle directory, prende solo il percorso assoluto completo e lo confronta con l'espressione regolare. Quindi <include extension="/a" uid="*" action=".*" retname=".*" />abbinerà ogni operazione che opera su un file il cui percorso contiene /a- potrebbe anche esserlo /foo/abc/bar. Probabilmente vorrai ancorarli tutti con ^e $, ma poi devi includere l'intero percorso affinché coincida
Michael Mrozek

@Gilles Non avere alcuna regola è in realtà un caso speciale, quindi lo aggiungerò alla risposta
Michael Mrozek
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.