Jaká je syntaxe konfiguračního souboru LoggedFS?
Oficiální dokumentace obsahovala pouze pokyny k použití pro loggedfs
příkaz a příklad konfiguračního souboru. Dobře, je to XML, ale jaké jsou všechny možné značky a atributy a co znamenají?
Přijatá odpověď:
Prohledal jsem Config.cpp
, soubor zodpovědný za analýzu konfigurace. Příklad konfigurace ve skutečnosti dělá docela dobrou práci při zachycení dostupných možností – není jich moc
Když odkazuji na „ukázkový výstup“ níže, mluvím o tomto řádku (náhodně vytaženém z ukázkové stránky):
17:29:35 (src/loggedfs.cpp:136) getattr /var/ {SUCCESS} [ pid = 8700 kded [kdeinit] uid = 1000 ]
Kořenová značka je <loggedFS>
. Má dva volitelné atributy:
- logEnabled je řetězec — „true“ znamená, že by měl ve skutečnosti vydávat informace protokolu; cokoliv jiného zakáže veškeré protokolování. Výchozí hodnota je „true“, protože to je tak trochu smyslem programu
- printProcessName je řetězec — „true“ znamená, že výstup protokolu bude obsahovat název procesu, cokoliv jiného znamená, že nebude. Výchozí hodnota je „true“. V ukázkovém výstupu
kded [kdeinit]
je název procesu
Jediné podřízené uzly, o které se stará, jsou <include>
a <exclude>
. V příkladu je seskupují pod <includes>
a <excludes>
bloky, ale ty jsou analyzátorem ignorovány (stejně jako všechny ostatní uzly kromě <include>
a <exclude>
).
Přirozeně <include>
pravidla způsobí, že vypíše řádek protokolu, pokud se shodují, zatímco <exclude>
řádky způsobí, že ne. V případě překrývání <exclude>
přepíše <include>
. Normálně potřebujete alespoň jeden <include>
pravidlo odpovídající události, která má být protokolována, ale výjimka je, pokud existuje 0 <include>
pravidla — pak jsou protokolovány všechny události, i když existují odpovídající <exclude>
řádky .
Oba <include>
a <exclude>
mít stejné atributy:
- rozšíření je regulární výraz, který se shoduje s absolutní cestou k souboru, ke kterému bylo přistupováno/upraveno/cokoli (
extension
je dost špatné jméno, ale myslím, že se to běžně používá). Pokud se napříkladtouch /mnt/loggedfs/some/file
, regulární výraz vextension
bude muset (částečně) odpovídat/mnt/loggedfs/some/file
- uid je řetězec, který obsahuje buď celé číslo, nebo
*
. Pravidlo odpovídá dané operaci pouze v případě, že vlastník procesu, který operaci způsobil, má zadané ID uživatele (*
přirozeně znamená jakékoli shody ID uživatele). V příkladu výstupu1000
je uid - akce je specifický typ operace prováděné na souborovém systému. V příkladu výstupu
getattr
je akce. Možné akce jsou:- přístup
- chmod
- chown
- getattr
- odkaz
- mkdir
- mkfifo
- mknod
- otevřené
- otevřené-pouze pro čtení
- otevřený-readwrite
- pouze otevřít-zapisovat
- číst
- readdir
- přečíst odkaz
- přejmenovat
- rmdir
- statfs
- symlink
- zkrátit
- odpojit
- doba provozu
- utimens
- pište
- přejmenovat je regulární výraz. Pokud je návratový kód skutečné operace souborového systému provedené LoggedFS 0, regulární výraz se shoduje s řetězcem
SUCCESS
. Nenulový návratový kód způsobí, že se shoduje sFAILURE
. Toto jsou jediné možné hodnoty, takže s největší pravděpodobností buď napevno zakódujeteSUCCESS
,FAILURE
nebo použijte.*
pokud chceš obojí. V příkladu výstupuSUCCESS
jeretname
Na rozdíl od <loggedFS>
atributy, nemají žádné výchozí hodnoty. I když parser rozpozná neznámé atributy a dojde k chybě, nezjistí chybějící atributy, takže pokud atribut zapomenete, použije neinicializovanou paměť.