据项目同事反馈,主机项目部署的编译环境被无故删除,且主机root密码未对外公开,请求协助排查。对于这种情况大家的第一反应是被手残党误删,并且在邮件中明确指出,抓到剁手。。。。。对于这种情况,建议主机建立回收站机制。废话不多说,直接上干货。当前系统
Red Hat 7
首先,查看系统日志/var/log/message
根据日志中内容,可以看出对临时文件的清理是每天一次,具体清除了什么文件,没有垃圾回收机制,也不得知。
接下来,查看下磁盘情况占用情况以及挂载情况,不看不知道,一看吓一跳。同一块盘,挂在了两个目录,这没什么问题,重点是在挂载到临时目录/var/tmp目录上面,经测试,对data目录操作会同步/var/tmp。猜想这里是临时文件的自动清理机制引发的无故删除了项目部署的内容。
知识点:系统对临时目录的清理机制是:
/tmp目录自动清理10天未使用的文件;
/var/tmp目录自动清理30天未使用的文件
接着向下延伸排查,这种机制的配置文件在哪里,是什么情况下会触发这种机制,大概多长时间清理一次,不过根据messages日志中体现的是每天清理一次,找到配置的证据。
首先,找到了/var/tmp目录的配置文件;/usr/lib/tmpfiles.d/tmp.conf
接着排查什么多长时间会触发这种自动清理机制:接着找每天更新的系统日志文件:/var/log/boot.log,翻译说是启动了什么玩意和清理钩,清理钩?思路有了,继续百度。
/usr/lib/systemd/system系统启动目录中查找tmp相关的文件
很刺激,一个一个研究。clean相关的首当其冲
systemd-tmpfiles-clean.service
systemd-tmpfiles-clean.timer,好了,问题得以闭环了。接下来我只需要知道这几个文件的详解以及相关内容。再验证下猜想,此次协查也就闭环了。
知识点:
在Red Hat Enterprise Linux 7和更高版本中,包含了一个称为systemd-tmpfiles的新工具,该工具提供了一种结构化且可配置的方法来管理临时目录和文件。
systemctl status systemd-tmpfiles-*启动服务的命令
启动systemd-tmpfiles-setup服务单元时,它将运行systemd-tmpfiles –create –remove命令,该命令从以下位置检查配置文件:
/usr/lib/tmpfiles.d/.conf。 --此系统只有这个配置文件
/run/tmpfiles.d/.conf
/etc/tmpfiles.d/*.conf
如果上述配置文件中有标记为删除的文件和目录,则会将其删除,对于标记为创建的文件和目录,必要时使用正确的权限创建它们。使用Systemd计时器清除临时文件。
一个名为systemd-tmpfiles-clean.timer的systemd计时器单元会按固定的时间间隔触发systemd-tmpfiles-clean.service,然后执行systemd-tmpfiles -clean命令。
如果进行更改,请确保重新加载服务:(好像不重新加载也不影响)
systemctl daemon-reload
systemctl enable --now systemd-tmpfiles-clean.timer
验证猜想;
之前对/var/tmp的清理机制设置是
开机15min或者24小时清理/var/tmp目录下30d未使用的文件
现在设置开机15min或者24小时清理/var/tmp目录下1m未使用的文件
重置配置,重启了机器,看到了前一天创建的目录被删除,且messages系统日志信息中打印了
好了,协查完毕。