Born2BeRoot

이동윤·2025년 1월 6일
0

이 프로젝트는 특정 규칙을 따라 여러분의 첫 번째 서버를 설정하는 것으로 구성됩니다.
서버를 설정하는 것이 주된 목적이므로, 최소한의 서비스만 설치해야 합니다.
이 때문에 그래픽 인터페이스(Graphical Interface)는 필요하지 않습니다.
따라서 X.org나 이와 동등한 그래픽 서버를 설치하는 것은 금지됩니다. 이를 위반할 경우, 점수는 0점 처리됩니다.

운영 체제로는 최신 안정 버전의 Debian(testing/unstable 버전은 제외) 또는 Rocky Linux 중 하나를 선택해야 합니다.
Debian의 경우, AppArmor가 부팅 시 활성화되어 있어야 합니다.

  • 최소한 2개의 암호화된 LVM 파티션을 만들어야 합니다.

  • 가상 머신에서 SSH 서비스는 필수적으로 포트 4242에서 실행되어야 합니다.
    보안상의 이유로 root 계정을 사용하여 SSH로 접속하는 것은 금지되어야 합니다.
  • 운영 체제를 UFW(또는 Rocky의 경우 firewalld) 방화벽으로 구성하여 가상 머신에서 포트 4242만 열어 두어야 합니다.

  • 가상 머신을 실행할 때 방화벽이 활성화되어 있어야 합니다.

  • Rocky의 경우 UFW 대신 firewalld를 사용해야 합니다.

  • 가상 머신의 호스트네임은 로그인 이름 뒤에 42를 붙인 형태여야 합니다(예: wil42). 평가 중에 이 호스트네임을 수정해야 합니다.

  • 강력한 비밀번호 정책을 구현해야 합니다.

  • sudo를 설치하고 엄격한 규칙에 따라 구성해야 합니다.

  • root 사용자 외에 로그인 이름을 사용자명으로 하는 사용자가 존재해야 합니다.

  • 이 사용자는 user42 및 sudo 그룹에 속해야 합니다.


SSH 사용 테스트

  • 방어 과정에서 새로운 사용자 계정을 생성하여 SSH 접속이 제대로 설정되었는지를 확인합니다.
  • SSH의 기본 작동 방식과 보안 설정을 이해하고 있어야 합니다.

방화벽 구성

  • UFW (Uncomplicated Firewall) 또는 firewalld를 사용하여 방화벽을 설정합니다.
  • 가상 머신에서 필수적인 포트인 4242만 열어두고 나머지 포트는 차단합니다.
  • 방화벽이 가상 머신을 부팅할 때 자동으로 활성화되도록 설정해야 합니다.
  • Rocky Linux를 사용하는 경우, firewalld를 사용해야 하며, UFW는 사용하지 않습니다.

호스트네임 설정

  • 가상 머신의 호스트네임은 사용자의 로그인 이름에 42를 덧붙인 형태여야 합니다.
  • 예: 로그인 이름이 dongyole인 경우, 호스트네임은 dongyole42가 됩니다.
  • 평가 중에 이 호스트네임을 변경해야 할 수도 있으므로, 이를 유연하게 수정할 수 있어야 합니다.

강력한 비밀번호 정책

  • 비밀번호는 최소 길이, 복잡성, 만료 정책 등을 포함한 강력한 규칙을 따라야 합니다.
  • 예를 들어, 비밀번호는 최소 10자 이상이어야 하고, 대문자, 소문자, 숫자, 특수 문자를 포함해야 합니다.
    nforce뭐시기 해놔라 동윤아

sudo 설치 및 구성

  • sudo를 설치하고, 특정 규칙에 따라 구성하여 보안성을 높입니다.
  • 예를 들어, sudo 명령어 사용 시 비밀번호 시도를 제한하거나, 로그를 남기도록 설정할 수 있습니다.

사용자 및 그룹 관리

  • root 사용자 외에, 자신의 로그인 이름을 사용자명으로 하는 별도의 사용자를 생성해야 합니다.
  • 이 사용자는 user42 그룹과 sudo 그룹에 속해야 하여, 필요한 권한을 부여받을 수 있습니다.

