LabHub
배우기 러닝패스 코스

LFCS — Linux Foundation System Administrator

LFCS Mock Exam A

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

실제 LFCS 시험과 같은 조건에서 과제 18개를 120분 안에 풉니다. 합격선은 67% 이고 부분 점수제이므로, 18개 중 13개를 통과하면 합격입니다.

실제 시험 환경

이 모의고사를 푸는 방법

  1. 힌트를 보지 말고 먼저 끝까지 풀어 보십시오. 18개를 다 훑은 뒤에, 그때 막힌 것만 힌트를 여십시오.
  2. 웹 검색을 하지 마십시오. man--help 만으로 푸십시오. 이것이 이 시험에서 가장 중요한 연습입니다. 실제 시험장에서는 검색창이 없습니다.
  3. 명령 이름이 기억나지 않으면 man -k <키워드> 또는 apropos <키워드> 로 찾으십시오. 예를 들어 man -k acl, man -k quota, man -k "file system" 처럼 씁니다. 지금 이 연습을 해 두지 않으면 시험장에서 처음 하게 됩니다.
  4. 섹션 번호가 필요하면 man 5 fstab 처럼 씁니다. 설정 파일은 5절, 관리자 명령은 8절에 있습니다.

이 환경이 실제 시험과 다른 점

실습 파드는 커널 권한이 거의 없고 systemd 가 PID 1 로 돌지 않습니다. 그래서 mount, systemctl, iptables 는 여기서 동작하지 않습니다. 같은 도메인의 지식을 이 환경에서 확인할 수 있는 형태로 바꾸어 출제했습니다. 실제 시험에서는 이 셋이 모두 동작하므로, 여기서 만든 fstab 항목과 유닛 파일은 시험장에서 mount -asystemctl enable --now 로 이어진다고 생각하십시오.

