Как посчитать, сколько раз был открыт файл / каталог?

Я пытаюсь узнать, сколько раз файл был открыт (с момента запуска ОС). Я думаю сделать это через stat, но большинство флагов возвращают только разницу между ПОСЛЕДНИМ временем, когда оно было открыто.

1 ответ

В этом ответе объясняется, что необходимо сделать, но особенности того, как это зависит от вашего дистрибутива, ваших настроек и целей, и какие инструменты вы выберете для анализа данных:

То, что вы ищете, это демон Auditd в Linux. Из справочной страницы audd (8):

AuditD является компонентом пользовательского пространства системы аудита Linux. Он отвечает за запись записей аудита на диск. Просмотр журналов осуществляется с помощью утилит ausearch или aureport. Настройка правил аудита выполняется с помощью утилиты Auditctl. Во время запуска правила в /etc/audit/audit.rules читаются Auditctl и загружаются в ядро. Альтернативно, есть также программа augenrules, которая читает правила, расположенные в /etc/audit/rules.d/ и компилирует их в audit.rules файл. Сам демон аудита имеет некоторые параметры конфигурации, которые администратор может пожелать настроить. Они найдены в auditd.conf файл.

Аудит использует встроенные в ядро ​​функции для создания журналов при выполнении определенных системных вызовов в соответствии с вашими требованиями. После настройки вы найдете логи в /var/log/audit или где-то подобное в вашем дистрибутиве.

Чтобы проверить доступ к файлу, вы должны использовать что-то похожее на:

auditctl -w /path/to/interesting/files/ -p rwxa -k myfileaudits

куда -w указывает путь к файлам -p указывает, что система будет проверять количество написанных писем, исправлений и изменений в атрибутах или разрешениях. Наконец, -k опция позволяет вам указать произвольный ключ для использования при поиске этого правила с помощью ausearch.

Обратите внимание, что хотя audd работает от системных вызовов, -p r не отслеживает функцию чтения, а скорее открывает, так что журналы не затопляются при каждом чтении, но запись создается каждый раз, когда файл открывается для чтения.

После включения аудита и установки журналов ausearch можно использовать для анализа этих журналов на предмет любого доступа к указанным файлам, а стандартные текстовые или статистические инструменты можно использовать для создания подсчетов. Они могут варьироваться от grep а также wc -l для подсчета записей в журнале или какой-либо комбинации сценариев и GNU-R или gnuplot для создания графиков и отчетов.


Другой альтернативой является использование SELinux. Хотя SELinux - это инструмент для контроля доступа, который обычно регистрирует только отказы в доступе, его можно настроить для регистрации ВСЕГО доступа и предоставления аналогичной информации для auddd.


Редактировать: если запись доступа требуется с самого начала: например, во время установки ОС, во время загрузки до запуска audd или перед установкой audd, то требуются более крайние меры. Пользовательский установщик или пользовательский initrd.img Может потребоваться создание загрузочного файла, чтобы загрузить необходимые средства трассировки на уровне отладчика или ядра. Эти инструменты трассировки могут включать dtrace, perf, SystemTap, ktap или аналогичные инструменты уровня отладчика для захвата доступа во время загрузки. Хорошим справочником является http://www.brendangregg.com/linuxperf.html и примером такого типа анализа производительности системы, а не аудита, является загрузочная диаграмма.

Настройка этого выходит за рамки моего опыта, однако - надеюсь, что ссылки окажутся полезными.

Другие вопросы по тегам