방어 중 해야 할 작업

  • 새로운 사용자를 생성하고 이를 그룹에 할당해야 합니다.

  • 강력한 비밀번호 정책을 설정해야 하며, 다음 요구 사항을 충족해야 합니다:

  • 비밀번호 만료: 비밀번호는 30일마다 만료됩니다.

  • 비밀번호 변경 최소 일수: 비밀번호를 변경하기 전에 최소 2일을 대기해야 합니다.

  • 비밀번호 만료 알림: 비밀번호 만료 7일 전에는 사용자에게 경고 메시지를 전송해야 합니다.

  • 비밀번호 길이 및 구성:

  • 비밀번호는 최소 10자 이상이어야 합니다.

  • 대문자, 소문자, 숫자가 각각 하나 이상 포함되어야 합니다.

  • 3개 이상의 연속된 동일 문자를 포함해서는 안 됩니다.

  • 사용자 이름 포함 금지: 비밀번호에 사용자 이름을 포함할 수 없습니다.

root 비밀번호 규칙:

  • root 비밀번호는 위의 규칙을 따르되, 이전 비밀번호에서 사용된 문자 외에 최소 7자 이상 다른 문자가 포함되어야 합니다.
  • 이 외에도 root 비밀번호는 반드시 위의 정책을 따라야 합니다.

monitoring.sh 스크립트 요구 사항

스크립트 내용:

  • monitoring.sh는 bash로 개발된 간단한 스크립트여야 합니다.
  • 이 스크립트는 서버가 시작될 때 실행되어 모든 터미널에서 10분마다 다음 정보를 표시해야 합니다.
  • (배너는 선택 사항이며, 오류 메시지는 표시되지 않아야 합니다.)

표시해야 할 정보:
스크립트는 항상 다음 정보를 출력해야 합니다:

  • 운영 체제 아키텍처 및 커널 버전
  • 물리적 프로세서 수
  • 가상 프로세서 수
  • 서버에서 사용 가능한 RAM 및 그 활용률(백분율)
  • 서버에서 사용 가능한 저장소 및 그 활용률(백분율)
  • 프로세서의 현재 활용률(백분율)
  • 마지막 재부팅 날짜 및 시간
  • LVM이 활성화되었는지 여부
  • 활성 연결 수
  • 서버를 사용하는 사용자 수
  • 서버의 IPv4 주소 및 MAC (Media Access Control) 주소
  • sudo 명령어로 실행된 명령어 수

스크립트 실행 방식:

  • 서버가 시작될 때 스크립트가 자동으로 실행되어야 하며, 모든 터미널에서 10분마다 위 정보를 표시해야 합니다.
  • 오류 메시지 없이 정상적으로 작동해야 합니다.

방어 중 요구 사항:

  • 이 스크립트가 어떻게 작동하는지 설명해야 합니다.
  • 스크립트를 수정하지 않고 중단하는 방법을 보여줘야 합니다. 이때 cron을 활용하는 방법을 고려해야 합니다.
    다음은 문장의 해석입니다:

1. 2개 이상의 암호화된 lvm 파티션 구성


2. sudo설정

sudo 그룹의 강력한 설정 요구 사항

  • sudo 인증 시도 제한: 잘못된 비밀번호 입력 시, sudo 인증 시도가 최대 3번으로 제한되어야 합니다.
  • 오류 메시지: 잘못된 비밀번호로 sudo를 사용할 때, 사용자에게 사용자 정의 오류 메시지가 표시되어야 합니다.
  • sudo 로그 기록:
  • sudo를 통해 실행한 각 작업의 입력과 출력이 모두 기록되어야 합니다.
  • 해당 로그 파일은 /var/log/sudo/ 폴더에 저장되어야 합니다.
  • TTY 모드 활성화: 보안 상의 이유로 TTY 모드가 활성화되어야 합니다.
  • sudo 경로 제한: 보안을 위해 sudo 명령어가 사용할 수 있는 경로를 제한해야 합니다.
  • 예시 경로: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

