На днях я установил небольшой сценарий оболочки на сервере Debian, чтобы отправлять мне электронное письмо при изменении файлов; это выглядит так:
#!/bin/sh
items=`find /var/www/vhosts -regex ".*/httpdocs/.*" -newer files_start -ls`
if [ ! -z "$items" ]
then
touch files_start
echo "$items" | mail -s "new file(s)" "security@example.com"
fi
Я продолжал получать уведомления об одном загадочном текстовом файле нулевой длины (доступном в Интернете, доступном для записи PHP и пользователем vhost, но не Apache), который изменялся 2-3 раза в день, поэтому я настроил auditd с помощью следующего правила.
auditctl -l
LIST_RULES: exit,always watch=/var/www/vhosts/path/to/file.txt perm=rwa key=wh1
Я протестировал его и с помощью ausearch, как и ожидалось, получил:
...comm="touch" exe="/bin/touch"...
Получив следующее электронное письмо с датой новой модификации, я запустил поиск: новых совпадений нет!
Как такое могло случиться?
----ОБНОВИТЬ----
Я обнаружил другими способами, что процесс - это PHP, работающий как fastCGI, вызываемый Apache. Вызов функции PHP:
touch('path/to/file.txt');
Возникает вопрос: как fastCGI PHP изменяет файл и избегает обнаружения с помощью auditd? Это начинает выглядеть как ошибка auditd.
Удалите это правило и попробуйте следующее:
auditctl -w <path-to-file> -p wa -k mystery-file
Также убедитесь, что /etc/init.d/auditd запущен.