Profile picture

[Linux] RHCSA v9 취득을 위한 문제 풀이 정리 #2

JaehyoJJAng2025년 10월 20일

24. 웹 서버 설치 및 설정 (Apache)

문제 1: 서버 A에서 다음 작업을 수행하세요.

  • 기본 웹 서버를 설정하여 접속 시 Welcome to the webserver! 라는 메시지를 표시하도록 구성합니다.
  • 방화벽(firewall) 설정을 수정하여 HTTP(포트 80)와 HTTPS(포트 443) 서비스를 허용합니다.

Apache 설치

dnf install -y httpd

부팅 시 Apache 자동 시작 설정

systemctl enable --now httpd

기본 Document root 디렉토리 찾기

grep -i "docu" /etc/httpd/conf/httpd.conf

# 출력 값
DocumentRoot "/var/www/html" # 기본 document root 경로

환영 메시지 포함한 웹 페이지 생성하기

cd /var/www/html
vim /index.html

환영 메시지 추가

Welcome to the webserver!

저장 및 종료: Esc -> :wq -> Enter


apache 재시작

systemctl restart httpd

방화벽 설정

HTTP 및 HTTPS 서비스를 허용해주겠습니다.

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload
  • --zone=public: 기본 공개 영역(public zone)에 규칙을 적용합니다.
  • --add-service=http: HTTP(포트 80) 트래픽 허용
  • --add-service=https: HTTPS(포트 443) 트래픽 허용
  • --permanent: 재부팅 후에도 설정이 유지되도록 영구 적용

웹 서버 테스트

로컬 테스트

curl http://localhost

외부 테스트

웹 브라우저 열고 다음 주소 입력

http://<ServerA_IP_ADDRESS>

25. 파일 찾기 2 (find)

문제 1: /etc 디렉터리 내에서 3MB보다 큰 모든 파일을 찾아, 새로운 디렉터리 /find/3mfiles로 복사하세요.


찾은 파일들을 모아둘 대상 디렉토리 생성하기

mkdir -p /find/3mfiles

3MB 초과 파일 찾기 및 복사

sudo find /etc -size +3M -exec cp {} /find/3mfiles \;

복사된 파일 확인

ls -lh /find/3mfiles

# 출력 값
-r--r--r--. 1 root root  13M 11116:34 hwdb.bin
-rw-r--r--. 1 root root 3.2M 11116:34 policy.34

26. GRUB 부팅 메시지 설정

문제 1: 서버 A에서 부팅 메시지가 숨겨지지 않고 표시되도록 설정하여, 문제 해결(troubleshooting) 시 부팅 과정을 확인할 수 있도록 하세요.


방법 1: GRUB 설정 파일 직접 수정 (영구 적용)

해당 방법은 /etc/default/grub 파일을 수정하여 모든 부팅에 영구적으로 적용하는 방법입니다.


grub 설정 편집

sudo vim /etc/default/grub

시스템이 어떻게 부팅되어야 하는지 제어하는 부팅 매개변수가 포함된 전역 GRUB 설정 파일을 엽니다.


부팅 매개변수 수정

  • GRUB_CMDLINE_LINUX로 시작하는 줄을 찾아서 rhgb quiet을 제거합니다.
    • rhgb (Red Hat Graphical Boot): 상세한 부팅 메시지를 숨기고 그래픽 부팅 화면을 제공합니다.
    • quiet: 대부분의 부팅 메시지를 숨겨 깔끔한 화면을 만듦
  • 이 두 옵션 제거 시 텍스트 기반 부팅 메시지가 활성화되어 문제 해결에 용이함.

업데이트된 GRUB 설정 생성

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

이 명령은 변경 사항을 부트로더에 적용하기 위해 GRUB 설정을 다시 생성 합니다.


시스템 재부팅

sudo reboot

시스템을 다시 시작하여 업데이트된 GRUB 설정을 적용합니다.


방법 2: 커널 명령줄 직접 업데이트 (현재 커널에만 적용)

이 방법은 grubby 명령어를 사용하여 현재 사용 중인 커널에만 변경 사항을 적용합니다.


커널 명령줄 수정