visudo 입력 후 sudo에 관련된 설정을 바꾼다


Defaults	secure_path= "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
Defaults	badpass_message= "wrong password"	// 잘못된 sudo 비밀번호 입력시 표시되는 사용자 정의 오류
Defaults	iolog_dir="/var/log/sudo/" // sudo 명령으로 실행한 입력과 출력 로그 기록을 저장할 디렉토리 지정
Defaults	log_input // sudo 명령으로 실행한 입력
Defaults	log_output // sudo 명령으로 실행한 출력
Defaults	requiretty
Defaults	passwd_tries=3

3. 평가 지침

General insturction

  • signature.txt 파일이 클론된 저장소의 루트에 있는지 확인하세요.

  • "signature.txt"에 포함된 서명이 가상 머신(.vdi 파일)의 서명과 동일한지 확인하세요. 필요 시, .vdi 파일 위치를 학생에게 요청하세요.

  • 초기 가상 머신을 복제사본을 보관하세요.
    평가할 가상 머신을 시작하세요. 예상대로 작동하지 않거나 서명이 다르면 평가를 종료합니다.


Mandatory part

평가받는 학생은 아래 내용을 간단히 설명해야 합니다:

1. 가상 머신은 어떻게 작동하는가?

우선 가상 머신이란 물리적인 컴퓨터(하드웨어)에서 소프트웨어 계층을 통해 동작하는 논리적 컴퓨터입니다.

가상머신은 물리적 하드웨어를 추상화하여 여러 가상 환경에서 각각의 운영 체제를 실행할 수 있도록 설계되었습니다.

하드웨어를 추상화 한다는 것은 실제 H/W를 사용하는 대신, 소프트웨어 계층(하이퍼바이저)가 하드웨어를 대신 관리하고, 가상머신에 "가짜 하드웨어"를 제공하는 것을 의미합니다

비유: 호텔과 가상 방

가상화를 호텔 운영에 비유해 보겠습니다.

[1. 물리적 하드웨어 = 호텔 건물]
호텔은 하나의 물리적 건물(물리적 서버)로 이루어져 있습니다. 건물에는 방(CPU, 메모리, 디스크 등)과 같은 자원이 있습니다.

건물 전체는 하나지만, 각각의 방은 독립적으로 동작할 수 있습니다.

[2. 하이퍼바이저 = 호텔 관리자]
호텔 관리자는 방을 여러 손님(가상 머신)에게 나눠줍니다.

손님들은 각자의 방이 온전히 자기 것이라고 생각하지만, 사실 모든 방은 하나의 건물에 속해 있습니다.

관리자는 손님이 방을 요청하면, 필요한 공간(리소스)을 할당하고 관리를 책임집니다.

[3. 가상 머신 = 호텔 손님]
손님(가상 머신)은 자신만의 방(독립된 환경)을 가지고 있는 것처럼 느낍니다.

실제로는 호텔 관리자(하이퍼바이저)가 방의 크기와 물품(리소스)을 조정하여 다른 손님과 공유하고 있습니다.

예를 들어, 방 안에 있는 TV나 에어컨(하드웨어)은 손님이 직접 소유하지 않고, 호텔이 제공하는 것을 사용합니다.

작동 과정: 하이퍼바이저(가상화를 구현하는 소프트웨어)는 물리적 리소스(CPU, 메모리, 디스크 등)를 가상 머신에 할당하고, 이들은 독립적인 컴퓨터처럼 동작하며, 호스트 OS와 격리됩니다.

2. 선택한 운영체제와 그 이유.

저는 이번 과제에서 Debian이라는 운영체제를 선택했습니다

Rocky Linux(CentOS)Debian은 리눅스 기반 운영 체제지만, 목적과 설계 철학, 사용 용도가 다릅니다.

Rocky Linux(CentOS)는 엔터프라이즈 환경에서 상용 서버 및 서비스 운영을 안정적으로 지원합니다

