LFCS 필수 명령 실습
기본 Git 작업부터 SSL 인증서까지 공식 범위 기반 독립 연습 시나리오
이 과제는 과거 또는 실제 시험 문항이 아니다. LFCS 공식 범위에서 다루는 동작을 기준으로 독자적으로 만든 연습 시나리오다. 시나리오 결과는 실습 환경(폐기 가능 VM)에서만 재현하고, 운영 데이터에는 적용하지 않는다.
작성·검증 상태: AI가 문제·풀이 구조화를 보조했다. 전체 6개 시나리오를 모든 배포판에서 end-to-end 검증한 문서는 아니므로 각 완료 조건을 실습 VM에서 직접 확인한다.
1) 기본 Git Operations
문제
feature/lfcs-practice 브랜치를 만들어 config.txt 변경을 커밋하고, main에 병합하라.
완료 조건
main에 병합된 커밋이git log --oneline --graph -n 8에 보인다.- 병합 전후
git status가 clean이다. git show또는git diff --cached로config.txt만 커밋되었음을 확인한다.
안전 주의
reset --hard,rebase -i강제 편집은 사용하지 않는다.- 작업 트리 전체 변경을 한 번에 stage 하지 않는다.
풀이 예시
git init -b main lfcs-lab
cd lfcs-lab
git config user.name "LFCS Lab"
git config user.email "lfcs@example.invalid"
printf 'mode=manual\n' > config.txt
git add config.txt
git commit -m "chore: init config"
git switch -c feature/lfcs-practice
printf 'mode=practice\n' > config.txt
git add config.txt
git diff --cached
git commit -m "chore: update config for practice"
git switch main
git merge --no-ff feature/lfcs-practice
git log --oneline --graph -n 8
git status
git status
git diff HEAD~1 HEAD -- config.txt
완료 기준:
- 두 커밋이 정상히 존재
- main 브랜치 HEAD가 병합 커밋을 포함
- 작업 트리 clean
2) 서비스 생성·설정·문제 해결
문제
웹 상태 점검용 oneshot unit health-check.service를 작성해 즉시 실행되면서 부팅 활성화되도록 구성하고, 실행 실패 원인 로그를 읽어 복구한다.
완료 조건
/etc/systemd/system/health-check.service가 존재하고systemd-analyze verify가 통과한다.systemctl daemon-reload후is-active와is-enabled가 모두active/enabled이다.systemctl status health-check에서 최근 실행 로그에 예상 메시지가 찍힌다.
안전 주의
ExecStart는 실제 존재하고 실행 가능한 절대 경로를 사용한다.- 실행 파일 권한을 미검증 상태에서 단순 chmod 777으로 변경하지 않는다.
풀이 예시
cat > /usr/local/bin/health-check <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
echo "health check ok"
EOF
chmod 700 /usr/local/bin/health-check
restorecon -v /usr/local/bin/health-check
cat > /etc/systemd/system/health-check.service <<'EOF'
[Unit]
Description=LFCS Practice Health Check
[Service]
Type=oneshot
ExecStart=/usr/local/bin/health-check
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
systemd-analyze verify /etc/systemd/system/health-check.service
systemctl daemon-reload
systemctl enable --now health-check.service
systemctl is-active health-check.service
systemctl is-enabled health-check.service
systemctl status health-check.service --no-pager
3) 시스템 성능과 서비스 모니터링·문제 해결
문제
api.service가 느리다는 증상을 가정한다. CPU, 메모리, socket, journal를 묶어 병목 후보를 최소한 1개 이상 판별하라.
완료 조건
uptime과vmstat을 통해 부하 성격을 파악한다.ps -eo ... --sort=-pcpu에서 상위 사용 프로세스를 확인한다.ss -lntp로 핵심 포트의 수신 상태를 확인한다.journalctl에서 최근 오류 timestamp를 후보 판단 근거로 제시한다.
안전 주의
- 진단 도중 캐시 정리, 서비스 강제 재시작을 기본 동작으로 두지 않는다.
- 출력값이 불완전하면 반복 2~3회 측정 후 결론을 잡는다.
풀이 예시
uptime
vmstat 1 6
ps -eo pid,ppid,pcpu,pmem,user,comm --sort=-pcpu | head
ps -eo pid,ppid,pcpu,pmem,user,comm --sort=-pmem | head
ss -lntp
systemctl status api.service --no-pager
journalctl -u api.service --since "-15 min" --no-pager
완료 판단:
- 평균 부하 높음 + 상위 프로세스 확인 = 후보 좁힘
- 로그/소켓에서 서비스 자체/네트워크 가시화 가능
4) 애플리케이션·서비스 제약 조건
문제
systemd service report-api가 사용자·그룹 report-api로 실행된다. 이 서비스가 443 포트와 /srv/report/config.yml 접근에서 실패한다. 설정 파일은 root:report-api, mode 0640이어야 한다.
완료 조건
systemctl cat report-api에서 사용자, 작업 경로,ExecStart를 확인한다.namei -l /srv/report/config.yml로 경로 접근성 사유를 문서화한다.- 저포트 권한은 service unit에 필요한 capability만 위임한다.
- 변경 후 서비스 재시작 성공 및
ss -lntp에서 443 리스닝 관찰.
안전 주의
- 서비스 동작 보장을 위해
chmod 777처럼 전역 쓰기 권한으로 우회하지 않는다. - SELinux/감사 이슈가 있는 환경에서 무작정 무활성화하지 않는다.
풀이 예시
systemctl cat report-api
namei -l /srv/report/config.yml
chown root:report-api /srv/report
chmod 0750 /srv/report
chown root:report-api /srv/report/config.yml
chmod 0640 /srv/report/config.yml
install -d -m 0755 /etc/systemd/system/report-api.service.d
cat > /etc/systemd/system/report-api.service.d/capability.conf <<'EOF'
[Service]
AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
EOF
systemctl daemon-reload
systemctl restart report-api
systemctl is-active report-api
systemctl show report-api -p User -p Group -p AmbientCapabilities -p CapabilityBoundingSet
ss -lntp | grep ':443'
journalctl -u report-api -n 80 --no-pager
완료 판단:
- 포트 바인딩 실패 사유와 파일 경로 권한 사유를 분리해 기재
- 수정 결과가 로그/소켓/서비스 상태와 일치
5) 디스크 공간 문제 해결
문제
/var가 100%로 보이나 du 합계가 상대적으로 작은 상황을 가정하고 원인을 분리해 보고서를 작성한다.
완료 조건
df -hT /var와df -i /var를 동시에 캡처한다.findmnt /var로 같은 파일시스템 경계를 확인한다.du -xhd1 /var | sort -h로 큰 경로를 도출한다.lsof -a +L1 /var에서/var아래의 열린 삭제 파일 후보를 확인한다.
안전 주의
- 로그 디렉터리 삭제 전 회전 정책, 보존 정책, 서비스 영향도를 확인한다.
- 원인 분석 전 불필요한
rm -rf를 금지한다.
풀이 예시
df -hT /var
df -i /var
findmnt /var
du -xhd1 /var | sort -h
lsof -a +L1 /var | head -n 20
완료 판단:
- block 부족인지 inode 부족인지 분리 판단
- 동일 파일시스템 내 경로 기준으로만 원인 후보 도출
- 열린 삭제 파일 존재 시 서비스 중단 없이 조치 플랜 분리
6) SSL 인증서 작업
문제
폐기 가능한 디렉터리에 임시 Lab CA를 만들고, 그 CA로 서명한 api.example.net 인증서를 생성해 SAN·subject·key 일치와 chain을 검증한다.
완료 조건
- CA key와 server key 권한이
600이다. - CSR에 SAN이 포함되어 있음을
openssl req -noout -text로 확인한다. - Lab CA로 서명된 인증서의 유효기간과 chain이
openssl x509,openssl verify로 검증된다. - key와 CSR 공개키 해시가 동일하다.
안전 주의
- 개인 키 출력(콘솔/스크린샷/공유 저장소) 금지.
- 임시 비밀번호 없는 키 생성은 과제용 실습 경계에서만 사용한다.
풀이 예시
install -d -m 700 /root/lfcs-pki
cd /root/lfcs-pki
openssl req -x509 -newkey rsa:2048 -nodes \
-keyout lab-ca.key -out lab-ca.crt -days 30 \
-subj "/CN=LFCS Lab CA"
openssl req -new -newkey rsa:2048 -nodes -keyout api.example.key -out api.example.csr \
-subj "/CN=api.example.net" \
-addext "subjectAltName=DNS:api.example.net"
chmod 600 lab-ca.key api.example.key
openssl req -in api.example.csr -noout -text
printf 'subjectAltName=DNS:api.example.net\n' > api.example.ext
openssl x509 -req -in api.example.csr \
-CA lab-ca.crt -CAkey lab-ca.key -CAcreateserial \
-out api.example.crt -days 30 -extfile api.example.ext
openssl pkey -in api.example.key -pubout -outform DER | sha256sum
openssl req -in api.example.csr -pubkey -noout | \
openssl pkey -pubin -outform DER | sha256sum
openssl x509 -in api.example.crt -noout -subject -issuer -dates -ext subjectAltName
openssl verify -CAfile lab-ca.crt api.example.crt
완료 판단:
- SAN/subject/만료일 체크 완료
- key와 CSR 해시 일치
- verify 결과에서 chain 신뢰성 확인
공통 체크리스트
각 과제는 시작 전 date, hostname, 대상 명령의 현재 상태를 간단히 기록한 뒤 진행한다.
| 항목 | 성공 기준 |
|---|---|
| 상태 정리 | 작업 전후 id, status, 대상 명령 출력 캡처 |
| 안전 준수 | 데이터 보존 정책 확인 없이 삭제·재생성하지 않음 |
| 완결성 | 완료 조건의 각 항목을 텍스트로 증빙 |
| 시간 관리 | 각 문제를 7~10분 내에 반복 수행 |