👀 Watchman — инструмент просмотра файлов и каталогов на изменения

Контроль целостности файлов в 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.

 

cryptoparty

Cryptography is typically bypassed, not penetrated.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

5e7fa976b0640d40