Sintaxis del archivo de configuración de LoggedFS

8

¿Cuál es la sintaxis del archivo de configuración LoggedFS ?

La documentación oficial solo tenía instrucciones de uso para el loggedfscomando y un ejemplo de archivo de configuración. Ok, es XML, pero ¿cuáles son todas las etiquetas y atributos posibles y qué significan?

Gilles 'SO- deja de ser malvado'
fuente

Respuestas:

8

Revisé Config.cppel archivo responsable de analizar la configuración. La configuración de ejemplo realmente captura bastante bien las opciones disponibles: no hay muchas

Cuando me refiero a "la salida de ejemplo" a continuación, estoy hablando de esta línea (extraída al azar de la página de muestra):

17:29:35 (src/loggedfs.cpp:136) getattr /var/ {SUCCESS} [ pid = 8700 kded [kdeinit] uid = 1000 ]

La etiqueta raíz es <loggedFS>. Tiene dos atributos opcionales:

  • logEnabled es una cadena: "verdadero" significa que en realidad debería generar información de registro; cualquier otra cosa deshabilita todo el registro. El valor predeterminado es "verdadero", ya que ese es el punto central del programa
  • printProcessName es una cadena: "verdadero" significa que la salida del registro incluirá el nombre del proceso, cualquier otra cosa significa que no lo hará. El valor predeterminado es "verdadero". En el resultado del ejemplo, kded [kdeinit]es el nombre del proceso

Los únicos nodos secundarios que le importan son <include>y <exclude>. En el ejemplo, agrupan los que están debajo <includes>y los <excludes>bloques, pero el analizador los ignora (al igual que otros nodos excepto <include>y <exclude>).

Naturalmente, las <include>reglas hacen que muestre la línea de registro si coinciden, mientras que las <exclude>líneas no lo hacen. En caso de superposición, <exclude>anulaciones <include>. Normalmente necesita al menos una <include>regla que coincida para que se registre un evento, pero una excepción es si hay 0 <include>reglas; entonces todos los eventos se registran, incluso si hay <exclude>líneas coincidentes .

Ambos <include>y <exclude>toman los mismos atributos:

  • La extensión es una expresión regular que se compara con la ruta absoluta del archivo al que se accedió / modificó / lo que sea ( extensiones un nombre bastante pobre, pero supongo que ese es el uso común). Por ejemplo, si usted touch /mnt/loggedfs/some/file, la expresión regular en extensiontendría que coincidir (parcial)/mnt/loggedfs/some/file
  • uid es una cadena que contiene un número entero o *. La regla solo coincide con una operación dada si el propietario del proceso que causó la operación tiene la ID de usuario especificada ( *naturalmente, cualquier ID de usuario coincide). En el resultado de ejemplo, 1000es el uid
  • action es el tipo específico de operación realizada en el sistema de archivos. En el resultado de ejemplo, getattres la acción. Las posibles acciones son:
    • acceso
    • chmod
    • chown
    • getattr
    • enlace
    • mkdir
    • mkfifo
    • mknod
    • abierto
    • abierto-solo lectura
    • lectura abierta
    • open-writeonly
    • leer
    • readdir
    • readlink
    • rebautizar
    • rmdir
    • statfs
    • enlace simbólico
    • truncar
    • desconectar
    • utime
    • utimens
    • escribir
  • retname es una expresión regular. Si el código de retorno de la operación real del sistema de archivos realizada por LoggedFS es 0, la expresión regular se compara con la cadena SUCCESS. Un código de retorno distinto de cero hace que coincida con FAILURE. Esos son los únicos valores posibles, lo que muy probablemente usted está bien va a hardcode SUCCESS, FAILUREo uso .*si quieres tanto. En el resultado de ejemplo, SUCCESSes elretname

A diferencia de los <loggedFS>atributos, estos no tienen valores predeterminados. Además, si bien el analizador reconocerá los atributos desconocidos y el error, no detectará los atributos faltantes, por lo que si olvida un atributo, utilizará la memoria no inicializada.

Michael Mrozek
fuente
¿Cuál es la lista predeterminada de inclusión / exclusión (vacía, así que no se incluye nada, creo)? Si incluye /a, excluye /a/be incluye /a/b/c, ¿se /a/b/cmira? ¿Incluir un directorio siempre incluye su contenido?
Gilles 'SO- deja de ser malvado'
@Gilles No sabe nada sobre directorios, solo toma la ruta absoluta completa y la compara con la expresión regular. Por <include extension="/a" uid="*" action=".*" retname=".*" />lo tanto, coincidirá con todas las operaciones que operan en un archivo cuya ruta contiene /a, incluso podría ser /foo/abc/bar. Probablemente quiera anclarlos a todos con ^y $, pero luego debe incluir todo el camino para que coincida
Michael Mrozek
@Gilles No tener ninguna regla es en realidad un caso especial, así que lo agregaré a la respuesta
Michael Mrozek