Синтаксис файла конфигурации LoggedFS

8

Каков синтаксис файла конфигурации LoggedFS ?

Официальная документация содержала только инструкции по использованию loggedfsкоманды и пример файла конфигурации. Хорошо, это XML, но каковы все возможные теги и атрибуты и что они означают?

Жиль "ТАК - перестань быть злым"
источник

Ответы:

8

Я проколол Config.cppфайл, отвечающий за анализ конфигурации. Конфигурация примера на самом деле довольно неплохо справляется со сборкой доступных опций - их не так много.

Когда я ссылаюсь на «пример выходных данных» ниже, я говорю об этой строке (случайно взятой со страницы примера):

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

Корневой тег есть <loggedFS>. У него есть два необязательных атрибута:

  • logEnabled является строкой - «true» означает, что он должен фактически выводить информацию журнала; что-нибудь еще отключает всю регистрацию. По умолчанию "true", так как в этом вся суть программы
  • printProcessName является строкой - «true» означает, что вывод журнала будет включать имя процесса, а все остальное означает, что он не будет. По умолчанию "true". В выходных данных примера kded [kdeinit]имя процесса

Единственные дочерние узлы, о которых он заботится - это <include>и <exclude>. В этом примере они группируют блоки under <includes>и <excludes>блоки, но они игнорируются парсером (как и любые другие узлы, кроме <include>и <exclude>).

Естественно, <include>правила заставляют его выводить строку журнала, если они совпадают, в то время как <exclude>строки заставляют это не делать. В случае перекрытия <exclude>переопределяет <include>. Обычно <include>для регистрации события требуется по крайней мере одно правило, но исключение составляет 0 <include>правил - все события регистрируются, даже если есть совпадающие <exclude>строки .

Оба <include>и <exclude>принимают одинаковые атрибуты:

  • расширение - это регулярное выражение, которое сопоставляется с абсолютным путем к файлу, к которому был получен доступ / изменен / что угодно ( extensionэто довольно плохое имя, но я думаю, что это обычное использование). Например, если вы touch /mnt/loggedfs/some/file, регулярное выражение в extensionдолжно соответствовать (частично)/mnt/loggedfs/some/file
  • UID является строкой , которая содержит либо целое число или *. Правило соответствует данной операции только в том случае, если владелец процесса, вызвавшего операцию, имеет указанный идентификатор пользователя ( *естественно, это означает, что совпадает любой идентификатор пользователя). В выходных данных примера, 1000UID
  • действие - это определенный тип операции, выполняемой в файловой системе. В выходном примере getattrэто действие. Возможные действия:
    • доступ
    • CHMOD
    • Чаун
    • GetAttr
    • ссылка на сайт
    • MkDir
    • mkfifo
    • MKNOD
    • открытый
    • открытой только для чтения
    • открытое чтение и запись
    • открытой WriteOnly
    • читать
    • READDIR
    • readlink
    • переименование
    • RmDir
    • statfs
    • символическая
    • усечение
    • Разорвать связь
    • utime
    • utimens
    • записывать
  • retname - это регулярное выражение. Если код возврата фактической операции файловой системы, выполняемой LoggedFS, равен 0, регулярное выражение сопоставляется со строкой SUCCESS. Ненулевой код возврата приводит к его сопоставлению FAILURE. Таков возможное только значение, так что скорее всего вы либо собираетесь жёстко SUCCESS, FAILUREили использование , .*если вы хотите , и другие. В выходных данных примера SUCCESSэтоretname

В отличие от <loggedFS>атрибутов, они не имеют значений по умолчанию. Кроме того, хотя анализатор распознает неизвестные атрибуты и выдает ошибку, он не обнаруживает отсутствующие атрибуты, поэтому, если вы забудете атрибут, он будет использовать неинициализированную память.

Михаил Мрозек
источник
Что такое список включения / исключения по умолчанию (пустой, так что я думаю, что ничего не включено)? Если вы включаете /a, исключаете /a/bи включаете /a/b/c, это /a/b/cсмотреть? Включает ли каталог всегда его содержимое?
Жиль "ТАК - перестань быть злым"
@ Жиль Он ничего не знает о каталогах, он просто берет полный абсолютный путь и сопоставляет его с регулярным выражением. Так <include extension="/a" uid="*" action=".*" retname=".*" />что будет соответствовать каждой операции, которая работает с файлом, путь которого содержит /a- это может даже быть /foo/abc/bar. Вы, вероятно, хотите связать их всех с помощью ^и $, но затем вам нужно включить весь путь, чтобы он соответствовал
Майкл Мрозек
@ Жиль Отсутствие каких-либо правил на самом деле является особым случаем, поэтому я добавлю его к ответу
Майкл Мрозек