我通常使用 inotfiy_add_watch 来监控文件的删除,它对普通文件甚至大多数设备文件(/dev/zero 等)都有效,但对 /dev/null 却无效。似乎对它的任何操作都不会触发 inotify 事件。为什么?还有其他方法可以监控 rm /dev/null 吗?谢谢!
答案1
在 Linux 上,inotify 的限制在于它是特定于文件系统的。文档说“各种伪文件系统,例如 /proc、/sys 和 /dev/pts 无法通过 inotify 进行监控”
Linux审计系统能够记录任意系统调用。您可以放入的一个文件监控监视示例/etc/audit/rules.d/specialdev.rules
如下:
-a always,exit -F arch=b64 -S unlink,unlinkat,rename,renameat -F success=1 -F path=/dev/null -k specialdev
-a always,exit -F arch=b32 -S unlink,unlinkat,rename,renameat -F success=1 -F path=/dev/null -k specialdev
请注意,过滤特定的系统调用实际上会删除文件,而不仅仅是写入文件。使用以下命令查询最近的条目:
ausearch --start yesterday --end now --key specialdev
您可以从这些日志条目中得知发生的时间、进程 ID 和通信、各种 uid 以及 selinux 上下文。这是很好的线索,但您仍然需要花点时间寻找损坏的 shell 脚本或其他东西。