Red Hat Certified System Administrator (RHCSA) #16 풀스케일 모의고사: 16개 작업 + 해설
#1 시험 소개에서 #15 시험 팁까지 RHCSA의 전 영역을 모두 다뤘습니다. 이번 글은 실제 EX200 형식에 맞춘 풀스케일 모의고사입니다. 전 영역을 통합한 16개 작업으로 구성했고, 각 작업별로 배점이 정해져 있습니다.
권장 제한 시간은 실제 시험과 같은 2.5시간입니다. 합격선은 **210/300(70%)**이며, 16개 작업의 배점을 합산해 채점합니다. 한 작업에 막히면 표시해 두고 넘어간 뒤 배점 높고 손에 익은 작업부터 점수를 쌓는 운영이 합격선을 넘기는 길입니다.
RHCSA에서 가장 흔한 실점 원인은 설정이 재부팅 후 사라지는 것입니다. 마운트는 fstab에, 서비스는 enable로, 네트워크는 NetworkManager 영구 설정으로 남겨야 합니다. 이 모의고사를 풀 때도 모든 작업을 끝낸 뒤 한 번 reboot하고, 재부팅 후에도 작업이 그대로 유지되는지를 직접 검증하십시오. 각 작업은 먼저 스스로 끝까지 푼 뒤 정답을 펼쳐 보십시오. 정답을 먼저 읽으면 손이 익지 않습니다.
풀이 방법 #
- RHEL 9 또는 호환 배포판(AlmaLinux,Rocky Linux)을 VM으로 띄워 두고 그 위에서 직접 푸는 것이 가장 실전에 가깝습니다. 스토리지 작업을 위해 데이터용 빈 디스크 한두 개(예:
/dev/vdb)를 VM에 추가해 두십시오. NFS 마운트 작업은 같은 네트워크에 NFS 서버 한 대를 더 띄우거나, 작업 안에서 제시한 대안 경로를 따르면 됩니다. - 작업마다 요구하는 영구 적용을 빠뜨리지 마십시오. 마운트는 fstab에, 서비스는
systemctl enable로, 네트워크는 nmcli 연결 프로파일로 남겨야 채점 기준을 만족합니다. 실행만 하고 영구화를 빼면 재부팅 검증에서 0점이 됩니다. - 16개를 끝까지 푼 뒤 정답을 펼쳐 한 번에 채점합니다. 중간에 정답을 보면 실제 시험 감각이 흐려집니다. man page만 참고하며 푸는 연습을 함께 하면 시험장 환경에 가까워집니다.
- 모든 작업을 마치면 반드시 한 번
reboot한 뒤, 재부팅된 시스템에서 각 작업의 결과가 유지되는지 확인합니다. 마운트가 자동으로 붙는지, 서비스가 자동 시작되는지, 네트워크 설정이 살아 있는지가 RHCSA 합격을 가르는 마지막 관문입니다.
영역 분포 #
실제 EX200의 영역 비중에 맞춰 16개 작업을 배치했습니다. 스토리지,파일 시스템이 작업 수가 가장 많아 합격을 가르는 핵심 영역입니다.
| # | 영역 | 작업 수 | 작업 번호 |
|---|---|---|---|
| 1 | 필수 도구와 셸 스크립트 | 2 | 1, 2 |
| 2 | 부팅과 시스템 운영 | 3 | 3, 4, 5 |
| 3 | 스토리지와 파일 시스템 | 4 | 6, 7, 8, 9 |
| 4 | 패키지와 네트워킹 | 2 | 10, 11 |
| 5 | 사용자와 보안 | 3 | 12, 13, 14 |
| 6 | 컨테이너 | 2 | 15, 16 |
배점은 영역 비중과 작업 난이도를 반영해 합계 300점으로 두었습니다. 채점 기준은 글 끝에 정리했습니다.
작업 1 (15점): 필수 도구와 셸 스크립트 #
/etc 아래에서 이름이 .conf로 끝나는 파일을 모두 찾아, 그 목록을 /root/conf-list.txt에 한 줄에 하나씩 저장하세요. 그다음 이 목록에서 network라는 문자열을 포함하는 줄만 골라 /root/conf-network.txt에 저장하세요.
정답
find로 파일을 찾아 목록을 저장합니다.
find /etc -type f -name '*.conf' > /root/conf-list.txt저장된 목록에서 문자열을 포함하는 줄만 추립니다.
grep network /root/conf-list.txt > /root/conf-network.txt해설: find의 -name '*.conf'는 셸이 와일드카드를 먼저 펼치지 않도록 반드시 따옴표로 감싸야 합니다. 표준 출력을 >로 redirection하면 결과가 화면 대신 파일에 저장되며, grep network로 한 번 더 걸러 두 번째 파일을 만듭니다. 권한 거부 메시지가 섞이지 않도록 root로 작업하는 것이 깔끔합니다.
작업 2 (15점): 필수 도구와 셸 스크립트 #
/root/bin/diskcheck.sh 스크립트를 작성하세요. 인자로 디렉터리 경로를 하나 받아, 그 디렉터리가 존재하면 디렉터리의 총 사용량을 사람이 읽기 좋은 단위로 출력하고 종료 코드 0으로 끝나야 합니다. 인자가 없거나 디렉터리가 존재하지 않으면 표준 오류에 사용법을 출력하고 종료 코드 1로 끝나야 합니다. 작성 후 실행 권한을 부여하세요.
정답
스크립트를 작성합니다.
#!/usr/bin/bash
if [ -z "$1" ] || [ ! -d "$1" ]; then
echo "Usage: $0 <directory>" >&2
exit 1
fi
du -sh "$1"
exit 0실행 권한을 부여하고 동작을 확인합니다.
mkdir -p /root/bin
chmod +x /root/bin/diskcheck.sh
/root/bin/diskcheck.sh /etc
/root/bin/diskcheck.sh ; echo $?해설: [ -z "$1" ]는 인자가 비었는지, [ ! -d "$1" ]는 디렉터리가 아닌지를 검사하며, 두 조건을 ||로 묶어 어느 하나라도 참이면 오류로 처리합니다. 변수는 공백이 든 경로를 대비해 항상 큰따옴표로 감싸고, 사용법은 >&2로 표준 오류에 보냅니다. du -sh의 -s는 합계, -h는 사람이 읽기 좋은 단위를 뜻하며, 종료 코드는 채점 항목이므로 exit로 명시합니다.
작업 3 (15점): 부팅과 시스템 운영 #
root 비밀번호를 잊어버린 상황을 가정합니다. 시스템을 재부팅해 rescue 모드로 진입하고 root 비밀번호를 Redhat123으로 재설정한 뒤, SELinux 레이블이 깨지지 않도록 조치하고 정상 부팅으로 복귀하세요.
정답
부팅 시 GRUB2 메뉴에서 커널 줄(linux로 시작하는 줄)을 e로 편집해 끝에 rd.break를 추가하고 Ctrl+x로 부팅합니다. switch_root 셸에 들어오면 다음을 수행합니다.
mount -o remount,rw /sysroot
chroot /sysroot
passwd root
# 새 비밀번호로 Redhat123 입력
touch /.autorelabel
exit
exit해설: rd.break는 initramfs 단계에서 멈추므로 실제 루트는 /sysroot에 읽기 전용으로 마운트되어 있습니다. 따라서 remount,rw로 쓰기 가능하게 바꾸고 chroot로 들어가야 passwd가 실제 시스템에 반영됩니다. /.autorelabel을 만들지 않으면 SELinux 컨텍스트가 어긋나 /etc/shadow 갱신이 무시되고 다음 부팅에서 로그인이 막히는 것이 가장 흔한 함정입니다. autorelabel 후 첫 부팅은 레이블 재지정 때문에 한 번 더 재부팅됩니다.
작업 4 (15점): 부팅과 시스템 운영 #
시스템의 기본 부팅 target을 그래픽 모드가 아닌 멀티유저(텍스트) 모드로 바꾸세요. 변경 후 현재 기본 target이 무엇인지 확인하고, 이 설정이 재부팅 후에도 유지되어야 합니다.
정답
기본 target을 설정하고 확인합니다.
systemctl set-default multi-user.target
systemctl get-default해설: set-default는 /etc/systemd/system/default.target 심볼릭 링크를 새 target으로 다시 걸므로 그 자체로 영구 설정이며 재부팅 후에도 유지됩니다. 지금 세션을 바로 그 모드로 전환하려면 systemctl isolate multi-user.target을 추가로 쓰지만, 기본값 변경 요구만이라면 set-default로 충분합니다. isolate만 쓰고 set-default를 빠뜨리면 재부팅 시 원래 모드로 돌아가는 것이 함정입니다.
작업 5 (15점): 부팅과 시스템 운영 #
매일 새벽 3시 30분에 /usr/local/bin/backup.sh를 실행하는 작업을 systemd timer로 구성하세요. 스크립트는 이미 존재하며 실행 권한이 있다고 가정합니다. service와 timer 유닛을 만들고 timer를 활성화한 뒤, 다음 실행 예정 시각을 확인하세요.
정답
service 유닛과 timer 유닛을 만듭니다.
cat > /etc/systemd/system/backup.service <<'EOF'
[Unit]
Description=Daily backup job
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
EOFcat > /etc/systemd/system/backup.timer <<'EOF'
[Unit]
Description=Run backup daily at 03:30
[Timer]
OnCalendar=*-*-* 03:30:00
Persistent=true
[Install]
WantedBy=timers.target
EOFtimer를 활성화하고 예정 시각을 확인합니다.
systemctl daemon-reload
systemctl enable --now backup.timer
systemctl list-timers backup.timer해설: timer는 같은 이름의 service(backup.timer ↔ backup.service)를 자동으로 트리거하므로 service는 Type=oneshot으로 작업만 정의하면 됩니다. timer 쪽에만 [Install]과 WantedBy=timers.target을 두고 enable --now로 켜야 부팅 시 자동 시작되며, service를 enable하는 것이 아니라는 점이 함정입니다. Persistent=true는 예정 시각에 시스템이 꺼져 있었으면 부팅 후 한 번 실행을 보충합니다. cron으로 푼다면 crontab -e에 30 3 * * * /usr/local/bin/backup.sh를 넣어도 됩니다.
작업 6 (20점): 스토리지와 파일 시스템 #
빈 디스크 /dev/vdb에 볼륨 그룹 vgdata를 만들고, 그 안에 크기 500MiB의 논리 볼륨 lvweb을 생성하세요. 이 논리 볼륨을 XFS로 포맷해 /web 디렉터리에 마운트하고, 재부팅 후에도 자동으로 마운트되도록 fstab에 등록하세요.
정답
물리 볼륨,볼륨 그룹,논리 볼륨을 차례로 만듭니다.
pvcreate /dev/vdb
vgcreate vgdata /dev/vdb
lvcreate -L 500M -n lvweb vgdataXFS로 포맷하고 마운트 지점을 만듭니다.
mkfs.xfs /dev/vgdata/lvweb
mkdir /webUUID로 fstab에 등록한 뒤 검증 마운트합니다.
blkid /dev/vgdata/lvweb
echo 'UUID=<위에서 확인한 UUID> /web xfs defaults 0 0' >> /etc/fstab
mount -a
df -h /web해설: LVM 생성 순서는 pvcreate → vgcreate → lvcreate이며, 논리 볼륨 장치 경로는 /dev/<vg>/<lv> 또는 /dev/mapper/<vg>-<lv> 형태입니다. fstab에는 장치명 대신 UUID를 쓰는 것이 안전하며, mount -a로 fstab 문법 오류를 미리 잡아야 합니다. fstab에 오타가 있으면 다음 부팅이 emergency 모드로 빠지므로, 등록 직후 mount -a가 오류 없이 끝나는지 반드시 확인하는 것이 핵심입니다.
작업 7 (20점): 스토리지와 파일 시스템 #
작업 6에서 만든 논리 볼륨 lvweb의 크기를 800MiB로 확장하고, 그 위의 XFS 파일 시스템도 마운트를 유지한 채 확장된 크기를 모두 쓰도록 키우세요. 볼륨 그룹에 여유 공간이 부족하면 확장할 수 없으므로 여유를 먼저 확인하세요.
정답
볼륨 그룹 여유를 확인하고 논리 볼륨을 확장합니다.
vgs vgdata
lvextend -L 800M /dev/vgdata/lvwebXFS 파일 시스템을 온라인으로 키웁니다.
xfs_growfs /web
df -h /web해설: 논리 볼륨 확장은 lvextend로 메타데이터상의 크기만 키우므로, 파일 시스템이 그 공간을 실제로 쓰려면 별도 확장이 필요합니다. XFS는 xfs_growfs(인자로 마운트 지점), ext4는 resize2fs(인자로 장치)를 쓰는 점이 핵심 차이이며, XFS는 줄일 수 없고 늘리기만 됩니다. lvextend -r -L 800M처럼 -r을 붙이면 파일 시스템 확장을 한 번에 처리할 수도 있습니다. 여유가 모자라면 lvextend가 실패하므로 vgs로 Free 공간을 먼저 확인합니다.
작업 8 (20점): 스토리지와 파일 시스템 #
빈 디스크 /dev/vdc를 LUKS로 암호화하세요. 패스프레이즈는 Secret123을 쓰고, 잠금 해제 시 이름은 cryptdata로 매핑하세요. 해제된 장치를 ext4로 포맷해 /secure에 마운트하고, 부팅 시 패스프레이즈를 물어 자동으로 잠금 해제,마운트되도록 crypttab과 fstab에 등록하세요.
정답
디스크를 LUKS로 초기화하고 잠금을 엽니다.
cryptsetup luksFormat /dev/vdc
# YES 입력 후 패스프레이즈 Secret123 설정
cryptsetup luksOpen /dev/vdc cryptdata매핑된 장치를 포맷하고 마운트합니다.
mkfs.ext4 /dev/mapper/cryptdata
mkdir /secure
mount /dev/mapper/cryptdata /securecrypttab과 fstab에 등록합니다.
blkid /dev/vdc
echo 'cryptdata UUID=<vdc의 LUKS UUID> none' >> /etc/crypttab
echo '/dev/mapper/cryptdata /secure ext4 defaults 0 0' >> /etc/fstab
mount -a해설: LUKS는 두 단계로 영구화합니다. /etc/crypttab이 부팅 시 /dev/vdc를 cryptdata로 잠금 해제하고(세 번째 필드 none이면 부팅 중 패스프레이즈를 물음), /etc/fstab은 그렇게 풀린 /dev/mapper/cryptdata를 마운트합니다. crypttab의 UUID는 매핑된 장치가 아니라 암호화 원본(/dev/vdc)의 UUID여야 한다는 점이 가장 흔한 함정입니다. crypttab을 빠뜨리면 부팅 시 매핑이 없어 fstab 마운트가 실패합니다.
작업 9 (20점): 스토리지와 파일 시스템 #
NFS 서버 nfs.example.com이 /exports/shared를 export하고 있습니다. 이 공유를 AutoFS로 구성해 /mnt/shared에 접근할 때만 자동 마운트되도록 하세요. AutoFS 패키지를 설치하고 맵 파일을 작성한 뒤 서비스를 활성화하세요.
정답
패키지를 설치하고 마스터 맵에 마운트 지점을 등록합니다.
dnf install -y autofs
echo '/mnt /etc/auto.shared' >> /etc/auto.master.d/shared.autofs직접 맵 파일을 작성합니다.
echo 'shared -rw nfs.example.com:/exports/shared' > /etc/auto.shared서비스를 활성화하고 접근으로 자동 마운트를 확인합니다.
systemctl enable --now autofs
ls /mnt/shared
mount | grep shared해설: AutoFS는 마스터 맵(/etc/auto.master 또는 auto.master.d/*.autofs)에 “마운트 부모 경로 + 맵 파일"을 등록하고, 맵 파일에 “하위 키 + 옵션 + 원격 경로"를 적는 두 단계 구조입니다. 마스터 맵에 /mnt를 두고 맵 파일에 shared를 두면 실제 마운트 지점은 /mnt/shared가 되며, 그 디렉터리를 직접 만들 필요는 없습니다(AutoFS가 관리). 서비스를 enable --now로 켜야 재부팅 후에도 유지되며, NFS 클라이언트 유틸이 없으면 dnf install nfs-utils도 필요합니다.
작업 10 (15점): 패키지와 네트워킹 #
postgresql 모듈 스트림 중 버전 15를 활성화해 설치하세요. 설치 후 활성화된 스트림이 15인지 확인하세요.
정답
사용 가능한 스트림을 확인하고 버전 15를 설치합니다.
dnf module list postgresql
dnf module install -y postgresql:15활성화된 스트림을 확인합니다.
dnf module list postgresql --enabled해설: AppStream의 모듈은 같은 소프트웨어의 여러 버전을 스트림으로 제공하며, dnf module install postgresql:15는 스트림 15를 활성화하고 기본 프로파일을 함께 설치합니다. 한 모듈에서는 하나의 스트림만 활성화되므로, 다른 버전이 이미 켜져 있으면 dnf module reset postgresql로 초기화한 뒤 원하는 스트림을 설치합니다. --enabled 목록에서 15 옆에 [e] 표시가 보이면 정상입니다.
작업 11 (15점): 패키지와 네트워킹 #
기본 네트워크 연결에 정적 IPv4 주소 192.168.50.20/24, 게이트웨이 192.168.50.1, DNS 192.168.50.1을 설정하세요. 설정은 nmcli로 영구 적용하고, 변경을 활성화한 뒤 적용 결과를 확인하세요. 연결 이름은 System eth0이라고 가정합니다.
정답
연결 이름을 확인하고 정적 주소를 설정합니다.
nmcli connection show
nmcli connection modify "System eth0" \
ipv4.addresses 192.168.50.20/24 \
ipv4.gateway 192.168.50.1 \
ipv4.dns 192.168.50.1 \
ipv4.method manual변경을 적용하고 결과를 확인합니다.
nmcli connection up "System eth0"
ip addr show
nmcli connection show "System eth0" | grep ipv4해설: nmcli connection modify는 연결 프로파일을 디스크에 영구 저장하므로 재부팅 후에도 유지됩니다. ipv4.method를 manual로 바꾸지 않으면 정적 주소를 넣어도 DHCP가 계속 동작해 의도한 IP가 안 잡히는 것이 흔한 함정입니다. 수정만으로는 즉시 반영되지 않으므로 connection up(또는 nmcli device reapply)으로 다시 활성화해야 하며, 검증은 ip addr로 실제 인터페이스에 주소가 붙었는지 확인합니다.
작업 12 (20점): 사용자와 보안 #
그룹 devteam을 만들고, 사용자 alice와 bob을 이 그룹의 보조 그룹 구성원으로 추가해 생성하세요. alice에게는 비밀번호 없이 sudo 전체 권한을 부여하고, bob의 계정은 90일마다 비밀번호를 변경하도록 만료 정책을 설정하세요.
정답
그룹과 사용자를 만듭니다.
groupadd devteam
useradd -G devteam alice
useradd -G devteam bob
passwd alice
passwd bobalice에게 비밀번호 없는 sudo 권한을 부여합니다.
echo 'alice ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/alice
visudo -cf /etc/sudoers.d/alicebob의 비밀번호 최대 사용 기간을 설정합니다.
chage -M 90 bob
chage -l bob해설: 보조 그룹은 useradd -G(이미 있는 사용자라면 usermod -aG로 기존 그룹을 보존)로 지정하며, -a 없이 usermod -G만 쓰면 기존 보조 그룹이 모두 날아가는 것이 함정입니다. sudo 권한은 /etc/sudoers를 직접 고치기보다 /etc/sudoers.d/ 아래 파일로 두는 편이 안전하고, visudo -cf로 문법을 검사해야 합니다. chage -M 90은 비밀번호 최대 사용 기간을 90일로 잡으며, -l로 정책을 확인합니다.
작업 13 (20점): 사용자와 보안 #
디렉터리 /srv/project를 만들고, 그룹 devteam이 이 디렉터리에 읽기,쓰기,실행을 할 수 있도록 ACL을 설정하세요. 또한 이 디렉터리에 이후 새로 생기는 파일과 디렉터리도 devteam이 같은 권한을 자동으로 갖도록 기본 ACL을 설정하세요.
정답
디렉터리를 만들고 ACL과 기본 ACL을 설정합니다.
mkdir -p /srv/project
setfacl -m g:devteam:rwx /srv/project
setfacl -m d:g:devteam:rwx /srv/project설정된 ACL을 확인합니다.
getfacl /srv/project해설: setfacl -m g:devteam:rwx는 현재 디렉터리 자체에 그룹 ACL을 거는 것이고, d:(default) 접두사를 붙인 항목은 그 디렉터리 안에 이후 새로 생기는 파일,디렉터리가 상속할 기본 권한을 정합니다. 기존 항목과 default 항목은 별개라 둘 다 설정해야 “지금 접근"과 “앞으로 생길 것” 양쪽이 충족됩니다. getfacl 출력에서 default: 줄이 보이는지로 기본 ACL을 검증합니다.
작업 14 (20점): 사용자와 보안 #
웹 서버가 비표준 디렉터리 /srv/www의 콘텐츠를 제공하도록 설정했더니 접근이 거부됩니다. SELinux가 Enforcing 상태에서 이 디렉터리에 올바른 컨텍스트를 영구적으로 부여해 문제를 해결하세요. 또한 사용자 홈 디렉터리를 웹으로 제공하는 SELinux boolean을 영구적으로 켜세요.
정답
디렉터리에 웹 콘텐츠 컨텍스트를 영구 규칙으로 등록하고 적용합니다.
semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?"
restorecon -Rv /srv/wwwboolean을 영구적으로 켭니다.
setsebool -P httpd_enable_homedirs on확인합니다.
ls -Zd /srv/www
getsebool httpd_enable_homedirs해설: 컨텍스트 변경은 두 단계입니다. semanage fcontext -a가 정책 데이터베이스에 영구 규칙을 추가하고, restorecon이 그 규칙대로 실제 파일에 레이블을 입힙니다. chcon만 쓰면 당장은 되지만 restorecon이나 relabel 시 원복되므로 영구가 아니라는 점이 핵심 함정입니다. boolean은 setsebool에 -P를 붙여야 디스크에 저장되어 재부팅 후에도 유지되며, -P 없이 켜면 일시적입니다. (/.*)? 정규식은 디렉터리 자체와 그 안의 모든 항목을 포함합니다.
작업 15 (20점): 컨테이너 #
Red Hat 레지스트리(또는 docker.io)에서 nginx이미지를 받아, 호스트의 /srv/web-content를 컨테이너의 /usr/share/nginx/html에 읽기 전용으로 마운트하고 호스트 8080 포트를 컨테이너 80 포트에 연결하는 컨테이너 mynginx를 root가 아닌 일반 사용자 alice로 실행하세요.
정답
alice로 로그인한 뒤 이미지를 받고 컨테이너를 실행합니다.
su - alice
mkdir -p ~/web-content
podman pull docker.io/library/nginx
podman run -d --name mynginx \
-p 8080:80 \
-v ~/web-content:/usr/share/nginx/html:Z,ro \
nginx상태를 확인합니다.
podman ps
curl http://localhost:8080해설: rootless Podman은 일반 사용자 세션에서 그대로 동작하므로 su - alice로 그 사용자 환경에 들어가 실행하는 것이 핵심입니다. -v의 :Z는 SELinux가 호스트 디렉터리에 컨테이너용 레이블(container_file_t)을 붙여 접근 거부를 막고, :ro는 읽기 전용 마운트입니다. rootless에서는 1024 미만 포트를 호스트 쪽으로 직접 못 여는 제약이 있어 호스트 포트로 8080 같은 높은 번호를 쓰는 점에 주의합니다.
작업 16 (20점): 컨테이너 #
작업 15의 mynginx 컨테이너가 alice로 로그인하지 않아도, 즉 부팅 시 자동으로 시작되는 systemd 서비스로 돌아가도록 quadlet으로 구성하세요. 또한 alice가 로그아웃해도 서비스가 유지되도록 linger를 켜세요.
정답
기존 컨테이너를 정리하고 alice의 quadlet 디렉터리에 유닛 파일을 만듭니다.
su - alice
podman rm -f mynginx
mkdir -p ~/.config/containers/systemd
cat > ~/.config/containers/systemd/mynginx.container <<'EOF'
[Container]
Image=docker.io/library/nginx
ContainerName=mynginx
PublishPort=8080:80
Volume=%h/web-content:/usr/share/nginx/html:Z,ro
[Service]
Restart=always
[Install]
WantedBy=default.target
EOF유닛을 생성,시작합니다.
systemctl --user daemon-reload
systemctl --user enable --now mynginx.service
systemctl --user status mynginx.servicealice가 로그아웃해도 유지되도록 root에서 linger를 켭니다.
exit
loginctl enable-linger alice해설: quadlet은 ~/.config/containers/systemd/*.container 파일을 두면 systemd 생성기가 자동으로 mynginx.service 유닛으로 변환해 주는 방식이며, daemon-reload 후 --user로 그 서비스를 켭니다. quadlet 파일의 이름이 mynginx.container이면 서비스 이름은 mynginx.service가 된다는 점이 헷갈리기 쉽습니다. rootless user 서비스는 그 사용자가 로그인해 있을 때만 도는 것이 기본이라, 부팅 시 자동 시작과 로그아웃 후 유지를 위해 loginctl enable-linger가 반드시 필요합니다.
채점 기준 #
각 작업의 배점을 합산해 채점합니다. 합계는 300점이며 210점 이상이 합격권입니다.
| 영역 | 작업,배점 | 소계 |
|---|---|---|
| 필수 도구와 셸 스크립트 | 1(15) , 2(15) | 30 |
| 부팅과 시스템 운영 | 3(15) , 4(15) , 5(15) | 45 |
| 스토리지와 파일 시스템 | 6(20) , 7(20) , 8(20) , 9(20) | 80 |
| 패키지와 네트워킹 | 10(15) , 11(15) | 30 |
| 사용자와 보안 | 12(20) , 13(20) , 14(20) | 60 |
| 컨테이너 | 15(20) , 16(20) | 40 |
| 합계 | (합계) | 300 |
채점은 실제 시험과 같이 결과물 기준입니다. 명령을 어떻게 쳤는지가 아니라 만들어진 사용자,볼륨,마운트,서비스의 최종 상태가 요구사항과 일치하는지를 봅니다. 특히 채점 직전 시스템이 재부팅되므로, 영구화를 빠뜨린 작업은 실행에 성공했어도 0점이 됩니다. 한 작업 안에서도 권한,크기,컨텍스트,옵션 같은 항목별로 부분 점수가 나뉘므로, 막히는 항목이 있어도 채울 수 있는 부분은 끝까지 채우는 편이 점수에 유리합니다.
영역별 약점 복습 #
채점 후 점수가 낮은 영역을 아래 표의 해당 글로 돌아가 복습하십시오.
| 영역 | 관련 작업 | 복습할 글 |
|---|---|---|
| 필수 도구와 셸 스크립트 | 1, 2 | #2 , #3 |
| 부팅과 시스템 운영 | 3, 4, 5 | #4 , #9 |
| 스토리지와 파일 시스템 | 6, 7, 8, 9 | #5 , #6 , #7 |
| 패키지와 네트워킹 | 10, 11 | #8 , #10 |
| 사용자와 보안 | 12, 13, 14 | #11 , #12 , #13 |
| 컨테이너 | 15, 16 | #14 |
특정 작업에서 시간이 부족했다면 도메인 지식보다 손 빠르기 문제일 수 있습니다. 이 경우 #15 시험 팁과 시간 관리를 다시 읽고, 같은 16개 작업을 시간을 재며 한 번 더 푸십시오. LVM 확장과 LUKS,SELinux 컨텍스트는 한 번 손에 익으면 작업당 소요 시간이 눈에 띄게 줄어듭니다.
시리즈를 마치며 #
#1의 시험 소개에서 출발해 셸 도구,스크립트,부팅,systemd,LVM,LUKS,파일 시스템,NFS,패키지,네트워킹,사용자,sudo,ACL,firewalld,SELinux,Podman까지 RHCSA 전 영역을 16편으로 통과했습니다. 이 모의고사에서 210점을 넘겼다면 실제 시험장에서도 충분히 합격선을 넘길 수 있는 손이 만들어졌습니다. 축하합니다.
RHCSA가 RHEL 시스템 관리자의 실기였다면, 다음 단계는 그 손작업을 Ansible로 자동화하는 RHCE(EX294)이며, RHCSA 보유가 RHCE 응시의 전제 조건이니 합격의 기세를 이어 다음 실기로 넘어가시기를 권합니다.