사이버보안 프로세스 스크립트

영진·2023년 2월 7일
0

언어

목록 보기
2/2

동료가 사이버보안 1과제를 풀다가 스크립트 파트에서 막혔다. 스크립트 파트의 수준이 대충 어떤지 내가 직접 풀어보았다.


목표

목표는 아래와 같다.

-> httpd나 sshd 30초마다 프로세스 상태 체크하기. ( 비정상 종료 되었다면 재부팅한다. )


실습

난 사이버보안이 아니기에 vmware를 사용하지 않고, amazon EC2 환경에서 구현하였다.

httpd 설치

"Hello Cyber" 라는 페이지가 출력되는 Server를 설치해주도록 할 것이다.

#!/bin/bash
yum update -y
yum install httpd -y
echo "Hello Cyber" > /var/www/html/index.html
systemctl restart httpd

인스턴스를 접속하면 다음과 같은 페이지가 출력된다.


httpd 서비스 중지

#!/bin/bash
systemctl stop httpd

ps -e | grep httpd 명령어를 확인해본다.

기존에 서비스 중지하기 전에는 출력이 다음과 같았다.


sshd 서비스 중지

#!/bin/bash
systemctl stop sshd

ps -e | grep sshd 명령어를 확인해본다.

기존에 서비스 중지하기 전에는 출력이 다음과 같았다.


스크립트 작성

while문 30초마다 반복하기

#!/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문 설정

이제 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

처음 화면

30초 후 화면


결론

재밌었다. 😀
쉬웠다.😀

profile
I'm good at cloud computing.

0개의 댓글