如何防止root权限下rm误删(3种方法)
背景
很多情况下,为了方便,许多人喜欢使用rm -rf直接删除文件,这样很容易头脑一热就犯错,带来不可估量的后果,“删库跑路”?,你跑得掉再说
建议养成良好习惯,减少使用rm,特别是在生产环境中,一旦敲下去,准备走人吧
下面主要从预防,操作习惯和遇到rm删除重要东西如何尽可能恢复
预防措施
1.操作习惯:
1.少用rm或者基本不用
2.可以建立“垃圾箱”目录,使用定时任务crontab进行定时清除该目录下的文件
2.容灾
备份+异地容灾策略
3.权限
权限方面应该多多重视
1.重要的权限不应由一人管理,而是应该多人管理,使用前多人再三确认;
2.对应职能,业务需求分发用户权限
出现rm删除重要文件时的解决方案
1.lsof(主讲)
lsof |grep fileName
查看被删除的文件有无在使用过程中被删除的
由于rm删除的是硬链接个数,当链接为0时会清空,如果被程序内核等使用时,链接个数其实还有一个,此时文件还没有被真正删除!!
原理:
在Linux系统中,每个运行中的程序都有一个宿主进程彼此隔离,以/proc/进程号来体现(Linux本质上就是一个文件系统),比如:ls -l /proc/13067 查看进程PID为13067的进程信息;当程序运行时,操作系统会专门开辟一块内存区域,提供给当前进程使用,对于依赖的文件,操作系统会发放一个文件描述符,以便读写文件,当我们执行 rm -f 删除文件时,其实只是删除了文件的目录索引节点,对于文件系统不可见,但是对于打开它的进程依然可见,即仍然可以使用先前发放的文件描述符读写文件,正是利用这样的原理,所以我们可以使用I/O重定向的方式来恢复文件
查看被删除文件
ls -l /proc/4254/fd/7
查看文件描述
file /proc/4254/fd/
7
/proc/4254/fd/7: broken symbolic link to '/root/fileName (deleted)'
恢复:
cp /proc/4254/fd/7 NewfileName
2.ext3文件系统反删除利器ext3grep
用此方法前,重要的一点是,不要操作被删除文件的目录,一切都不要动,然后umount卸载目录所在硬盘,具体实战不一一赘述
3.extundelete工具
此方法也是不要动案发现场,具体实战也不一一赘述,如有需要,后续补充
总结
做前先问,不要使用rm,做个垃圾箱,养成好习惯,道路没有捷径,一当犯错,要最小程度减小损害