그리고 Debian은 순수 커뮤니티 기반 운영 체제로, 독립적인 패키지 관리 및 개발에 사용된다. 그리고 범용 리눅스 배포판으로, 서버, 데스크톱, IoT 등 다양한 환경에 적합합니다.

이 중에서 데비안을 선택한 이유는 데비안에는 초보자도 쉽게 사용할 수 있는 단순한 명령어 구조로 구성되어있기 때문입니다.

또한 데비안은 안전성을 최우선으로 설계된 운영체제입니다. 모든 새로운 패키지들이 철저히 테스트 된 후 버전에 포함되어 예상치 못한 충돌을 방지할 수 있습니다.

3.aptitude와 apt의 차이점, APPArmor란 무엇인지.

Debian에서는 패키지 관리를 위해 aptaptitude를 사용할 수 있습니다. 여기서 패키지는 특정 소프트웨어나 프로그램의 실행에 필요한 파일, 코드, 구성 요소 등을 모아둔 압축된 파일 형식입니다. 둘 다 패키지 관리 도구이지만, 세부적인 기능과 사용 목적이 다릅니다.

APT (Advanced Package Tool)

  • APT는 Debian 및 Ubuntu에서 기본적으로 제공되는 패키지 관리 도구입니다. 초보자도 쉽게 사용할 수 있도록 설계되었으며, 일상적인 패키지 관리 작업에 최적화되어 있습니다. CLI UI만 지원합니다. 프로그램 충돌이 발생할경우 충돌 패키지 자동제거는 -auto-remove 등의 추가 옵션이 필요하다.

Aptitude

  • aptitude는 APT보다 고급 기능을 제공하는 패키지 관리 도구입니다. APT와 유사한 기능을 제공하지만, 더 세밀한 의존성 관리와 텍스트 기반의 인터페이스를 통해 복잡한 작업에 적합합니다. CLI + 텍스트 기반 인터페이스를 지원합니다. 사용하지 않는 패키지를 자동적으로 제거해주거나 설치, 제거, 업데이트 과정에서 충돌이 있을 경우엔 다른 대안도 함께 제시해준다.

AppArmor

APPArmor(Application Armor)는 리눅스 커널에서 동작하는 보안 모듈로, 애플리케이션의 동작을 제한하여 시스템 보안을 강화하는 데 사용됩니다. 애플리케이션이 접근할 수 있는 파일, 네트워크, 프로세스, 리소스 등을 프로파일(Profile)로 정의하고, 이 프로파일을 통해 애플리케이션이 허용된 작업만 수행하도록 제어합니다.

APPArmor는 Mandatory Access Control(MAC, 강제 접근 제어) 방식으로 동작하며, 애플리케이션을 격리하고 보호하기 위한 경량화된 접근 제어 솔루션으로 설계되었습니다.

4 가상 머신의 목적.

효율적인 리소스 사용, 환경 격리, 비용 절감, 보안 강화를 목적으로 한다

5. 방어 중 10분마다 정보를 표시하는 스크립트가 작동해야 합니다.


Simple setup

  • 머신이 실행 시 그래픽 환경이 없는지 확인하세요.

    systemctl get-default

  • 연결을 시도하기 전에 비밀번호를 요청하며, 비루트 사용자로 접속해야 합니다. (피평가자가 해야함)

  • 비밀번호가 조건에 충족하는지 확인하세요

    passwd dongyole

  • 피평가자의 도움을 받아 UFW, SSH 서비스를 체크하고 , Debian 또는 Rocky가 운영체제로 설정되었는지 확인하세요.

systemctl status ufw
systemctl status ssh
cat /etc/os-release


사용자 설정

  • 평가받는 학생의 로그인 이름이 사용자로 추가되어야 하며, "sudo" 및 "user42" 그룹에 속해야 합니다.

  • 비밀번호 정책을 설정했는지 확인하세요.

1. 새로운 사용자를 생성하고 비밀번호를 할당하세요. (정책이 적용된 방식과 관련 파일을 어떻게 설정했는지 학생에게 설명받으세요. 보통 수정된 파일은 한두개일 것입니다)

