동료가 사이버보안 1과제를 풀다가 스크립트 파트에서 막혔다. 스크립트 파트의 수준이 대충 어떤지 내가 직접 풀어보았다.
-> httpd나 sshd 30초마다 프로세스 상태 체크하기. ( 비정상 종료 되었다면 재부팅한다. )
난 사이버보안이 아니기에 vmware를 사용하지 않고, amazon EC2 환경에서 구현하였다.
"Hello Cyber" 라는 페이지가 출력되는 Server를 설치해주도록 할 것이다.
#!/bin/bash
yum update -y
yum install httpd -y
echo "Hello Cyber" > /var/www/html/index.html
systemctl restart httpd
인스턴스를 접속하면 다음과 같은 페이지가 출력된다.
#!/bin/bash
systemctl stop httpd
ps -e | grep httpd 명령어를 확인해본다.
기존에 서비스 중지하기 전에는 출력이 다음과 같았다.
#!/bin/bash
systemctl stop sshd
ps -e | grep sshd 명령어를 확인해본다.
기존에 서비스 중지하기 전에는 출력이 다음과 같았다.
#!/bin/bash
while true; do
sleep 30
done
httpd 설정하기
-> 정상적인 상태인 경우 아래 명령어를 입력하였을때 running라는 결과가 출력된다.
#!/bin/bash
systemctl status httpd | grep running | cut -c 20-26
sshd 설정하기
-> 정상적인 상태인 경우 아래 명령어를 입력하였을때 running라는 결과가 출력된다.
#!/bin/bash
systemctl status httpd | grep running | cut -c 20-26
스크립트로 변수를 설정하면 다음과 같다.
demo_httpd -> httpd 서비스 상태
demo_sshd -> sshd 서비스 상태
이제 IF문을 설정하여서 running일 경우 정상 메시지를 출력하고, running가 아닐경우 서비스 장애 메시지를 출력할 것이다.
-> running가 아닐경우 재부팅도 진행해줄 것이다.
코드는 다음과 같다.
#!/bin/bash
while true; do
echo ""
echo "httpd 프로세스 진단"
demo_httpd=$(systemctl status httpd | grep running | cut -c 20-26)
if [[ ${demo_httpd} == "running" ]]; then
echo "서비스 정상"
else
echo "서비스 장애"
systemctl restart httpd
echo "서비스를 재시작 합니다."
fi
echo ""
echo "sshd 프로세스 진단"
demo_sshd=$(systemctl status sshd | grep running | cut -c 20-26)
if [[ ${demo_sshd} == "running" ]]; then
echo "서비스 정상"
else
echo "서비스 장애"
systemctl restart sshd
echo "서비스를 재시작 합니다."
fi
echo ""
sleep 30
done
우선 check_process.sh 파일을 만들어주고, 실행권한을 부여한다.
#!/bin/bash
cat << EOF > check_process.sh
#!/bin/bash
while true; do
echo ""
echo "httpd 프로세스 진단"
demo_httpd=$(systemctl status httpd | grep running | cut -c 20-26)
if [[ ${demo_httpd} == "running" ]]; then
echo "서비스 정상"
else
echo "서비스 장애"
systemctl restart httpd
echo "서비스를 재시작 합니다."
fi
echo ""
echo "sshd 프로세스 진단"
demo_sshd=$(systemctl status sshd | grep running | cut -c 20-26)
if [[ ${demo_sshd} == "running" ]]; then
echo "서비스 정상"
else
echo "서비스 장애"
systemctl restart sshd
echo "서비스를 재시작 합니다."
fi
echo ""
sleep 30
done
EOF
chmod +x ./check_process.sh
httpd 및 sshd 서비스를 중지한다.
#!/bin/bash
systemctl stop sshd
systemctl stop httpd
동작을 확인해본다.
#!/bin/bash
./check_process.sh
재밌었다. 😀
쉬웠다.😀