Linux 服务器上的文件消失

Linux 服务器上的文件消失

我有 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 {} \;毕竟他偷偷摸摸的 :)。只是猜测,因为你提到备份文件也被删除了。

相关内容