sudo adduser <사용자명>


2. 이제 새 사용자를 만들었으니, "evaluating" 그룹을 만들고 새 사용자에 추가하도록 요청하세요. 그리고 해당 유저가 evaluating 그룹에 속하는지 체크하게 하세요

sudo groupadd <그룹명>
sudo usermod -aG <그룹명> <사용자명>

3. 마지막으로 비밀번호 정책의 장점과 구현상의 장단점을 설명받으세요.

1 장점(Advantages)
- 보안 강화
- 이전 비밀번호 재사용 방지
- 조직 내 규칙 표준화


2 단점(Disadvantages)
- 사용자 불편
- 과도한 설정 시, 역효과
- 관리 및 유지보수 필요 (/etc/pam.d/ 파일이나 /etc/security/pwquality.conf를 수시로 점검해야 하고, 패키지 업데이트 시 충돌이 생길 수 있음.)


4. 사용자 정보 및 그룹 확인

- 새로 만든 user 확인

cat /etc/passwd | grep <사용자명>

- user의 그룹 확인

groups <사용자명>

- user 삭제

sudo userdel -r <사용자명>

- 그룹 삭제

sudo groupdel <그룹명>


호스트 이름 및 파티션

  • 머신 호스트 이름이 login42 형식인지 확인하세요. (dongyole42)

hostname

  • 호스트 이름을 당신의 아이디로 변경한 뒤 재시작하여 변경사항이 유지되는지 확인하세요.

sudo hostnamectl set-hostname <아이디>

  • 그리고 원래 호스트이름으로 머신을 복구하세요

sudo hostnamectl set-hostname dongyole42

  • 평가받는 학생에게 이 가상 머신의 파티션을 확인하는 방법을 물어보십시오.

lsblk

  • 파티션 출력값을 과제에 제공된 예시와 비교하세요.

  • LVM의 작동 원리와 목적을 간단히 설명받으세요.

LVM(Logical Volume Manager)은 리눅스에서 디스크 파티션을 유연하게 관리하기 위한 방법입니다.
물리 디스크(Physical Volume, PV)와 볼륨 그룹(VG), 그리고 논리 볼륨(LV) 개념을 통해 스토리지를 추상화합니다.

작동 원리 요약
Physical Volume(PV)
실제 디스크나 파티션을 PV로 초기화.
Volume Group(VG)
여러 PV를 하나의 큰 풀(pool)처럼 묶어 관리.
Logical Volume(LV)
VG에서 논리 볼륨을 생성해, 이를 파티션처럼 마운트하고 사용.
추가: LVM을 사용하면 디스크 추가/제거 등 확장성이 좋아집니다.
5.3 목적 및 장점
유연한 확장/축소
기존 파티션 구조를 다시 잡을 필요 없이, LV 크기를 늘리거나 줄일 수 있어 운영 중에도 디스크 용량 조정이 용이.
스냅샷(Snapshot)
LV의 시점 복사본을 만들어, 백업/복구를 쉽게 함.
물리 디스크 다중 결합
여러 물리 디스크를 하나의 볼륨 그룹으로 묶어 큰 스토리지 풀을 구성 가능.


SUDO

  • "sudo" 프로그램이 설치되어 있는지 확인하세요.

sudo dpkg -l | grep sudo
or
sudo --version

  • 새 사용자를 "sudo" 그룹에 추가하는 과정을 보여주세요.

sudo adduser <새사용자명>
sudo usermod -aG sudo <새사용자명>

  • sudo에 대해 엄격한 규칙을 부과합니다.
    평가받는 학생은 먼저 sudo의 가치와 작동 방식을 자신이 선택한 예제를 사용하여 설명해야 합니다.