단계

  1. /root/exam/find/src/data-01.txt부터 data-05.txt까지 다섯 파일을 만드십시오. data-01data-03 은 각각 200000 바이트 이상, data-04data-05 는 각각 1 바이트 이상 4096 바이트 미만입니다. data-01.txt 를 가리키는 하드 링크 data-01.hard 를 같은 디렉터리에 만드십시오. 그다음 src 바로 아래의 일반 파일 중 크기가 100 KiB 를 넘는 것들의 이름만 /root/exam/find/big.txt 에, 하드 링크 수가 2 이상인 것들의 이름만 /root/exam/find/links.txt 에 적으십시오. 두 파일 모두 이름만 한 줄에 하나씩, LC_ALL=C sort 순서로 적습니다.
  2. /etc/services 에서 프로토콜이 tcp 이고 포트 번호가 1024 이상 2000 이하인 항목을 골라 /root/exam/text/tcp-high.txt 에 적으십시오. 한 줄에 <포트> <서비스 이름> 을 공백 하나로 구분해 적고, 서비스 이름은 그 줄의 첫 번째 필드를 씁니다. 포트 번호 오름차순으로 정렬하고 똑같은 줄은 하나만 남깁니다.
  3. /root/exam/arch/src/log-01.txt부터 log-05.txt까지 각각 20000 바이트 이상인 파일 다섯 개와 확장자가 .tmp 인 파일 하나를 만드십시오. /root/exam/arch/ 에서 src 디렉터리를 gzip 으로 압축한 tar 아카이브 /root/exam/arch/backup.tar.gz 를 만들되 .tmp 파일은 제외하십시오. 그 아카이브에 담긴 항목 목록을 LC_ALL=C sort 순서로 /root/exam/arch/members.txt 에 적으십시오.
  4. GID 4200 인 그룹 ops 와 GID 4201 인 그룹 audit 을 만드십시오. UID 4300 인 사용자 deploy 를 만들되 기본 그룹은 ops, 보조 그룹은 audit, 로그인 셸은 /bin/bash, 홈은 /home/deploy 로 하고, 홈 디렉터리는 실제로 만들어 권한 750, 소유 deploy:ops 로 두십시오. deploy 의 암호 정책은 최소 변경 간격 7일, 최대 사용 기간 60일, 만료 경고 14일로 하고 계정 만료일은 2027-06-30 으로 지정하십시오.
  5. UID 4301 인 사용자 intern 을 만드십시오. 로그인 셸은 /usr/sbin/nologin, 홈은 실제로 만들고, 보조 그룹으로 ops 에 넣으십시오. intern 에 암호를 한 번 설정한 뒤 그 계정을 잠그십시오. 마지막으로 /etc/login.defs 의 기본값을 PASS_MAX_DAYS 90, PASS_MIN_DAYS 7, PASS_WARN_AGE 14, UMASK 027 로 바꾸십시오.
  6. 디렉터리 /srv/data/srv/scratch 를 만들고 /etc/fstab 에 항목 두 개를 추가하십시오. 첫째는 장치를 UUID=2f9c1a70-0007-4e00-9a00-000000000007, 마운트 지점 /srv/data, 종류 ext4, 옵션 defaults,nofail, dump 0, pass 2 입니다. 둘째는 장치 tmpfs, 마운트 지점 /srv/scratch, 종류 tmpfs, 옵션 rw,nosuid,nodev,noexec,size=256m, dump 0, pass 0 입니다. 이 파드에서는 mount 를 실행할 수 없으니 항목 작성까지만 하십시오.
  7. /root/exam/storage/data.img 를 정확히 134217728 바이트로 만들고 그 파일 위에 ext4 파일시스템을 만드십시오. 볼륨 라벨은 EXAMDATA, 예약 블록 비율은 1% 입니다. 만들어진 파일시스템의 UUID 를 /root/exam/storage/data.uuid 에 한 줄로 적으십시오.
  8. /root/exam/storage/sparse.img 를 겉보기 크기 536870912 바이트인 희소 파일로 만드십시오(실제 점유는 거의 0 이어야 합니다). /root/exam/storage/dense.img 는 4 MiB 를 실제로 할당한 파일로 만드십시오. 그다음 /root/exam/storage/usage.txt 에 아래 세 줄을 적으십시오. 값은 KiB 단위 정수입니다. sparse_apparent_kib=<sparse.img 의 겉보기 크기> sparse_actual_kib=<sparse.img 이 실제로 차지하는 크기> dense_actual_kib=<dense.img 이 실제로 차지하는 크기>
  9. 공유 디렉터리 /srv/team 을 만들고 소유를 root:ops, 권한을 2770 으로 하십시오. ACL 로 deploy 에게 rwx, intern 에게 r-x 를 주고, 이 디렉터리 아래에 새로 만들어지는 파일이 소유 그룹에 rwx, 그 밖의 사용자에게 아무 권한도 갖지 않도록 기본 ACL 을 설정하십시오. 기본 ACL 의 소유자 항목은 rwx 입니다.
  10. /etc/hosts10.60.0.11web1.lab.internal 과 짧은 이름 web1 로, 10.60.0.12db1.lab.internal 과 짧은 이름 db1 로 등록하십시오. 그리고 /etc/nsswitch.confhosts: 줄에서 filesdns 보다 앞에 오도록 하십시오. 네 이름이 모두 getent hosts 로 해석되어야 합니다.
  11. /etc/ssh/sshd_config.d/90-exam.conf 를 만들어 아래 일곱 가지를 이 파일에 적으십시오. PermitRootLogin no, PasswordAuthentication no, MaxAuthTries 3, ClientAliveInterval 300, ClientAliveCountMax 2, AllowTcpForwarding no, X11Forwarding no. 설정이 문법적으로 올바르고 sshd 가 해석한 최종 값이 이대로여야 합니다. 데몬을 다시 띄울 필요는 없습니다.
  12. 127.0.0.1 의 TCP 9101 번 포트에서 연결을 받는 프로세스를 백그라운드로 띄우고 시험이 끝날 때까지 살려 두십시오. 그다음 그 소켓을 들고 있는 프로세스를 찾아 /root/exam/net/listener.txt 에 아래 세 줄을 적으십시오. port=9101, pid=<그 프로세스의 PID>, comm=<그 프로세스의 이름>
  13. 이 파드의 현재 네트워크 상태를 조회해 /root/exam/net/facts.txt 에 네 줄로 적으십시오. iface=<기본 경로가 나가는 인터페이스 이름>, ipv4=<그 인터페이스의 IPv4 주소를 프리픽스까지 포함해>, mtu=<그 인터페이스의 MTU>, gateway=<기본 경로의 게이트웨이 주소>.
  14. /usr/local/bin/labhub-batch.sh 를 만들어 실행 권한을 주고, /etc/systemd/system/labhub-batch.service 유닛 파일을 작성하십시오. [Unit] 에는 Description 이 있어야 하고 WantsAfter 가 모두 network-online.target 이어야 합니다. [Service] 의 Type 은 oneshot, ExecStart 는 /usr/local/bin/labhub-batch.sh, WorkingDirectory 는 /srv/data 입니다. [Install] 의 WantedBy 는 multi-user.target 입니다. 이 파드에는 systemd 가 PID 1 로 돌지 않아 systemctl enable 이 동작하지 않으므로, 그 명령이 만드는 심볼릭 링크 /etc/systemd/system/multi-user.target.wants/labhub-batch.service 를 손으로 만드십시오.
  15. /usr/local/bin/labhub-report.sh/usr/local/bin/labhub-weekly.sh 를 만들고 둘 다 권한 755 로 두십시오. /etc/cron.d/labhub-report 를 만들어 15분마다 root 권한으로 /usr/local/bin/labhub-report.sh 를 실행하도록 등록하고, 그 파일의 권한은 644, 소유는 root:root 로 두십시오. 그리고 root 의 crontab 에 매주 일요일 02시 30분에 /usr/local/bin/labhub-weekly.sh 를 실행하는 줄을 등록하십시오.
  16. /var/log/labhub-app.log 를 만들고 /etc/logrotate.d/labhub-app 을 작성해 이 로그를 매일 회전하고 14개까지 보관하도록 하십시오. compress, delaycompress, missingok, notifempty 를 켜고, 회전 후 새 파일은 create 0640 root adm 으로 만들어지게 하십시오.
  17. /usr/local/bin/exam-worker.sh 를 만들어 권한 755 를 주십시오. 첫 줄은 셔뱅으로 시작해야 하고, 내용은 종료하지 않고 계속 도는 것이면 됩니다. 이것을 nice 값 15 로 백그라운드에서 실행하고, 그 프로세스의 PID 를 /run/exam-worker.pid 에 한 줄로 적으십시오. 프로세스는 채점 시점까지 살아 있어야 합니다.
  18. 패키지 figletpv 를 설치하십시오(이 환경은 인터넷이 없고 /opt/localrepo 오프라인 저장소가 이미 등록돼 있습니다). 설치된 두 패키지의 이름과 버전을 /root/exam/ops/pkg.txt 에 한 줄에 하나씩 <패키지 이름> <버전> 형식으로 적으십시오. 마지막으로 pv 만 자동 업그레이드 대상에서 제외되도록 잠그십시오.

