我有4个特定的文件似乎从用户的主目录中消失。 据我们所知,没有任何cronjobs或其他自动化任务将会被删除。 我已经安装了审计日志,但日志没有真正显示任何有趣的东西。 我可以看到我们的备份实用程序每天晚上访问它们,直到它们不在那里,但没有别的。 有什么会导致这些文件被删除,将绕过审计?
有问题的文件是这些:
/home/username/.bashrc /home/username/.bash_profile
以及该用户的.ssh目录中的一些文件。 放置在名为“keepers”的子文件夹中的这些文件的副本也会同时被删除。 将他们的权限更改为000,让他们拥有root权限没有帮助。
我目前有inotifywait安装程序来logging创build,删除,移动该子文件夹,所以希望这会变成一些东西,虽然它不logging什么时候发生,而不是什么造成的。
您可以使用systemtap在.bashrc和.bash_profile文件的.bashrc节点上显示所有试图使用unlink()的 PID。
安装systemtap和内核的debugging符号。
使用以下内容创build名称为unlink.stap的文件:
probe syscall.unlink { printf ("%s(%d) unlink (%s) userID(%d)\n", execname(), pid(), argstr, uid()) }
然后用sudo stap unlink.stap运行它
您也可以使用inotify来查看文件何时被删除。
另一个解决scheme是使用ftrace :
trace-cmd record -e \*unlink\*
等待文件被删除,按CTRL + C停止trace-cmd record ... ,然后运行:
trace-cmd report
除了鼠标的回答外,你还可以将文件作为root用户查看,看看是否有任何东西在尝试删除时logging错误。
你确定用户本人不是(意外)删除它们吗?
我有一些无知的(Windows)用户有同样的问题。 原来他们每次用ftp客户端访问他们的home-dir时都自己删除了这些文件。 他们注意到.xxxx文件(ftp客户端没有隐藏它们),并删除了“混乱”。
我从来没有想过,他们自己做了这件事,直到他们中的一个人抱怨几天前他自己重新出现的文件。
我们使用bash注销脚本(〜/ .bash_logout)在注销时清除某些文件 – 你可能会检查是否有这个设置,也许是用一个胖手指。
更像是一个入侵者,谁在做一个查找/家庭/用户名文件名-exec rm -f {} \; 毕竟他偷偷摸摸:)。 只是猜测,因为你提到备份文件也被删除。
为了防止丢失文件及其内容,您可以通过LD_PRELOAD设置libtrash 。 使用libtrash你可以做很多事情,但是那些你可能感兴趣的是
INTERCEPT_UNLINK INTERCEPT_RENAME INTERCEPT_FOPEN INTERCEPT_OPEN
关于libtrash的好文章可以在这里find
你提到的其他东西,你认为文件根源,他们仍然被删除。 这是因为/ home / username是由用户名所有的; 如果dir有说755的话; 那么无论谁可以被用户删除,拥有该目录中的任何文件或目录; 即使它是根文件或目录。 这基本上是由于在dir中删除文件意味着更改目录内容,并且用户拥有该目录中的7个(在755中),所以他可以做任何他想做的事情。
有其他人已经通过chattr在ext文件系统上build议将文件设置为不可变(+ i)的方法来阻止这种情况。 然后,在对具有+ i标志的file / dir进行任何更改之前,需要取消设置不可变标志。 不可变标志/ chattr只能由root使用。