Revisé Config.cpp
el 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 (
extension
es 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 extension
tendrí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, 1000
es el uid
- action es el tipo específico de operación realizada en el sistema de archivos. En el resultado de ejemplo,
getattr
es 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
, FAILURE
o uso .*
si quieres tanto. En el resultado de ejemplo, SUCCESS
es 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.
/a
, excluye/a/b
e incluye/a/b/c
, ¿se/a/b/c
mira? ¿Incluir un directorio siempre incluye su contenido?<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