linux服务器上的文件消失

Cha*_*d P 13 linux files auditd

我有 4 个特定文件似乎不断从用户的主目录中消失。据我们所知,没有 cronjobs 或其他自动化任务会删除它们。我已经对它们设置了 auditd,但日志并没有真正显示出任何感兴趣的东西。我可以看到我们的备份实用程序每晚都在访问它们,直到它们不再存在为止,但除此之外别无他物。有没有什么会导致这些文件被删除而绕过auditd?

有问题的文件是这些:

/home/username/.bashrc
/home/username/.bash_profile
Run Code Online (Sandbox Code Playgroud)

以及该用户的 .ssh 目录中的几个文件。放置在名为“keepers”的子文件夹中的这些文件的副本也会同时被删除。将它们的权限更改为 000 并将它们归 root 拥有并没有帮助。

我目前已经设置了 inotifywait 来记录创建、删除、移动那个子文件夹,所以希望这会出现一些东西,尽管除了它发生的时间之外没有记录太多,而不是导致它的原因。

Mir*_*ici 20

解决方案 1:systemtap
您可以使用systemtap显示所有试图在和文件的 inode 上 使用unlink() 的PID 。.bashrc.bash_profile

为您的内核安装systemtap和调试符号。

创建一个名称unlink.stap为以下内容的文件:

probe syscall.unlink
{
    printf ("%s(%d) unlink (%s) userID(%d)\n", execname(), pid(), argstr, uid())
}
Run Code Online (Sandbox Code Playgroud)

然后运行它 sudo stap unlink.stap

解决方案2:inotify
您也可以使用inotify查看文件何时被删除。

解决方案 3:ftrace
另一种解决方案是使用ftrace

trace-cmd record -e \*unlink\*
Run Code Online (Sandbox Code Playgroud)

等待文件被删除,按CTRL+C停止trace-cmd record ...,然后运行:

trace-cmd report
Run Code Online (Sandbox Code Playgroud)

解决方案 4: bpftrace
安装bpftrace,然后运行:

bpftrace -e 'tracepoint:syscalls:sys_enter_unlink* { printf("%s %s\n", comm, str(args->pathname)); }'
Run Code Online (Sandbox Code Playgroud)


Ton*_*nny 5

您绝对确定用户本人没有(意外)删除它们吗?

我有一些无知的(Windows)用户也遇到了同样的问题。事实证明,他们每次使用 ftp 客户端访问其主目录时都会自行删除这些文件。他们注意到了 .xxxx 文件(ftp 客户端没有隐藏它们)并删除了“混乱”。

我从来没有想到他们是对自己这么做的,直到其中一个人抱怨他几天前删除的文件自动重新出现。

  • 现在很有趣……事情发生时就不那么有趣了,我不知道发生了什么。@Chad P:请让我们知道您发现了什么。我觉得这个很好奇。 (3认同)
  • 相信我,我希望事情能这么简单。 (2认同)

Sir*_*rex 5

除了micea 的回答之外,您还可以以root 用户身份chattr +i 文件,并查看在尝试删除它们时是否有任何记录错误。