Я пытаюсь узнать, сколько раз файл был открыт (с момента запуска ОС). Я думаю сделать это через 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
указывает , что система будет проверять ¨R EADS ж обрядах, е х ecutions, а через ttribute или разрешения изменения. Наконец, опция -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, и примером такого типа анализа производительности системы, а не аудита, является загрузочная диаграмма.
Настройка этого выходит за рамки моего опыта, однако - надеюсь, что ссылки окажутся полезными.