有一天,我在 Debian 服务器上设置了一个小 shell 脚本,当文件发生变化时向我发送电子邮件;它看起来像这样:
#!/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)" "[email protected]"
fi
我不断收到通知,一个神秘的 0 长度文本文件(可通过网络访问,可由 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"...
在收到下一封包含新修改日期的电子邮件后,我运行了 ausearch:没有新的匹配!
怎么会这样呢?
- - 更新 - -
我通过其他方式发现该进程是 PHP 作为 Apache 调用的 fastCGI 运行的。PHP 函数调用是:
touch('path/to/file.txt');
所以问题变成了:fastCGI PHP 如何修改文件并逃避 auditd 的检测?这开始看起来像是 auditd 的一个错误。
答案1
删除该规则并尝试以下操作:
auditctl -w <path-to-file> -p wa -k mystery-file
还要确保 /etc/init.d/auditd 已启动。