Назад | Перейти на главную страницу

Как fastCGI PHP изменяет файл и избегает обнаружения с помощью auditd?

На днях я установил небольшой сценарий оболочки на сервере 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 запущен.