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 inextensiondovrebbe 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,FAILUREoppure 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.