Qual è la sintassi del file di configurazione LoggedFS?
La documentazione ufficiale conteneva solo istruzioni per l'uso di loggedfs
comando e un esempio di file di configurazione. Ok, è XML, ma quali sono tutti i possibili tag e attributi e cosa significano?
Risposta accettata:
Ho dato un'occhiata a Config.cpp
, il file responsabile dell'analisi della configurazione. La configurazione di esempio in realtà fa un ottimo lavoro nell'acquisizione delle 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 radice è <loggedFS>
. Ha due attributi opzionali:
- logEnabled è una stringa — "true" significa che dovrebbe effettivamente restituire le informazioni di registro; qualsiasi altra cosa disabilita tutta la registrazione. L'impostazione predefinita è "true", poiché questo è il punto centrale del programma
- printProcessName è una stringa — "true" significa che l'output del registro includerà il nome del processo, qualsiasi altra cosa significa che non lo farà. Il valore predefinito è "vero". Nell'output di esempio,
kded [kdeinit]
è il nome del processo
Gli unici nodi figli che interessano sono <include>
e <exclude>
. Nell'esempio li raggruppano sotto <includes>
e <excludes>
blocchi, ma quelli vengono ignorati dal parser (come qualsiasi altro nodo tranne <include>
e <exclude>
).
Naturalmente, <include>
le regole fanno sì che emetta la riga di registro se corrispondono, mentre <exclude>
le linee fanno sì che non lo faccia. In caso di sovrapposizione, <exclude>
sovrascrive <include>
. Normalmente è necessario almeno un <include>
regola da abbinare per un evento da registrare, ma un'eccezione è se sono presenti 0 <include>
regole — quindi tutti gli eventi vengono registrati, anche se ci sono <exclude>
corrispondenti righe .
Entrambi <include>
e <exclude>
prendi 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, setouch /mnt/loggedfs/some/file
, l'espressione regolare inextension
dovrebbe corrispondere (parziale) a/mnt/loggedfs/some/file
- uidi è 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 - azione è 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
- apri
- sola lettura aperta
- apri-riscrivi
- solo scrittura aperta
- leggi
- readdir
- link di lettura
- rinomina
- rmdir
- statistiche
- collegamento simbolico
- troncare
- scollega
- tempo
- utensili
- scrivi
- retname è un'espressione regolare. Se il codice di ritorno dell'effettiva operazione sul 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 aFAILURE
. Questi sono gli unici valori possibili, quindi molto probabilmente eseguirai l'hardcodeSUCCESS
,FAILURE
oppure usa.*
se vuoi entrambi Nell'output di esempio,SUCCESS
è ilretname
A differenza di <loggedFS>
attributi, questi non hanno valori predefiniti. Inoltre, mentre il parser riconoscerà gli attributi sconosciuti ed emetterà errori, non rileva gli attributi mancanti, quindi se dimentichi un attributo utilizzerà memoria non inizializzata.