RHCSA v9.3 시험 전 날 아래 블로그에 올려주신 내용을 처음부터 풀어보면서 헷갈렸던 부분과 중요하다고 생각한 내용들을 정리했습니다. 참고로 연습은 VMware에 가상머신을 만들어 Red Hat ISO 파일로 환경을 구성하여 진행했습니다. NFS 문제는 제공된 서버가 로컬 환경에서 정상적으로 동작하지 않아, 별도의 가상머신을 하나 더 만들어 NFS 서버 역할을 하도록 구성해 연습했습니다. 마찬가지로 컨테이너 문제도 별도로 Containerfile을 작성하여 이미지 빌드부터 사용자 systemd 설정까지 직접 구성해보았습니다.
그리고 실제 시험에서는 컨테이너 문제에서 레지스트리 주소를 주고 해당 레지스트리에 있는 이미지를 사용하게끔 풀었어야 했던 것 같습니다. 저는 podman login으로 로그인을 하고 podman pull을 통해 이미지를 가져오는 방식을 사용했습니다.
마지막으로! 실제 시험 데스크탑에는 시험과 관련한 정보를 정리해주신 게 있는데 꼭 한 번 읽고 문제 푸시는 걸 추천합니다. 옆에 보면 한국어로 번역도 가능합니다.
아래 블로그에 정리해주신 내용이 시험을 준비하는데 있어서 많은 도움이 되었습니다. 특히 문제풀이 후기에 써주신 내용을 실제로 시험에서 똑같이 겪었는데 미리 인지하고 간 덕분에 잘 해결할 수 있었습니다. 🙇♀️
RHCSA v9 [2025년 1월] 취득 후기 및 주의사항
2025년 1월 13일, RHCSA v9을 취득했다.준비 기간 5일,사전 지식은 2년 전 리눅스 기초 수업을 1개월 들었던 정도였다. 시험 준비 기간이 왜 이렇게 짧았냐 하면...사실 1년 전 신청을 해 두고 까맣게
mandarindeveloper.tistory.com
네트워크 설정(nmtui)
- root로 변경하고 시작하기(su root)
# 게이트웨이 확인
ip route
# DNS 확인
cat /etc/resolv.conf
# hostname 확인
hostnamectl
시스템 부팅 모드 변경
# 현재 모드 확인
systemctl get-default
# 그래픽 모드(GUI) -> 콘솔 모드(CLI)
systemctl set-default multi-user.target
reboot
# 콘솔 모드(CLI) -> 그래픽 모드(GUI)
systemctl set-default graphical.target
reboot

Yum 리포지토리 설정
- 파일은 /etc/yum.repos.d/[파일명].repo로 설정
- 파일 작성 후, yum clean all로 캐시 초기화
웹 서버 포트 문제
- SELinux를 임시로 permissive 상태로 바꿔서 작업해야 한다.
- 이 문제는 풀 때마다 헷갈려서 다시 써보면서 복기했다.
# SELinux 상태 확인 및 임시 비활성화
getenforce
setenforce 0
# 현재 httpd 관련 포트 확인
semanage port -l | grep http_port_t
# 82번 포트 추가
semanage port -a -t http_port_t -p tcp 82
# 포트가 추가되었는지 확인
semanage port -l | grep http_port_t
# httpd 재시작
systemctl restart httpd
# httpd 자동 시작 설정(잊지말기)
systemctl enable --now httpd
# 방화벽 추가 및 재시작
firewall-cmd --permanent --add-port=82/tcp
firewall-cmd --reload
# SELinux 다시 활성화 및 확인
setenforce 1
getenforce
# 검증하기
curl http://localhost:82
-------------------------------------------------------------------------------------------
# 만약 연결이 안된다면?
vi /etc/httpd/conf/httpd/conf
Listen 82(추가)
systemctl restart httpd
-------------------------------------------------------------------------------------------
# SELinux 보안 정책이 적용
[root@servera ~]# getenforce
Enforcing
# SELinux 보안 정책이 적용되지 않음
[root@servera ~]# getenforce
Permissive
사용자/그룹 권한 설정
- NOPASSWD 뒤에 =가 아닌 :가 와야한다.
# 로그인 할 수 없는 사용자 생성
useradd -s /sbin/nologin [username]
# sysadms 그룹 사용자들이 useradd 명령어를 비밀번호 없이 수행 가능
%sysadms ALL=(ALL) NOPASSWD: /usr/sbin/useradd
# harry는 모든 명령어를 비밀번호 없이 수행 가능
harry ALL=(ALL) NOPASSWD: /usr/bin/passwd
Crontab
- 문제 풀기 전 systemctl 명령어(status, start, enable --now)
- 특정 사용자 cron 편집: crontab -e -u [username]
- 특정 사용자 cron 확인: crontab -l -u [username]
- 설정 확인: cat /var/log/messages