sudo grubby --update-kernel=/boot/vmlinuz-$(uname -r) --remove-args="rhgb quiet"
  • grubby 명령은 /etc/default/grub 파일을 수정하지 않고도 현재 커널의 부팅 매개변수를 업데이트합니다. 이 변경 사항은 다음 재부팅 시 적용됩니다.
  • --update-kernel=/boot/vmlinuz-$(uname -r): 현재 사용 중인 커널 버전을 지정합니다.
  • --remove-args="rhgb quiet": rhgb와 quiet 인수를 제거하여 상세한 부팅 메시지를 활성화합니다.

시스템 재부팅

sudo reboot

27. bash 스크립트

문제 1: 서버 A에서 다음 작업을 수행하세요.

/script.sh라는 Bash 스크립트를 생성하고, 이 스크립트가 두 개의 인자(argument) 로 실행될 때

첫 번째 인자 뒤에 두 번째 인자를 출력하는 것이 아니라, 두 번째 인자 다음에 첫 번째 인자를 출력하도록 하세요.


예를 들어, 다음과 같이 실행 시

./script.sh test1 test2

출력 결과는 다음과 같아야 합니다.

test2 test1

스크립트 파일 생성

vim /script.sh

다음 스크립트 작성

#!/usr/bin/bash

# 파일에 들어온 매개변수 체크
if [ $# -eq 2 ]; then
  echo "$2 $1"
else
  echo "Usage: $0 argument1 argument2"
  exit 1
fi
  • if [ $# -eq 2 ]; then: 정확히 두 개의 인수가 제공되었는지 확인합니다. $#는 전달된 인수의 개수를 나타내는 특수 변수입니다.
  • echo "$2 $1": 두 개의 인수가 제공되었다면, 이 줄은 두 번째 인수($2) 다음에 첫 번째 인수($1) 를 공백으로 구분하여 출력합니다. (인수 순서를 뒤집어 출력)

스크립트 테스트

chmod u+x ./script.sh
bash ./script.sh argument1 argument2

# 출력 값
argument2 argument1

28. 비밀번호 유효기간 설정

문제 1: 서버 A에서 모든 사용자 비밀번호에 대해 다음 정책을 적용하세요.

  • 비밀번호 유효기간을 90일로 설정하여, 90일이 지나면 비밀번호를 반드시 변경하도록 합니다.
  • 비밀번호 최소 길이를 8자 이상으로 설정합니다.

1. 시스템 전반의 로그인 설정 파일 편집

sudo vim /etc/login.defs

암호 만료를 포함하여 시스템 전반의 로그인 정책이 구성되는 파일인 /etc/login.defs를 엽니다.


PASS_MAX_DAYS 구성

vim 내에서 PASS_MAX_DAYS 줄을 찾거나 없으면 추가합니다.

PASS_MAX_DAYS 90

PASS_MAX_DAYS를 90으로 설정하면 90일 암호 만료 정책이 적용되어, 사용자들은 약 3개월마다 암호를 업데이트해야 합니다.


2. 최소 암호 길이 8자로 설정


암호 품질 구성 파일 열기

sudo vim /etc/security/pwquality.conf

이 파일은 /libpwquality 라이브러리에 의해 관리되며, RHEL 9에서 암호 복잡성과 길이 요구사항을 담당합니다.


minlen 구성

vim 내에서 minlen 줄을 찾거나 없으면 추가합니다.

minlen = 8

이는 모든 새 암호 및 업데이트된 암호에 대해 최소 길이 8자 를 강제하여, 약한 암호의 가능성을 줄여 보안을 강화합니다.


29. 파일 소유권 설정 (sticky bit)

문제 1: 서버 A에서 다음 조건에 맞게 사용자, 그룹, 디렉터리 및 권한을 설정하세요

사용자 및 그룹 구성

  • 그룹
    • admins
    • developers
  • 사용자
    • amr, biko -> admins 그룹 구성원
    • carlos, david -> developers 그룹 구성원

디렉터리 구성

  • /admins
    • 소유자(owner): biko
    • 그룹: admins
    • 접근 권한: 오직 소유자와 admins 그룹 구성원만 접근 가능
  • /developers
    • 소유자(owner): carlos
    • 그룹: developers
    • 접근 권한: 오직 developers 그룹 구성원만 접근 가능

파일 소유권 및 권한 요구사항

  • /admins/developers 디렉터리 내에서 새로 생성되는 파일은 해당 디렉터리의 그룹 소유권을 자동으로 상속받아야 함.
  • 파일 생성자만 자신의 파일을 삭제할 수 있어야 함.


단계 1: 사용자 및 그룹 생성

그룹 생성하기

sudo groupadd admins
sudo groupadd developers

adminsdevelopers 그룹을 생성하여, 특정 권한을 가진 사용자들을 조직화할 겁니다.


사용자 생성 및 그룹 추가

useradd amr && usermod -aG admins amr
useradd biko && usermod -aG admins biko
useradd carlos && usermod -aG developers carlos
useradd david && usermod -aG developers david

각 사용자를 생성하고 적절한 그룹에 추가합니다.


단계 2: 디렉토리 생성 및 구성

디렉토리 생성

mkdir -p /{admins,developers}

그룹별 리소스를 분리하기 위해서 /admins/developers 디렉터리를 생성합니다.


/admins에 대한 소유권 설정하기

디렉토리 소유권 설정

chown biko:admins /admins

디렉토리 접근 권한 설정

chmod 770 /admin

소유자와 그룹에게는 읽기, 쓰기, 실행 권한을 부여하고, 다른 사용자(other)에게는 모든 접근을 차단합니다.


/admins에 대한 sticky bit 설정하기

chmod -t,g+s /admins
  • chmod g+s: Setgid 비트를 활성화하여, 이 디렉토리에 생성되는 파일들이 admins 그룹 소유권을 상속받도록 보장합니다.
  • chmod -t: Sticky 비트를 설정하여, /admins 디렉토리 내에서 파일 생성자(또는 root)만이 파일을 삭제할 수 있도록 제한합니다.

/developers에 대한 소유권 설정하기

디렉토리 소유권 설정

chown carlos:developers /developers

디렉토리 접근 권한 설정

chmod 770 /developers

소유자와 그룹에게는 접근 권한을 제공하고, 다른 사용자들은 제외합니다.


/developers에 대한 sticky bit 설정하기

chmod +t,g+s /developers

단계 3: 테스트 (검증)

ls -ld /admins /developers

# 출력 값
drwxrws--T. 2 biko   admins     6 11117:35 /admins
drwxrws--T. 2 carlos developers 6 11117:30 /developers
  • rwxrws--T: 소유자 및 그룹에 대한 읽기, 쓰기, 실행 권한이 부여되었음을 확인합니다.
  • s: Setgid 비트가 설정되었음을 확인하고, T는 Sticky 비트가 설정되었음을 보여줍니다.

30. cron job 설정

문제 1: 서버 A에서 다음 작업을 수행하세요.

매주 평일(월~금) 정오 12시(12 PM)에 시스템 로그 파일 /var/lob/messagesGet Ready! 라는 메시지를 기록하도록

cron 작업을 설정하세요.


또한 이 작업은 적절한 권한으로 실행되어야 하며,

문제 발생 시 추적이 가능하도록 로그 기록이 남도록 구성해야 합니다.


단계 1: root crontab 접근

sudo crontab -e

root 사용자의 크론탭 파일을 엽니다. 이를 통해 /var/log/messages에 기록하는 데 필수적인 root 권한으로 작업 예약이 가능합니다.


단계 2: 메시지를 기록하는 Cron 작업 추가

작업 예약을 위해 crontab에 다음 줄 추가

* 12 * * 1-5 /usr/bin/logger -t "GetReadyCron" "Get Ready!" 2>&1 | tee -a /tmp/cron_jobs.log
  • 2>&1: 표준 출력(Standard Output)과 표준 오류(Standard Error)를 단일 스트림으로 리다이렉션(redirection)합니다.

단계 3: Cron 작업 확인

  • Esc를 누르고 :wq를 입력한 후 Enter를 누릅니다.
  • 예약된 cron 작업 목록이 정상적인지 확인합니다.
    • sudo crontab -l

    Tag -

Loading script...