LFCS — Linux Foundation System Administrator
LFCS Mock Exam A
한국어 원문으로 표시합니다.
목표
실제 LFCS 시험과 같은 조건에서 과제 18개를 120분 안에 풉니다. 합격선은 67% 이고 부분 점수제이므로, 18개 중 13개를 통과하면 합격입니다.
실제 시험 환경
- 브라우저도 인터넷도 없습니다. 볼 수 있는 것은 터미널 안의
man페이지와--help,info, 그리고/usr/share/doc/아래의 배포판 문서뿐입니다. - 포트 8080, 4505, 4506 tcp 를 차단하면 안 되고,
certerminal프로세스를 죽이면 시험 세션이 그 자리에서 끝납니다. - 합격선은 67% 이고 부분 점수제입니다. 한 과제에 매달려 시간을 다 쓰는 것이 가장 흔한 탈락 이유입니다. 막히면 넘기고 나중에 돌아오십시오.
이 모의고사를 푸는 방법
- 힌트를 보지 말고 먼저 끝까지 풀어 보십시오. 18개를 다 훑은 뒤에, 그때 막힌 것만 힌트를 여십시오.
- 웹 검색을 하지 마십시오.
man과--help만으로 푸십시오. 이것이 이 시험에서 가장 중요한 연습입니다. 실제 시험장에서는 검색창이 없습니다. - 명령 이름이 기억나지 않으면
man -k <키워드>또는apropos <키워드>로 찾으십시오. 예를 들어man -k acl,man -k quota,man -k "file system"처럼 씁니다. 지금 이 연습을 해 두지 않으면 시험장에서 처음 하게 됩니다. - 섹션 번호가 필요하면
man 5 fstab처럼 씁니다. 설정 파일은 5절, 관리자 명령은 8절에 있습니다.
이 환경이 실제 시험과 다른 점
실습 파드는 커널 권한이 거의 없고 systemd 가 PID 1 로 돌지 않습니다. 그래서
mount, systemctl, iptables 는 여기서 동작하지 않습니다. 같은 도메인의
지식을 이 환경에서 확인할 수 있는 형태로 바꾸어 출제했습니다. 실제 시험에서는
이 셋이 모두 동작하므로, 여기서 만든 fstab 항목과 유닛 파일은 시험장에서
mount -a 와 systemctl enable --now 로 이어진다고 생각하십시오.
단계
/root/exam/find/src/에data-01.txt부터data-05.txt까지 다섯 파일을 만드십시오.data-01–data-03은 각각 200000 바이트 이상,data-04–data-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순서로 적습니다./etc/services에서 프로토콜이tcp이고 포트 번호가 1024 이상 2000 이하인 항목을 골라/root/exam/text/tcp-high.txt에 적으십시오. 한 줄에<포트> <서비스 이름>을 공백 하나로 구분해 적고, 서비스 이름은 그 줄의 첫 번째 필드를 씁니다. 포트 번호 오름차순으로 정렬하고 똑같은 줄은 하나만 남깁니다./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에 적으십시오.- 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 으로 지정하십시오. - 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로 바꾸십시오. - 디렉터리
/srv/data와/srv/scratch를 만들고/etc/fstab에 항목 두 개를 추가하십시오. 첫째는 장치를UUID=2f9c1a70-0007-4e00-9a00-000000000007, 마운트 지점/srv/data, 종류ext4, 옵션defaults,nofail, dump0, pass2입니다. 둘째는 장치tmpfs, 마운트 지점/srv/scratch, 종류tmpfs, 옵션rw,nosuid,nodev,noexec,size=256m, dump0, pass0입니다. 이 파드에서는mount를 실행할 수 없으니 항목 작성까지만 하십시오. /root/exam/storage/data.img를 정확히 134217728 바이트로 만들고 그 파일 위에 ext4 파일시스템을 만드십시오. 볼륨 라벨은EXAMDATA, 예약 블록 비율은 1% 입니다. 만들어진 파일시스템의 UUID 를/root/exam/storage/data.uuid에 한 줄로 적으십시오./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 이 실제로 차지하는 크기>- 공유 디렉터리
/srv/team을 만들고 소유를root:ops, 권한을2770으로 하십시오. ACL 로deploy에게rwx,intern에게r-x를 주고, 이 디렉터리 아래에 새로 만들어지는 파일이 소유 그룹에rwx, 그 밖의 사용자에게 아무 권한도 갖지 않도록 기본 ACL 을 설정하십시오. 기본 ACL 의 소유자 항목은rwx입니다. /etc/hosts에10.60.0.11을web1.lab.internal과 짧은 이름web1로,10.60.0.12를db1.lab.internal과 짧은 이름db1로 등록하십시오. 그리고/etc/nsswitch.conf의hosts:줄에서files가dns보다 앞에 오도록 하십시오. 네 이름이 모두getent hosts로 해석되어야 합니다./etc/ssh/sshd_config.d/90-exam.conf를 만들어 아래 일곱 가지를 이 파일에 적으십시오.PermitRootLogin no,PasswordAuthentication no,MaxAuthTries 3,ClientAliveInterval 300,ClientAliveCountMax 2,AllowTcpForwarding no,X11Forwarding no. 설정이 문법적으로 올바르고 sshd 가 해석한 최종 값이 이대로여야 합니다. 데몬을 다시 띄울 필요는 없습니다.127.0.0.1의 TCP9101번 포트에서 연결을 받는 프로세스를 백그라운드로 띄우고 시험이 끝날 때까지 살려 두십시오. 그다음 그 소켓을 들고 있는 프로세스를 찾아/root/exam/net/listener.txt에 아래 세 줄을 적으십시오.port=9101,pid=<그 프로세스의 PID>,comm=<그 프로세스의 이름>- 이 파드의 현재 네트워크 상태를 조회해
/root/exam/net/facts.txt에 네 줄로 적으십시오.iface=<기본 경로가 나가는 인터페이스 이름>,ipv4=<그 인터페이스의 IPv4 주소를 프리픽스까지 포함해>,mtu=<그 인터페이스의 MTU>,gateway=<기본 경로의 게이트웨이 주소>. /usr/local/bin/labhub-batch.sh를 만들어 실행 권한을 주고,/etc/systemd/system/labhub-batch.service유닛 파일을 작성하십시오.[Unit]에는 Description 이 있어야 하고Wants와After가 모두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를 손으로 만드십시오./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를 실행하는 줄을 등록하십시오./var/log/labhub-app.log를 만들고/etc/logrotate.d/labhub-app을 작성해 이 로그를 매일 회전하고 14개까지 보관하도록 하십시오.compress,delaycompress,missingok,notifempty를 켜고, 회전 후 새 파일은create 0640 root adm으로 만들어지게 하십시오./usr/local/bin/exam-worker.sh를 만들어 권한755를 주십시오. 첫 줄은 셔뱅으로 시작해야 하고, 내용은 종료하지 않고 계속 도는 것이면 됩니다. 이것을 nice 값 15 로 백그라운드에서 실행하고, 그 프로세스의 PID 를/run/exam-worker.pid에 한 줄로 적으십시오. 프로세스는 채점 시점까지 살아 있어야 합니다.- 패키지
figlet과pv를 설치하십시오(이 환경은 인터넷이 없고/opt/localrepo오프라인 저장소가 이미 등록돼 있습니다). 설치된 두 패키지의 이름과 버전을/root/exam/ops/pkg.txt에 한 줄에 하나씩<패키지 이름> <버전>형식으로 적으십시오. 마지막으로pv만 자동 업그레이드 대상에서 제외되도록 잠그십시오.
참고
- 시간을 재고 시작하십시오. 화면의 제한 시간이 120분으로 걸려 있습니다.
man -k가 아무것도 못 찾으면 색인이 없는 것입니다.apropos도 같은 색인을 씁니다. 그럴 때는<명령> --help와/usr/share/doc/<패키지>/를 보십시오./etc/hosts는 파드가 바인드 마운트로 물고 있어서sed -i처럼 파일을 새로 만들어 바꿔치기하는 방식이Device or resource busy로 실패합니다. 덧붙이기 리다이렉션이나tee -a를 쓰십시오. 실제 서버에서도 컨테이너 안이면 같은 일이 일어납니다.- 이 파드는
mount·umount·systemctl·iptables를 실행할 수 없습니다. 그 세 가지를 요구하는 과제는 없으니, 그 명령이 실패한다면 문제를 잘못 읽은 것입니다. - 흔한 실수 하나 더 — 값을 파일에 적으라고 한 과제는 전부 채점기가 그 값을 지금 다시 계산해 대조합니다. 앞에서 만든 것을 나중에 고쳤다면 보고 파일도 다시 만드십시오.
find 로 크기·링크 조건에 맞는 파일 고르기
-size +100k 의 단위는 KiB 이고 -links +1 은 하드 링크 수가 2 이상인 것을 고릅니다. 이름만 출력하려면 -printf 의 %f 를 쓰고, 정렬은 LC_ALL=C sort 로 고정하십시오. 하드 링크는 ln, 심볼릭 링크는 ln -s 입니다.
/etc/services 에서 조건에 맞는 항목 추리기
각 줄의 두 번째 필드가 포트/프로토콜 형태입니다. awk 의 split() 으로 슬래시를 기준으로 나눈 뒤 숫자를 비교하십시오. 포트 오름차순 정렬과 중복 제거는 sort -n -u 한 번으로 됩니다.
특정 확장자를 제외한 tar 아카이브 만들기
tar 의 c 는 만들기, z 는 gzip, f 는 파일 이름입니다. 제외는 --exclude 로 하고 패턴은 셸이 먼저 펼치지 않게 따옴표로 감싸십시오. 담긴 목록은 tar -tzf 로 다시 뽑습니다.
그룹·사용자 생성과 암호 만료 정책
groupadd -g, useradd 의 -u -g -G -s -m -d 를 조합합니다. 암호 정책은 chage 로 걸고, 계정 만료일은 chage -E 입니다. man 8 useradd 와 man 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.conf 의 hosts: 줄이 정하고, 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 입니다.