협업 디렉터리 생성
보통 파일을 생성하면 해당 파일의 그룹은 파일을 만든 사용자의 기본 그룹으로 설정된다. 하지만 디렉터리에 setgid(set group ID) 를 설정하면, 해당 디렉터리 아래에서 생성되는 파일과 하위 디렉터리의 그룹이 상위 디렉터리의 그룹으로 설정된다. 또한 setgid를 설정하면 생성되는 모든 파일의 그룹이 동일하게 유지되므로, 여러 사용자가 하나의 그룹으로 파일을 공유하며 함께 작업할 수 있다.
# 디렉터리 권한 확인
ls -ld [디렉터리경로]
NTP(Network Time Protocol) 설정
- 문제 풀기 전 systemctl 명령어(status, start, enable --now)
- 시스템 시간은 ntp.example.com 서버를 기준으로 동기화하도록 설정하는 문제
- NTP 서버 설정 파일 → /etc/chrony.conf (chronyd.conf 아님)
# NTP 서버 목록 확인
chronyc sources
# NTP 활성화
timedatectl set-ntp true
# 현재 시간 확인
timedatectl
Autofs
- 문제 풀기 전 systemctl 명령어(status, start, enable --now)
- 마스터맵 → 간접맵 → autofs 서비스 재시작 → 테스트
사용자 파일 찾기
- 저장할 디렉터리 먼저 생성하기
# natasha 사용자가 소유한 파일과 디렉토리를 찾은 후 복사
find / -user natasha -exec cp -a {} /root/natashafiles/ \;
# 파일의 크기가 30k 이상 50k 이하인 파일을 찾아 해당 폴더로 옮기고 uid 그대로 복사
find / -size +30k -size -50k -exec cp -a {} /root/natashafiles/ \;
문자열 찾기
- > (리다이렉션) : 기존 내용을 덮어쓰고 출력 결과를 파일에 저장한다. (한 개만 사용)
파일 아카이빙
/etc 안에 있는 파일들 → 하나의 .tar 파일로 만들기 → 묶은 파일을 gzip 방식으로 압축 → 결과 파일을 /root 디렉터리에 저장
# tar로 묶고 gzip으로 압축
tar -czvf [압축파일이름] [묶을파일들]
# tar로 묶고 bzip2로 압축
tar -cjvf [압축파일이름] [묶을파일들]
# tar로 묶고 xz로 압축
tar -cJvf [압축파일이름] [묶을파일들]
# 검증(꼭 하기)
tar -tvf [파일명]
ACL(Access Control List)
- ACL(Access Control List)는 파일이나 디렉터리에 대해 특정 사용자 또는 그룹별로 개별 접근 권한을 설정할 수 있는 기능
- 이 문제에서 others는 읽기가 가능하지만 harry는 읽기도 가능하지 않기에 ACL로 차단
- 실행 권한은 그 누구도 가질 수 없고, other는 읽기만 가능하다. root는 별도 언급이 없으므로 파일의 기본 권한 rw(6), group은 별도 언급이 없으므로 other와 동일하게 읽기만 부여한다. → chmod 644
# ACL 설정
setfacl -m u:[사용자]:[권한] 파일
# ACL 확인
getfacl 파일
사용자 생성
- -u로 uid 지정
비밀번호 최대 사용기간 설정
- 비밀번호 최대 사용기간은 /etc/login.defs 파일에서 설정할 수 있으며, 이 설정은 이후 생성되는 사용자에게 기본값으로 적용된다.
- 이미 존재하는 사용자에 대해서는 chage 명령어를 사용하여 개별적으로 설정해야 한다.
# 기존에 생성되어있던 alice의 비밀번호 사용기간을 10일로 변경
chage -M 10 alice
chage -l alice
특정 사용자 로그인 메시지 출력
- 특정 사용자로그인 시 메시지를 출력하는 스크립트 파일을 생성하는 문제
- 실행 파일 경로: /usr/local/bin
- 이 문제도 계속 헷갈려서 전체 내용을 복기하면서 써 봄
# 사용자 생성 및 비밀번호 설정
useradd ablerate
passwd ablerate
# 실행 파일 생성
vi /usr/local/bin/rhcsa
----------------------------------
#!/bin/bash
echo "Welcome to user ablerate"
----------------------------------
# 실행 권한 부여
chmod +x /usr/local/bin/rhcsa
# ablerate 사용자 .bash_profile 파일 편집
vi /home/ablerate/.bash_profile
----------------------------------
# 추가
/usr/local/bin/rhcsa
----------------------------------
umask
- umask 설정: /home/[username]/.bash_profile
- 기본적으로 리눅스에서 파일은 666, 디렉터리는 777을 기본값으로 하며, 여기에 umask 값이 차감되어 최종 권한이 결정
컨테이너 이미지 빌드(podman)
- 문제 풀기 전 systemctl 명령어(status, start, enable --now)
- 작업 디렉터리를 따로 생성하고 문제 풀기
- ssh 접속할 때 ssh [username]@[hostname] 형태로 접근하기!!!!!
# podman 서비스 활성화
systemctl status podman
systemctl enable --now podman
# ssh 접속
ssh [username]@[hostname]
# 작업 디렉터리 생성
mkdir mycontainerfile
cd mycontainerfile
# Containerfile 다운로드
wget http://classroom/Containerfile
# 이미지 빌드
podman build -t pdf
podman images
컨테이너 자동 시작 설정(systemd)
- 이 문제는 root가 아닌 일반 사용자(rootless)로 컨테이너를 생성하고, 해당 컨테이너를 사용자 systemd에 등록하여 시스템 재부팅 시 자동으로 실행되도록 설정하는 문제이다.
- 사용자 systemd 설정 디렉터리 → ~/.config/systmed/user
- 디렉터리 생성 및 소유권 변경 → 사용자 로그인 → 컨테이너 실행 → 사용자 systemd 디렉터리 생성 → 컨테이너를 systemd 서비스 파일로 변환 → linger 활성화 → 서비스 활성화 및 즉시 시작
# 디렉터리 생성 및 소유권 변경
mkdir -p /opt/file
mkdir -p /opt/processed
chown paradise:paradise /opt/file
chown paradise:paradise /opt/processed
# paradise로 로그인
ssh paradise@[hostname]
# 컨테이너 실행
podman run -d --name ascii2pdf -v /opt/file:/incoming:Z -v /opt/processed:/outgoing:Z localhost/pdf
podman ps
# 사용자 systemd 디렉터리 생성
mkdir -p ~/.config/systemd/user
cd ~/.config/systemd/user
# 컨테이너를 systemd 서비스 파일로 변환
podman generate systemd --name ascii2pdf --files
systemctl --user daemon-reload
# linger 활성화(사용자가 로그아웃해도 서비스가 계속 실행되도록)
loginctl enable-linger paradise
# 서비스 활성화 및 즉시 시작
systemctl --user enable --now container-ascii2pdf.service
systemctl --user status container-ascii2pdf.service
루트 비밀번호 재설정
nmtui로 연습함
Yum 리포지토리 설정
위와 동일
LVM
wgroup이라는 VG에서 wshare라는 LV를 만들어라.
- PE(Physical Extent) Size = 8MB → VG 만들 때 지정
- LVM size = 50 extents → LV 만들 때 지정
- 만약 디스크를 잘못 만들었을 경우 두 가지 옵션을 사용할 수 있다.
- q: 저장 안 하고 종료
- d: 파티션 삭제
- VG와 LV 생성 명령어는 구조의 차이점을 잘 확인해야하며 LV 생성 시에는 이름을 지정하기 위해 -n 옵션을 사용한다.
vgcreate -s 50M wgroup /dev/sda1
lvcreate -l 50 -n wshare /dev/wgroup
Swap Partition
swap 관련 명령어 잘 기억하자.
# swap 영역 초기화
mkswap /dev/sda2
# swap 활성화
swapon /dev/sda2
Logical Volume 크기 조정(reduce, extend)
- LV를 확장해야 하는지, 축소해야 하는지는 현재 상황에 맞춰 판단해야 한다. (lvs로 확인하기)
- 용량 설정 시 명령어에서는 MB가 아닌 M 단위를 사용한다.
- 축소(reduce) 시에는 umount가 필요하지만, 확장 시에는 umount가 필요없다.
- resize2fs 명령어는 장치 경로를 크기보다 먼저 작성해야 한다.
## reduce
e2fsck -f /dev/wgroup/wshare
resize2fs /dev/wgroup/wshare 280M
lvreduce /dev/wgroup/wshare -L 280M
## extend
lvextend -r /dev/wgroup/wshare -L 400M
tuned(리눅스 성능 최적화 도구)
- 문제 풀기 전 systemctl 명령어(status, start, enable --now)
'자격증' 카테고리의 다른 글
| CKA(Certified Kubernetes Administrator) 자격증 합격 후기 (0) | 2025.12.30 |
|---|