Eu vasculhei Config.cpp
o arquivo responsável por analisar a configuração. A configuração de exemplo realmente faz um bom trabalho ao capturar as opções disponíveis - não há muitas
Quando me refiro ao "exemplo de saída" abaixo, estou falando dessa linha (extraída aleatoriamente da página de amostra):
17:29:35 (src/loggedfs.cpp:136) getattr /var/ {SUCCESS} [ pid = 8700 kded [kdeinit] uid = 1000 ]
A marca raiz é <loggedFS>
. Possui dois atributos opcionais:
- logEnabled é uma string - "true" significa que ela realmente deve gerar informações de log; qualquer outra coisa desabilita todos os logs. O padrão é "true", já que esse é o objetivo principal do programa
- printProcessName é uma string - "true" significa que a saída do log incluirá o nome do processo; qualquer outra coisa significa que não. O padrão é "true". Na saída de exemplo,
kded [kdeinit]
é o nome do processo
Os únicos nós filhos com os quais se preocupa são <include>
e <exclude>
. No exemplo, eles agrupam os sub <includes>
e os <excludes>
blocos, mas esses são ignorados pelo analisador (assim como qualquer outro nó, exceto <include>
e <exclude>
).
Naturalmente, as <include>
regras fazem com que ele produza a linha de log, se corresponderem, enquanto as <exclude>
linhas fazem com que não. Em caso de sobreposição, <exclude>
substituições <include>
. Normalmente, você precisa de pelo menos uma <include>
regra para corresponder para que um evento seja registrado, mas uma exceção é se houver 0 <include>
regras - todos os eventos serão registrados, mesmo se houver <exclude>
linhas correspondentes .
Ambos <include>
e <exclude>
assumem os mesmos atributos:
- extension é uma expressão regular que corresponde ao caminho absoluto do arquivo que foi acessado / modificado / qualquer que seja (
extension
é um nome bastante ruim, mas acho que esse é o uso comum). Por exemplo, se você touch /mnt/loggedfs/some/file
, a expressão regular em extension
precisaria corresponder (parcial)/mnt/loggedfs/some/file
- uid é uma string que contém um número inteiro ou
*
. A regra corresponde apenas a uma determinada operação se o proprietário do processo que causou a operação tiver o ID do usuário especificado ( *
naturalmente significa que qualquer ID do usuário corresponde). Na saída de exemplo, 1000
é o uid
- action é o tipo específico de operação executada no sistema de arquivos. No exemplo de saída,
getattr
é a ação. As ações possíveis são:
- Acesso
- chmod
- chown
- getattr
- ligação
- mkdir
- mkfifo
- mknod
- aberto
- open-readonly
- leitura aberta
- open-writeonly
- ler
- readdir
- readlink
- renomear
- rmdir
- statfs
- ligação simbólica
- truncar
- desvincular
- utime
- utimens
- Escreva
- retname é uma expressão regular. Se o código de retorno da operação real do sistema de arquivos executada pelo LoggedFS for 0, a expressão regular será comparada com a sequência
SUCCESS
. Um código de retorno diferente de zero faz com que ele corresponda FAILURE
. Esses são os valores só é possível, então provavelmente você está ou vai para codificar SUCCESS
, FAILURE
ou uso .*
se você quer tanto. Na saída de exemplo, SUCCESS
é oretname
Ao contrário dos <loggedFS>
atributos, estes não têm padrões. Além disso, embora o analisador reconheça atributos desconhecidos e com erros, ele não detecta atributos ausentes, portanto, se você esquecer um atributo, ele usará memória não inicializada.
/a
, excluir/a/b
e incluir/a/b/c
, será/a/b/c
assistido? A inclusão de um diretório sempre inclui seu conteúdo?<include extension="/a" uid="*" action=".*" retname=".*" />
vai corresponder a todas as operações que operam em um arquivo cujo caminho contém/a
- pode até ser/foo/abc/bar
. Você provavelmente deseja ancorá-los todos com^
e$
, mas precisará incluir todo o caminho para que ele corresponda