我有 4 个特定文件似乎一直在从用户主目录中消失。据我们所知,没有 cronjobs 或其他自动化任务会删除它们。我已经在它们上设置了 auditd,但日志并没有显示任何有趣的内容。我可以看到我们的备份实用程序每晚都会访问它们,直到它们不再存在,但没有其他内容。有什么会导致这些文件被删除并绕过 auditd 的东西吗?
有问题的文件如下:
/home/username/.bashrc
/home/username/.bash_profile
以及该用户的 .ssh 目录中的几个文件。这些文件副本放在名为“keepers”的子文件夹中也会同时被删除。将它们的权限更改为 000 并让 root 拥有它们也无济于事。
我目前已设置 inotifywait 来记录该子文件夹的创建、删除、移动,因此希望它会出现一些内容,尽管除了发生时间之外它没有记录太多内容,而不是导致它的原因。
答案1
解决方案 1:systemtap
您可以使用系统水龙头显示所有尝试使用解除链接().bashrc
在和文件的 inode 上 .bash_profile
。
安装系统水龙头以及内核的调试符号。
创建一个名为的文件,unlink.stap
其内容如下:
probe syscall.unlink
{
printf ("%s(%d) unlink (%s) userID(%d)\n", execname(), pid(), argstr, uid())
}
然后运行sudo stap unlink.stap
解决方案 2:inotify
您还可以使用通知查看文件何时被删除。
解决方案 3:ftrace
另一个解决方案是使用ftrace:
trace-cmd record -e \*unlink\*
等待文件被删除,按 CTRL+C 停止trace-cmd record ...
,然后运行:
trace-cmd report
解决方案 4:bpftrace
安装bpftrace
,然后运行:
bpftrace -e 'BEGIN {printf("PID\tPPID\tCMD\tunlink path\n")} tracepoint:syscalls:sys_enter_unlink* { printf("%d\t%d\t%s\t%s\n", pid, curtask->parent->pid, comm, str(args->pathname)); }'
答案2
您是否绝对确定用户本人没有(意外地)删除它们?
我遇到过一些无知的(Windows)用户,他们也遇到了同样的问题。原来,他们每次使用 ftp 客户端访问主目录时都会自行删除这些文件。他们注意到了 .xxxx 文件(ftp 客户端没有隐藏它们)并删除了“杂乱文件”。
我从来没想过他们会自作自受,直到其中一人抱怨几天前删除的文件又自动重新出现。
答案3
除了 micea 的回答之外,您还可以以 root 身份 chattr +i 文件,看看在尝试删除它们时是否有任何记录错误。
答案4
更像是一个入侵者,正在做查找/home/user-name文件名-exec rm-f {} \;毕竟他偷偷摸摸的 :)。只是猜测,因为你提到备份文件也被删除了。