Sintaxe do arquivo de configuração do LoggedFS

8

Qual é a sintaxe do arquivo de configuração do LoggedFS ?

A documentação oficial tinha apenas instruções de uso para o loggedfscomando e um exemplo de arquivo de configuração. Ok, é XML, mas quais são todas as tags e atributos possíveis e o que elas significam?

Gilles 'SO- parar de ser mau'
fonte

Respostas:

8

Eu vasculhei Config.cppo 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 extensionprecisaria 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, FAILUREou 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.

Michael Mrozek
fonte
Qual é a lista de inclusão / exclusão padrão (vazia, então nada está incluído, eu acho)? Se você incluir /a, excluir /a/be incluir /a/b/c, será /a/b/cassistido? A inclusão de um diretório sempre inclui seu conteúdo?
Gilles 'SO- stop be evil'
@ Gilles Não sabe nada sobre diretórios, apenas pega o caminho absoluto completo e o compara com a expressão regular. Então, <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
Michael Mrozek
@Gilles Não ter nenhuma regra é realmente um caso especial, por isso vou adicioná-la à resposta
Michael Mrozek