그리고 규칙을 잘 지켰는지 확인하세요 (sudo의 로그 기록을 /var/log/sudo/ 폴더에 저장하도록 설정했는지, 시도 횟수 제한을 설정했는지, 잘못된 비밀번호 시 사용자 메시지를 커스터마이즈했는지 등)

  • sudo 사용 내역이 기록된 파일을 확인하세요.
  1. /var/log/sudo/ 폴더가 존재하는지 확인하고, 적어도 하나의 파일이 있는지 확인하십시오.

    cd /var/log/sudo

  2. 이 폴더 내의 파일 내용을 확인하십시오. 파일에서 sudo로 실행한 명령어의 기록이 있어야 합니다.

  1. 마지막으로, sudo를 사용하여 명령어를 실행해 보십시오. 그 후 /var/log/sudo/ 폴더 내의 파일이 업데이트되었는지 확인하십시오."

UFW/Firewalld

  • UFW 프로그램이 가상 머신에 제대로 설치되었는지 확인하십시오. (sudo ufw status 또는 which ufw 명령어를 사용하여 UFW가 설치되었는지 확인합니다.)

    dpkg -l ufw

  • UFW가 제대로 작동하는지 확인하십시오. ( sudo ufw enable 명령어로 UFW를 활성화하고, sudo ufw status 명령어로 방화벽 상태를 확인할 수 있습니다.)

    sudo ufw status

  • 평가받는 학생은 UFW가 무엇인지, 그리고 그것을 사용하는 가치에 대해 기본적으로 설명해야 합니다.

UFW (Uncomplicated Firewall)는 리눅스 iptables 방화벽을 보다 간단하고 직관적으로 설정할 수 있도록 도와주는 프론트엔드(front-end) 도구입니다. 주로 Debian/Ubuntu 계열 배포판에서 기본 방화벽 구성 툴로 널리 사용됩니다.

  • iptables를 직접 다룰 필요 없이, 명령어 형태로 편리하게 포트를 열고 닫거나(예: ufw allow 80, ufw deny 21) 설정할 수 있습니다.

  • 직관적이고 쉬운 사용법

  • 방화벽이 없으면 서버가 모든 포트에서 들어오는 트래픽에 노출되는데, UFW는 필요한 포트만 열고, 나머지는 모두 막아(deny) 불필요한 공격면을 줄여 보안을 강화한다

  • UFW에서 활성화된 규칙을 나열하십시오. 포트 4242에 대한 규칙이 있어야 합니다. (sudo ufw status 명령어를 통해 활성화된 규칙에서 포트 4242가 포함되어 있는지 확인합니다.)

sudo vim /etc/ssh/sshd_config

  • 포트 8080을 열기 위한 새로운 규칙을 추가하십시오. 이 규칙이 추가되었는지 확인하려면 활성화된 규칙을 나열하십시오. (sudo ufw allow 8080 명령어로 새 규칙을 추가하고, 다시 sudo ufw status 명령어로 확인합니다.)

ufw allow 8080
sudo ufw status

  • 마지막으로, 평가받는 학생의 도움을 받아 이 새 규칙을 삭제하십시오. (sudo ufw delete allow 8080 명령어로 추가한 규칙을 삭제합니다.)

sudo ufw delete allow 8080


SSH

- SSH 서비스가 가상 머신에 제대로 설치되었는지 확인하십시오.

sudo systemctl status ssh

- SSH가 제대로 작동하는지 확인하십시오. 평가받는 학생은 SSH가 무엇인지, 그리고 그것을 사용하는 가치에 대해 기본적으로 설명해야 합니다.

  • SSH(Secure Shell)는 네트워크를 통해 다른 컴퓨터(서버 등)에 안전하게 원격 접속하기 위한 암호화된 프로토콜입니다. 보통 리눅스 서버 관리나 원격 터미널 접속에 사용됩니다. 공개키/비밀키 기반 인증과 원격 터미널 제공이 특징이다

  • SSH의 가치는 크게 보안성, 원격 관리의 편의성, 다양한 기능 확장, 플랫폼 간 호환성이다

- SSH 서비스가 오직 포트 4242만을 사용하는지 확인하십시오. (sudo netstat -tuln | grep 4242 또는 sudo ss -tuln | grep 4242 명령어를 사용하여 SSH 서비스가 포트 4242에서만 수신 대기 중인지 확인합니다.)