참고

find 로 크기·링크 조건에 맞는 파일 고르기

-size +100k 의 단위는 KiB 이고 -links +1 은 하드 링크 수가 2 이상인 것을 고릅니다. 이름만 출력하려면 -printf%f 를 쓰고, 정렬은 LC_ALL=C sort 로 고정하십시오. 하드 링크는 ln, 심볼릭 링크는 ln -s 입니다.

/etc/services 에서 조건에 맞는 항목 추리기

각 줄의 두 번째 필드가 포트/프로토콜 형태입니다. awksplit() 으로 슬래시를 기준으로 나눈 뒤 숫자를 비교하십시오. 포트 오름차순 정렬과 중복 제거는 sort -n -u 한 번으로 됩니다.

특정 확장자를 제외한 tar 아카이브 만들기

tarc 는 만들기, z 는 gzip, f 는 파일 이름입니다. 제외는 --exclude 로 하고 패턴은 셸이 먼저 펼치지 않게 따옴표로 감싸십시오. 담긴 목록은 tar -tzf 로 다시 뽑습니다.

그룹·사용자 생성과 암호 만료 정책

groupadd -g, useradd-u -g -G -s -m -d 를 조합합니다. 암호 정책은 chage 로 걸고, 계정 만료일은 chage -E 입니다. man 8 useraddman 1 chage 를 보십시오. 홈 디렉터리 권한과 소유는 useradd 가 만들어 준 뒤에 따로 맞춰야 할 수 있습니다.

로그인 차단 계정과 기본 암호 정책

셸을 /usr/sbin/nologin 으로 주면 로그인이 막힙니다. 잠금은 usermod -L 또는 passwd -l 인데, 암호가 아예 없는 계정을 잠그면 잠금 표시만 남고 해시가 없습니다. chpasswd 로 암호를 먼저 넣고 잠그십시오. 기본값은 /etc/login.defs 에 있습니다.

fstab 항목 두 개 작성하기

man 5 fstab 에 여섯 필드의 뜻이 전부 나옵니다. 순서는 장치, 마운트 지점, 종류, 옵션, dump, pass 입니다. 마운트 지점 디렉터리는 미리 만들어야 합니다. 문법만 확인하려면 findmnt --verify --tab-file /etc/fstab 을 쓰십시오.

파일 위에 ext4 만들고 슈퍼블록 읽기

빈 파일을 정확한 크기로 만드는 것은 truncate -s 입니다. mkfs.ext4 는 블록 장치가 아닌 파일에도 만들 수 있지만 -F 를 요구합니다. 라벨은 -L, 예약 블록 비율은 -m 입니다. 만든 뒤 값을 읽는 것은 tune2fs -l 또는 dumpe2fs -h 입니다.

