В жизни иногда случаются нехорошие события и некие персонажи стараются насолить владельцу системы по самым разным причинам. Недавний пример показал, что даже взаимнодоброе расставание с разработчиком может повлечь за собой неприятные последсвия в виде деструктивных действий со стороны этого самого разрабочика. К сожалению, до сих пор далеко не все используют scm, поэтому приходится как-то следить за изменениями в коде проекта и системе. В простом случае можно использовать команду вроде:
1 | /usr/bin/find / var /www/ ! -path "*/tmp/*" ! -path "*/templates_c/*" ! -path "*/cache/data_*" -type f -name '*.php' -mtime -7 | mail -e -s "change files" mail@domain.ltd |
или
1 | /usr/bin/find / var /www -mindepth 1 -newermt '2017-10-20 15:00' ! -newermt '2017-10-23 15:00' -ls | mail -e -s "change files" mail@domain.ltd |
Но существует более надёжный и луший способ для наблюдения за измененными файлами - это старинная утилита AIDE - Advanced Intrusion Detection Enviornment.
Утилита работает по принципу создания базы данных о файлах системы c помощью stat, что более надёжно, чем использование find. Способ с использованием find можно обмануть подменой дат изменения и он работает, только потому что даты изменения как правило оставляют без изменения. Смотрите как просто:
1 | touch -d "2 hours ago" filename |
или
1 | touch -a -m -t 201710180130.09 filename |
и способ с find уже не работает.
Итак установим утилиту. У меня gentoo, поэтому:
1 | emerge app-forensics/aide |
Теперь предстоит самое сложное - сконфигурировать.
Шаг 1 - сконфигурируем за областями слежения.
Для этого создадим конфигурациооный файл. Приведу пример:
1 2 3 4 | database=file:/root/aide.db database_out=file:/root/aide. new .db database_new=file:/root/aide. new .db /etc R |
Шаг 2 - сгенерируем срез системы
1 | # aide -c aide.conf --init |
Эта команда просканирует все файлы, указанные в конфигурационном файле, и создаст базу файлов aide.new.db, которую необходимо переименовать в aide.db. AIDE для сканирования использует stats, поэтому база данных содержит права, иноды, время доступа, модификации и прочие данные о файле. Вот чем хорошо использование этой утилиты.
Теперь, когда у нас есть срез данных о файлах системы, мы можем вычислять изменения в системе с момента создания последнего среза:
1 | # aide -c aide.conf --check |
При вызове этой команды, мы получим список изменений, произошедших в системе. Теперь обновим нашу базу:
1 | # aide -c aide.conf --update |
В результате сгенерируется aide.new.db, который можно сравнить с предыдущим aide.db.
Приведу примеры конгураций для AIDE:
# Такие записи скажут aide, что необходимо рекурсивно просканировать директории /bin, /etc, /usr
1 2 3 | /bin R /etc R /usr R |
Эти две аналогичные записи скажет aide, что необходимо просканировать директорию _без поддиректорий_:
1 2 | =/sbin/ /sbin$ R |
Эта запись скажет aide, что необходимо исключить директорию /var. Удобно, если вы рекурсивно сканируете "/"
1 | !/ var |
Когда вы сгенерируете срез вашей системы, позаботьтесь о том, чтобы надёжно сохранить его. Например, передайте его на другую систему, чтобы злодей не обновил срез системы. Далее обновляйте срез системы время от времени и в нужный момент сраните их.
Комментарии (0)