sudo grep -E "^Port"/etc/ssh/sshd_config

- 평가받는 학생은 새로 생성한 사용자로 SSH 로그인하는 방법을 도와줘야 합니다. 이를 위해 키 또는 단순 비밀번호를 사용할 수 있습니다.

sudo adduser <새사용자명>
cmd창 오픈
ssh <새사용자명>@192.168.56.1 -p 4242

**- root 사용자로는 SSH에 접속할 수 없음을 반드시 확인하십시오.

ssh root@192.168.56.1 -p 4242


모니터링 스크립트

- 학생은 스크립트의 코드와 함께, 스크립트가 어떻게 작동하는지 간단히 설명해야 합니다.

#!/bin/bash
# 이 스크립트는 시스템 정보를 요약하여 출력합니다

# 시스템 아키텍처와 커널 정보 출력
printf "#Architecture: "
uname -a

# 물리적 CPU 코어 개수 출력
printf "#CPU physical : "
nproc --all

# 논리적 CPU 개수(vCPU) 출력
printf "#vCPU : "
cat /proc/cpuinfo | grep processor | wc -l

# 메모리 사용량 출력 (현재 사용량/총 용량 및 사용률)
printf "#Memory Usage: "
free -m | grep Mem | awk '{printf "%d/%dMB (%.2f%%)\n", $3, $2, $3/$2 * 100}'

# 디스크 사용량 출력 (LVM 파티션 기준으로 사용량/총량 및 사용률 계산)
printf "#Disk Usage: "
df -a -BM | grep /dev/map | awk '{sum+=$3}END{print sum}' | tr -d '\n'
printf "/"
df -a -BM | grep /dev/map | awk '{sum+=$4}END{print sum}' | tr -d '\n'
printf "MB ("
df -a -BM | grep /dev/map | awk '{sum1+=$3 ; sum2+=$4}END{printf "%d", sum1 / sum2 * 100}' | tr -d '\n'
printf "%%)\n"

# CPU 사용률 출력 (idle 시간을 기준으로 사용률 계산)
printf "#CPU load: "
mpstat | grep all | awk '{printf "%.2f%%\n", 100-$13}'

# 마지막 부팅 시간 출력
printf "#Last boot: "
who -b | awk '{printf "%s %s\n", $3, $4}'

# LVM(Logical Volume Manager) 사용 여부 확인
printf "#LVM use: "
if [ "$(lsblk | grep lvm | wc -l)" -gt 0 ]; then 
  printf "yes\n"
else 
  printf "no\n"
fi

# TCP 연결 수 출력 (ESTABLISHED 상태 포함)
printf "#Connections TCP : "
ss | grep -i tcp | wc -l | tr -d '\n'
printf " ESTABLISHED\n"

# 현재 로그인한 사용자 수 출력
printf "#User log: "
who | wc -l

# 네트워크 IP와 MAC 주소 출력
printf "#Network: IP "
hostname -I | tr -d '\n'
printf " ("
ip link show | awk '$1 == "link/ether" {print $2}' | sed '2,$d' | tr -d '\n'
printf ")\n"

- "cron"이 무엇인지 설명해야 합니다. 평가받은 학생은 서버가 시작될 때마다 스크립트가 10분마다 실행되도록 설정한 방법을 설명해야 합니다.

  • cron은 리눅스와 유닉스 기반 운영 체제에서 주기적으로 명령어 또는 스크립트를 실행하도록 예약하는 데 사용되는 스케줄링 도구입니다. 자동화 작업을 관리하는 데 널리 사용되며, 이를 실행하는 데몬은 보통 crond라고 불립니다.

- 스크립트가 정상적으로 작동하는지 확인한 후, 학생은 이 스크립트가 30초마다 실행되도록 설정해야 합니다

          • /bin/bash -c "/path/to/monitoring.sh; sleep 30; /path/to/monitoring.sh"

0개의 댓글