首页 > 技术文章 > 防止rm误删数据

SyXk 2021-02-26 14:04 原文

背景:常在河边走,哪有不湿鞋。为了防止在linux服务器执行了"rm -rf"误删除重要数据。

下面提供如下选择方案:

 

1、建立回收站机制.

当你在删除数据的时候,并不是真的在删除数据,而是将文件移动到一个特定的目录中。相当于看似执行的是 rm 命令实际上执行的是 mv 命令。

1.1 下载下面脚本,将文件复制粘贴到~/.bashrc的下面

https://files.cnblogs.com/files/SyXk/rm%E5%9B%9E%E6%94%B6%E7%AB%99%E8%84%9A%E6%9C%AC_trash.rar

1.2 测试验证

准备环境如下:

验证结果如下:

 

2、使用trash-cli工具

trash-cli是一个使用 python 开发的软件包,包含 trash-put、restore-trash、trash-list、trash-empty、trash-rm等命令,我们可以通过这写命令,将文件移动到回收站,或者还原删除了的文件。

2.1 下载trash-cli安装包

2.2 开始安装

2.3 安装成功后,系统上就会有以下工具

功能说明:

trash-put 将文件或目录移入回收站
trash-empty 清空回收站
trash-list 列出回收站中的文件
trash-restore 还原回收站中的文件
trash-rm 删除回首站中的单个文件

2.4 安装完毕后,进行如下配置。用trash-put替换rm命令

2.5 测试验证

删除测试:

还原删除的文件

备注:

trash-put命令会把我们想要删除的文件移动到~/.local/share/Trash/files 中。

相关信息记录在~/.local/share/Trash/info中。

 

3、使用safe-rm工具

safe-rm ,它具有 rm 命令的所有功能,不过 safe-rm 命令可以设置路径黑名单,也就是说在黑名单中的目录或文件将不会被删除;我们把 rm 命令替换为 safe-rm ,之后执行 rm 命令也就相当于执行 safe-rm 命令,也就不会误删除黑名单中的目录或文件了。注意一些脚本中使用完全路径/bin/rm则不会受此影响。

3.1 下载safe-rm安装包

wget https://launchpad.net/safe-rm/trunk/0.12/+download/safe-rm-0.12.tar.gz

tar -xf safe-rm-0.12.tar.gz

cp safe-rm-0.12/safe-rm /usr/local/bin/

3.2 替换safe-rm为系统默认的rm命令

做一个 rm 命令的符号链接,之后执行 rm 命令就相当于执行 safe-rm
设置环境变量,要保证/usr/local/bin在其他变量路径前面

先查看当前变量的顺序,可以看到/usr/local/bin没有在其他路径的最前面。

3.3 设置路径黑名单

创建/etc/safe-rm.conf文件,将重要文件或者目录的完整路径输入进去保存就可以了,每条以回车分隔。

vim  /etc/safe-rm.conf
/
/bin
/boot
/dev
/etc
/home
/lib
/lib64
/media
/mnt
/opt
/proc
/run
/sbin
/root
/sbin
/sys
/srv
/usr
/usr/bin
/usr/include
/usr/lib
/usr/local
/usr/local/bin
/usr/local/include
/usr/local/sbin
/usr/local/share
/usr/sbin
/usr/share
/usr/src
/var

3.4 测试验证

说明:显示/bin/rm: missing operand,代表成功。如果不成功会显示"rm: missing operand"

 

测试删除目录

使用绝对路径:

可见:但使用绝对路径/bin/rm时。文件已经都被删除。系统崩坏。

4、使用chattr命令

对于文件而言:

chattr 操作符 属性 文件名

操作符: + :给文件增加属性 - :去除文件属性

    性: a- 允许给文件追加内容 i- 保护模式(不允许删除或修改)

给文件增加+i属性.

可见:文件已经不允许进行删除与修改.

对于目录而言:

给目录增加+i属性.

可见:目录已经不允许进行删除与修改.

5、服务器定期做快照.

 

 

 

 

 

 

6、做好账号权限管理.

只允许哪些人有较高权限,而不允许哪些人执行哪些操作(如:不允许执行rm)。

 

 

7、部署堡垒机jumpserver

 

 

 

其他

问题1:ImportError:No module named psutil解决方案:

https://blog.51cto.com/chenql/2126694

问题2:pip安装软件时出现Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build*的解决方案

https://blog.csdn.net/qq_37110648/article/details/86982877

 

推荐阅读