Контроль целостности файлов в Linux
Watchman – это кроссплатформенная служба просмотра файлов с открытым исходным кодом, которая отслеживает файлы и записи или выполняет действия при их изменении.
Он разработан Facebook и работает на Linux, OS X, FreeBSD и Solaris.
Он работает в модели клиент-сервер и использует утилиту inotify ядра Linux для обеспечения более мощных уведомлений.
Полезные особенности watchman
- Он рекурсивно наблюдает одним или несколькими деревьями каталогов.
- Каждый просматриваемый каталог называется root
- Он может быть настроен через командную строку или файл конфигурации, написанный в формате JSON.
- Он записывает изменения в лог-файлы.
- Поддерживает подписку на изменения файла, которые происходят в root.
- Позволяет запрашивать у root изменения файла с момента последней проверки или текущего состояния дерева.
- Можно смотреть весь проект.
В этой статье мы расскажем, как установить и использовать Watchman для просмотра (мониторинга) файлов и записи их изменений в Linux.
Мы также кратко продемонстрируем, как просматривать каталог и вызывать скрипт при его изменении.
Установка службы наблюдения за файлами Watchman в Linux
Мы установим службу Watchman из исходников, поэтому сначала установите эти необходимые зависимости libssl-dev, autoconf, automake libtool, setuptools, python-devel и libfolly, используя следующую команду в вашем дистрибутиве Linux.
----------- На Debian/Ubuntu ----------- $ sudo apt install autoconf automake build-essential python-setuptools python-dev libssl-dev libtool ----------- На RHEL/CentOS ----------- # yum install autoconf automake python-setuptools python-devel libssl-devel libtool # yum groupinstall 'Development Tools' ----------- На Fedora ----------- $ sudo dnf install autoconf automake python-setuptools libssl-devel libtool $ sudo dnf groupinstall 'Development Tools'
Вывод на Ubuntu:
sudo apt install autoconf automake build-essential python-setuptools python-dev libssl-dev libtool [sudo] пароль для 14745287: Чтение списков пакетов… Готово Построение дерева зависимостей Чтение информации о состоянии… Готово Уже установлен пакет build-essential самой новой версии (12.1ubuntu2). Уже установлен пакет python-setuptools самой новой версии (20.7.0-1). Уже установлен пакет libssl-dev самой новой версии (1.0.2g-1ubuntu4.15). libssl-dev установлен вручную. Уже установлен пакет python-dev самой новой версии (2.7.12-1~16.04). python-dev установлен вручную. Предлагаемые пакеты: autoconf-archive gnu-standards autoconf-doc libtool-doc gfortran | fortran95-compiler gcj-jdk НОВЫЕ пакеты, которые будут установлены: autoconf automake autotools-dev libltdl-dev libsigsegv2 libtool m4 обновлено 0, установлено 7 новых пакетов, для удаления отмечено 0 пакетов, и 499 пакетов не обновлено. Необходимо скачать 1 434 kБ архивов. После данной операции, объём занятого дискового пространства возрастёт на 5 854 kB. Пол:1 http://mirror.sigma.sbrf.ru/ubuntu xenial/main amd64 libsigsegv2 amd64 2.10-4 [14,1 kB] Пол:2 http://mirror.sigma.sbrf.ru/ubuntu xenial/main amd64 m4 amd64 1.4.17-5 [195 kB] Пол:3 http://mirror.sigma.sbrf.ru/ubuntu xenial/main amd64 autoconf all 2.69-9 [321 kB] Пол:4 http://mirror.sigma.sbrf.ru/ubuntu xenial/main amd64 autotools-dev all 20150820.1 [39,8 kB] Пол:5 http://mirror.sigma.sbrf.ru/ubuntu xenial/main amd64 automake all 1:1.15-4ubuntu1 [510 kB] Пол:6 http://mirror.sigma.sbrf.ru/ubuntu xenial/main amd64 libltdl-dev amd64 2.4.6-0.1 [162 kB] Пол:7 http://mirror.sigma.sbrf.ru/ubuntu xenial/main amd64 libtool all 2.4.6-0.1 [193 kB] Получено 1 434 kБ за 0с (10,4 MБ/c) N: Файл «yandex-browser-beta.list.off» в каталоге «/etc/apt/sources.list.d/» игнорируется, так как он не имеет неправильное расширение Выбор ранее не выбранного пакета libsigsegv2:amd64. (Чтение базы данных … на данный момент установлен 266421 файл и каталог.) Подготовка к распаковке …/libsigsegv2_2.10-4_amd64.deb … Распаковывается libsigsegv2:amd64 (2.10-4) … Выбор ранее не выбранного пакета m4. Подготовка к распаковке …/archives/m4_1.4.17-5_amd64.deb … Распаковывается m4 (1.4.17-5) … Выбор ранее не выбранного пакета autoconf. Подготовка к распаковке …/autoconf_2.69-9_all.deb … Распаковывается autoconf (2.69-9) … Выбор ранее не выбранного пакета autotools-dev. Подготовка к распаковке …/autotools-dev_20150820.1_all.deb … Распаковывается autotools-dev (20150820.1) … Выбор ранее не выбранного пакета automake. Подготовка к распаковке …/automake_1%3a1.15-4ubuntu1_all.deb … Распаковывается automake (1:1.15-4ubuntu1) … Выбор ранее не выбранного пакета libltdl-dev:amd64. Подготовка к распаковке …/libltdl-dev_2.4.6-0.1_amd64.deb … Распаковывается libltdl-dev:amd64 (2.4.6-0.1) … Выбор ранее не выбранного пакета libtool. Подготовка к распаковке …/libtool_2.4.6-0.1_all.deb … Распаковывается libtool (2.4.6-0.1) … Обрабатываются триггеры для install-info (6.1.0.dfsg.1-5) … Обрабатываются триггеры для man-db (2.7.5-1) … Обрабатываются триггеры для doc-base (0.10.7) … Обработка 1 добавленный файл doc-base... Настраивается пакет libsigsegv2:amd64 (2.10-4) … Настраивается пакет m4 (1.4.17-5) … Настраивается пакет autoconf (2.69-9) … Настраивается пакет autotools-dev (20150820.1) … Настраивается пакет automake (1:1.15-4ubuntu1) … update-alternatives: используется /usr/bin/automake-1.15 для предоставления /usr/bin/automake (automake) в автоматическом режиме Настраивается пакет libltdl-dev:amd64 (2.4.6-0.1) … Настраивается пакет libtool (2.4.6-0.1) … Обрабатываются триггеры для libc-bin (2.23-0ubuntu9) … N: Файл «yandex-browser-beta.list.off» в каталоге «/etc/apt/sources.list.d/» игнорируется, так как он не имеет неправильное расширение
После установки необходимых зависимостей вы можете начать сборку Watchman, загрузив его репозиторий github, перейти в локальный репозиторий, сконфигурировать, собрать и установить его с помощью следующих команд.
$ git clone https://github.com/facebook/watchman.git $ cd watchman $ git checkout v4.9.0 $ ./autogen.sh $ ./configure $ make $ sudo make install
Просмотр файлов и каталогов с помощью Watchman в Linux
Watchman может быть настроен двумя способами: (1) через командную строку, когда демон работает в фоновом режиме или (2) через файл конфигурации, записанный в формате JSON.
Чтобы просмотреть каталог (например, ~/bin) на предмет изменений, выполните следующую команду.
$ watchman watch ~/bin/
Следующая команда записывает файл конфигурации с именем state в /usr/local/var/run/watchman/<username> -state /, в формате JSON, а также файл журнала с именем log в том же месте.
Вы можете просмотреть два файла, используя команду cat как показано далее:
$ cat /usr/local/var/run/watchman/aaronkilik-state/state $ cat /usr/local/var/run/watchman/aaronkilik-state/log
Вы также можете определить, какое действие инициировать, когда каталог отслеживается на предмет изменений.
Например, в следующей команде «test-trigger» – это имя триггера, а ~ bin/pav.sh – скрипт, который будет вызываться при обнаружении изменений в отслеживаемом каталоге.
В целях тестирования скрипт pav.sh просто создает файл с отметкой времени (т.е. файл. $Time.txt) в том же каталоге, где хранится скрипт.
time=`date +%Y-%m-%d.%H:%M:%S` touch file.$time.txt
Сохраните файл и сделайте скрипт исполняемым, как показано ниже:
$ chmod +x ~/bin/pav.sh
Чтобы запустить триггер, выполните следующую команду.
$ watchman -- trigger ~/bin 'test-trigger' -- ~/bin/pav.sh
Когда вы запускаете watchman, чтобы следить за каталогом, он добавляет список наблюдения и просматриваете его.
Чтобы посмотреть его, запустите:
$ watchman watch-list
Чтобы просмотреть список триггеров для root, выполните следующую команду (замените ~/bin именем root).
$ watchman trigger-list ~/bin
Исходя из описанной выше конфигурации, каждый раз, когда изменяется каталог ~/bin, внутри него создается файл, например file.2019-03-13.23: 14: 17.txt, и вы можете просмотреть их с помощью команды ls.
$ ls
Удаление службы Watchman на Linux
Если вы хотите удалить его, перейдите в исходный каталог и выполните следующие команды:
$ sudo make uninstall $ cd '/usr/local/bin' && rm -f watchman $ cd '/usr/local/share/doc/watchman-4.9.0 ' && rm -f README.markdown
Для получения дополнительной информации посетите репозиторий Watchman Github: https://github.com/facebook/watchman.