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 extension
dovrebbe 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
, FAILURE
o 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.
/a
, escludi/a/b
e includi/a/b/c
, viene/a/b/c
guardato? Includere una directory include sempre il suo contenuto?