如何规避rm-rf导致的服务器删除问题

一、rm-rf不安全,仅仅是由于不小心么?

1.1 rm-rf风险

rm -rf / home/work/logs/

乍看之下是在删除home下work下的logs中的日志,但是这条命令有问题么?

对比一下

rm -rf /home/work/logs/

删掉整个/下面的所有目录

[root@master /]# ll
total 94
dr-xr-xr-x.   2 root root  4096 Sep  3  2019 bin
dr-xr-xr-x.   5 root root  1024 Sep  3  2019 boot
drwxr-xr-x.  20 root root  3760 May 21 07:31 dev
drwxr-xr-x.   4 root root  4096 Sep  9  2019 dfs
drwxr-xr-x.  94 root root  4096 May 21 07:29 etc
drwxr-xr-x.   2 root root  4096 Sep 23  2011 home
dr-xr-xr-x.   9 root root  4096 Sep  3  2019 lib
dr-xr-xr-x.  10 root root 12288 Sep  3  2019 lib64
drwx------.   2 root root 16384 Sep  3  2019 lost+found
drwxr-xr-x.   2 root root  4096 Sep 23  2011 media
drwxr-xr-x.   2 root root  4096 Sep 23  2011 mnt
drwxr-xr-x.   6 root root  4096 Sep  9  2019 opt
dr-xr-xr-x. 208 root root     0 May 21 07:28 proc
dr-xr-x---.   3 root root  4096 Sep  9  2019 root
dr-xr-xr-x.   2 root root 12288 Sep  3  2019 sbin
drwxr-xr-x.   7 root root     0 May 21 07:28 selinux
drwxr-xr-x.   2 root root  4096 Sep 23  2011 srv
drwxr-xr-x   13 root root     0 May 21 07:28 sys
drwxrwxrwt.  10 root root  4096 May 21 07:30 tmp
drwxr-xr-x.  13 root root  4096 Sep  3  2019 usr
drwxr-xr-x.  18 root root  4096 Sep  3  2019 va

1.2 虚拟机测试

本次测试采用虚拟机测试

rm: cannot remove `sys/block/dm-0': Operation not permitted
rm: cannot remove `sys/block/dm-1': Operation not permitted
[root@master /]# cd /
[root@master /]# ll
-bash: /bin/ls: No such file or directory

由于测试之前使用了快照,所以可以恢复.否则这种操作就是无法回退的问题.

二、生产环境如何避免?

2.1 shell中的定时回收站

生产环境把rm -rf 命令 替换为mv,再增加定时shell定期清理.

cd /yuanian/test
mv * /yuanian/trash

 

2.2 权限收拢

线上分配用户权限比如 /work账号,仅可以删除 /home/work/logs/目录,无法删除根目录.

2.3 使用 &&(仅适用于目录不存在)

通过 "&&" 合并命令

!!!! 注意 本命令仍有风险

cd ${log_path}&&rm -rf *

通过此命令如果&&之前的语句执行失败,后半句也无法执行.

2.31 访问目录不存在

[root@master /]# cd /opt/logs&&rm -rf *
-bash: cd: /opt/logs: No such file or directory
[root@master opt]# ll
total 16
drwxr-xr-x. 5 root root 4096 Sep  9  2019 cloudera
drwxr-xr-x. 4 1106 4001 4096 May 13  2016 cloudera-manager
drwxr-xr-x. 7 uucp  143 4096 Dec 16  2018 jdk1.8.0_201
drwxr-xr-x. 2 root root 4096 Sep  9  2019 soft

2.32 使用了空格访问的问题

测试

[root@master logs]# cd / opt/logs&&rm -rf *
rm: cannot remove `boot': Device or resource busy
rm: cannot remove `dev/pts/0': Operation not permitted
rm: cannot remove `dev/pts/ptmx': Operation not permitted
rm: cannot remove `dev/shm': Device or resource busy

复测原因

[root@master opt]# cd / opt/logs
[root@master /]# 

识别了 / 根目录.

2.4 判断目录是否存在

规范命令:

对目录进行操作前,先判断目录是否存在.

[root@master opt]# cd logs/
[root@master logs]# pwd
/opt/logs

三、小结

生产建议采用 mv +定时策略,避免发生文件的删除异常.

3.1 实现方案

[root@master /]# mkdir /work && cd /work&&mkdir trash
[root@master work]# ll
total 4
drwxr-xr-x. 2 root root 4096 May 21 07:43 trash

3.2 定期策略

3.21 创建shell目录

[root@master work]# mkdir shell
[root@master work]# ll
total 8
drwxr-xr-x. 2 root root 4096 May 21 07:45 shell
drwxr-xr-x. 2 root root 4096 May 21 07:43 trash
[root@master work]# cd shell
[root@master work]# vim clear.sh

3.22 编辑定时脚本

进入vim 写入

#!/bin/bash
cd /yuanian/trash && rm -rf *
echo "clear trash"

授权 chmod 755 clear.sh

[root@master shell]# ll
total 4
-rw-r--r--. 1 root root 66 May 21 07:59 clear.sh
[root@master shell]# chmod 755 clear.sh
[root@master shell]# ll
total 4

3.23 验证脚本的正确性(测试如下脚本)

1. 测试目录是否正确
cd /yuanian/trash
2. 测试是否可以正确删除文件
[root@master shell]# mv test /yuanian/trash/
[root@master shell]# sh clear.sh 
clear trash over
[root@master shell]# cd /yuanian/trash/
[root@master trash]# ll
total 0

3.24 加入定时策略

3.241 判断是否有corn程序

[root@master shell]# service crond  status
crond (pid  2077) is running...
[root@master shell]# chkconfig --list crond
crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off

如果没有

yum -y install crontabs

 

3.242 设置添加的脚本

方式1 crontab -e 增加任务 ,wq保存退出

方式2 直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务。

crontab -e配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务 查看调度任务 crontab -l //列出当前的所有调度任务 crontab -l -u jp //列出用户jp的所有调度任务 删除任务调度工作 crontab -r //删除所有任务调度工作

** 修改/etc/crontab这种方法只有root用户能用,这种方法更加方便与直接直接给其他用户设置计划任务,而且还可以指定执行shell等等, crontab -e这种所有用户都可以使用,普通用户也只能为自己设置计划任务。

查看 vim /etc/crontab ,默认的文件形式如下:

[root@master etc]# vim crontab 
​
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
​
# For details see man 4 crontabs
​
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

注意上面要指定用户 名.

* * * * * root /work/shell/clear.sh

 

添加脚本 -->每隔两周23.00执行脚本

[root@master trash]# crontab -e
0 23 */14 * *  /work/shell/clear.sh
[root@master trash]# crontab -l
0 23 */14 * * /work/shell/clear.sh

四、采用safe-rm替换本地rm目录

4.1.下载safe源码包:

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

4.2.解压safe-rm

tar -zxf safe-rm-0.12.tar.gz

3.复制safe-rm到/usr/local/bin目录下

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

4.添加环境变量

vim /etc/profile 

#在最后一行添加

PATH=/usr/local/bin:$PATH

保存后使其生效

source /etc/profile

5.配置路径黑名单(不允许删除的目录)

vim /etc/safe-rm.conf

#添加要删除的路径按行分隔

/
/bin
/etc
/usr
/opt
/sbin
/test

6.测试删除test文件夹

mkdir /test

rm -rf /test

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值