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
rm -rf / 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
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 셸의 정시 휴지통
생산 환경은 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
[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
[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
#!/bin/bash
cd /yuanian/trash && rm -rf *
echo "clear trash"
[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
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
[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
[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
[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.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