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)
您绝对确定用户本人没有(意外)删除它们吗?
我有一些无知的(Windows)用户也遇到了同样的问题。事实证明,他们每次使用 ftp 客户端访问其主目录时都会自行删除这些文件。他们注意到了 .xxxx 文件(ftp 客户端没有隐藏它们)并删除了“混乱”。
我从来没有想到他们是对自己这么做的,直到其中一个人抱怨他几天前删除的文件自动重新出现。