rm-rf로 인한 서버 삭제 문제를 어떻게 회피합니까

6921 단어 안전 운행

1. rm-rf가 안전하지 않은 것은 단지 조심하지 않았기 때문입니까?


1.1 rm-rf 위험

rm -rf / home/work/logs/

언뜻 보기에는 홈 아래work에서 로그를 삭제하는 것 같지만, 이 명령에 문제가 있습니까?
대조해 보다
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 VM 테스트


이번 테스트는 VM 테스트를 사용합니다.
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. 생산 환경은 어떻게 피합니까?


2.1 셸의 정시 휴지통


생산 환경은 rm-rf 명령을 mv로 바꾸고 정시 셸을 정기적으로 정리합니다.
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 셸 디렉터리 만들기

[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 755clear 권한을 부여합니다.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 추가 스크립트 설정


방식 1crontab-e 추가 작업, wq 저장 종료
방식 2/etc/crontab 파일, 즉vi/etc/crontab를 직접 편집하여 해당하는 작업을 추가합니다.
crontab-e 설정은 특정한 사용자를 위한 것입니다. 편집/etc/crontab는 시스템의 작업에 대한 스케줄링 작업 보기crontab-l//현재의 모든 스케줄링 작업crontab-l-u jp//사용자 jp의 모든 스케줄링 작업 삭제crontab-r//모든 작업 스케줄링 작업 삭제
** 수정/etc/crontab 이런 방법은 루트 사용자만 사용할 수 있습니다. 이런 방법은 다른 사용자에게 직접 계획 작업을 설정하는 데 더욱 편리하고 셸 등을 실행할 수 있습니다. 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

 
스크립트 추가 --> 2주마다 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

4. 로컬 rm 디렉터리를 safe-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

좋은 웹페이지 즐겨찾기