희소 파일과 실제 점유 크기 보고

truncate 는 구멍만 뚫어 희소 파일을 만들고 fallocate 는 블록을 실제로 잡습니다. 겉보기 크기는 du --apparent-size, 실제 점유는 그냥 du 이고 KiB 단위는 -k 입니다. stat%s%b 를 비교해 봐도 차이가 보입니다.

setgid 공유 디렉터리와 기본 ACL

chmod 2770 의 앞자리 2 가 setgid 입니다. ACL 은 setfacl -m, 새로 만들어질 파일에 물려줄 기본 ACL 은 -d -m 입니다. 지금 걸린 항목은 getfacl 로 확인합니다. man 1 setfacl 의 예시 절이 특히 짧고 쓸모 있습니다.

정적 이름 해석과 해석 순서

한 줄에 주소 하나와 이름 여럿을 적으면 뒤에 적은 것이 별명이 됩니다. 확인은 getent hosts <이름> 입니다. 해석 순서는 /etc/nsswitch.confhosts: 줄이 정하고, man 5 nsswitch.conf 에 설명이 있습니다.

SSH 서버 설정과 최종 값 확인

메인 설정이 맨 위에서 sshd_config.d/*.conf 를 include 하고, sshd 는 같은 키워드가 여러 번 나오면 먼저 읽은 값을 씁니다. 문법 확인은 sshd -t, 해석된 최종 값 확인은 sshd -T 입니다. man 5 sshd_config 에 키워드가 전부 있습니다.

포트를 여는 프로세스 찾아내기

듣고 있는 TCP 소켓과 그 소켓을 가진 프로세스를 함께 보려면 ss -ltnp 입니다. 포트로 걸러내려면 ss -ltnp 'sport = :9101' 처럼 씁니다. 프로세스 이름은 /proc/<PID>/comm 에도 있습니다. 셸을 닫아도 죽지 않게 띄우십시오.

현재 인터페이스와 경로 읽어 적기

기본 경로는 ip route show default, 주소는 ip -o -4 addr show dev <이름> 으로 봅니다. -o 를 붙이면 한 줄로 나와 필드를 뽑기 쉽습니다. MTU 는 ip link 에도 있고 /sys/class/net/<이름>/mtu 를 그대로 읽어도 됩니다.

systemd 유닛 파일 작성과 활성화 링크

유닛 파일은 [Unit], [Service], [Install] 세 절로 이루어진 ini 형식입니다. 문법 확인은 systemd-analyze verify <경로> 입니다. systemctl enable 이 실제로 하는 일은 [Install] 의 WantedBy 가 가리키는 타깃의 .wants 디렉터리에 심볼릭 링크를 만드는 것뿐입니다. man 5 systemd.service 를 보십시오.

cron.d 항목과 root crontab

/etc/cron.d 의 줄에는 사용자 필드가 하나 더 있어 필드가 여섯 개입니다. 사용자의 crontab 에는 그 필드가 없습니다. 15분마다는 */15, 일요일은 요일 자리의 0 입니다. 등록 확인은 crontab -l -u root 입니다. man 5 crontab 을 보십시오.

로그 회전 설정 작성

설정 블록은 경로 { 지시어들 } 형태입니다. 실제로 회전시키지 않고 파서가 무엇을 읽었는지만 보려면 logrotate -d <설정파일> 입니다. 오타 난 지시어는 그 출력에 error: 로 나옵니다. man 8 logrotate 에 지시어가 전부 있습니다.

우선순위를 낮춘 백그라운드 작업과 PID 파일

nice -n 15 <명령> 으로 우선순위를 낮춰 시작합니다. 셸을 닫아도 살아 있게 하려면 nohup ... & 로 띄우십시오. 방금 띄운 프로세스의 PID 는 셸 변수 $! 에 들어 있습니다. 현재 nice 값 확인은 ps -o pid,ni,comm -p <PID> 입니다. 스크립트 첫 줄의 셔뱅은 #!/bin/bash 처럼 씁니다.

패키지 설치와 업그레이드 잠금

이 환경은 인터넷이 없고 /opt/localrepo 가 저장소로 등록돼 있어 apt-get install 이 그대로 됩니다. 설치된 패키지의 버전만 뽑으려면 dpkg-query -W -f 의 서식 문자열을 쓰십시오. 업그레이드 대상에서 빼는 것은 apt-mark hold 이고 확인은 apt-mark showhold 입니다.