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/3mfiles3MB 초과 파일 찾기 및 복사
sudo find /etc -size +3M -exec cp {} /find/3mfiles \;복사된 파일 확인
ls -lh /find/3mfiles
# 출력 값
-r--r--r--. 1 root root 13M 11월 1일 16:34 hwdb.bin
-rw-r--r--. 1 root root 3.2M 11월 1일 16:34 policy.3426. 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 reboot27. 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
fiif [ $# -eq 2 ]; then: 정확히 두 개의 인수가 제공되었는지 확인합니다.$#는 전달된 인수의 개수를 나타내는 특수 변수입니다.echo "$2 $1": 두 개의 인수가 제공되었다면, 이 줄은 두 번째 인수($2) 다음에 첫 번째 인수($1) 를 공백으로 구분하여 출력합니다. (인수 순서를 뒤집어 출력)
스크립트 테스트
chmod u+x ./script.sh
bash ./script.sh argument1 argument2
# 출력 값
argument2 argument128. 비밀번호 유효기간 설정
문제 1: 서버 A에서 모든 사용자 비밀번호에 대해 다음 정책을 적용하세요.
- 비밀번호 유효기간을 90일로 설정하여, 90일이 지나면 비밀번호를 반드시 변경하도록 합니다.
- 비밀번호 최소 길이를 8자 이상으로 설정합니다.
1. 시스템 전반의 로그인 설정 파일 편집
sudo vim /etc/login.defs암호 만료를 포함하여 시스템 전반의 로그인 정책이 구성되는 파일인 /etc/login.defs를 엽니다.
PASS_MAX_DAYS 구성
vim 내에서 PASS_MAX_DAYS 줄을 찾거나 없으면 추가합니다.
PASS_MAX_DAYS 90PASS_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에서 다음 조건에 맞게 사용자, 그룹, 디렉터리 및 권한을 설정하세요
사용자 및 그룹 구성
- 그룹
adminsdevelopers
- 사용자
amr,biko->admins그룹 구성원carlos,david->developers그룹 구성원
디렉터리 구성
/admins- 소유자(owner):
biko - 그룹:
admins - 접근 권한: 오직 소유자와
admins그룹 구성원만 접근 가능
- 소유자(owner):
/developers- 소유자(owner):
carlos - 그룹:
developers - 접근 권한: 오직
developers그룹 구성원만 접근 가능
- 소유자(owner):
파일 소유권 및 권한 요구사항
/admins와/developers디렉터리 내에서 새로 생성되는 파일은 해당 디렉터리의 그룹 소유권을 자동으로 상속받아야 함.- 파일 생성자만 자신의 파일을 삭제할 수 있어야 함.
단계 1: 사용자 및 그룹 생성
그룹 생성하기
sudo groupadd admins
sudo groupadd developersadmins와 developers 그룹을 생성하여, 특정 권한을 가진 사용자들을 조직화할 겁니다.
사용자 생성 및 그룹 추가
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 /adminschmod 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 11월 1일 17:35 /admins
drwxrws--T. 2 carlos developers 6 11월 1일 17:30 /developersrwxrws--T: 소유자 및 그룹에 대한 읽기, 쓰기, 실행 권한이 부여되었음을 확인합니다.s:Setgid비트가 설정되었음을 확인하고,T는 Sticky 비트가 설정되었음을 보여줍니다.
30. cron job 설정
문제 1: 서버 A에서 다음 작업을 수행하세요.
매주 평일(월~금) 정오 12시(12 PM)에 시스템 로그 파일 /var/lob/messages에 Get Ready! 라는 메시지를 기록하도록
cron 작업을 설정하세요.
또한 이 작업은 적절한 권한으로 실행되어야 하며,
문제 발생 시 추적이 가능하도록 로그 기록이 남도록 구성해야 합니다.
단계 1: root crontab 접근
sudo crontab -eroot 사용자의 크론탭 파일을 엽니다. 이를 통해 /var/log/messages에 기록하는 데 필수적인 root 권한으로 작업 예약이 가능합니다.
단계 2: 메시지를 기록하는 Cron 작업 추가
작업 예약을 위해 crontab에 다음 줄 추가
* 12 * * 1-5 /usr/bin/logger -t "GetReadyCron" "Get Ready!" 2>&1 | tee -a /tmp/cron_jobs.log2>&1: 표준 출력(Standard Output)과 표준 오류(Standard Error)를 단일 스트림으로 리다이렉션(redirection)합니다.
단계 3: Cron 작업 확인
Esc를 누르고:wq를 입력한 후Enter를 누릅니다.- 예약된 cron 작업 목록이 정상적인지 확인합니다.
sudo crontab -l
