如何規避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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章