LabHub
学习 学习路径 课程

存储与挂载

审计 fstab 并修好

在 LabHub 中继续学习

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

목표

망가진 fstab 을 규칙에 따라 감사하고, 고치고, 직접 검증 스크립트를 작성합니다.

왜 중요한가

fstab 은 시스템에서 가장 위험한 파일 중 하나입니다. 잘못 쓰면 부팅 도중 멈추고, 콘솔이 없는 클라우드 인스턴스라면 손쓸 방법이 없습니다. 특히 여섯 번째 필드인 pass(fsck 순서) 가 자주 틀립니다 — 루트가 아닌데 1 을 주거나, 네트워크 파일시스템에 0 이 아닌 값을 주면 부팅이 멈춥니다. 그리고 nofail 이 없으면 데이터 디스크 하나가 죽었을 때 서버 전체가 안 뜹니다. 실무에서는 재부팅 전에 반드시 검증합니다 — 재부팅해서 확인하는 것은 확인이 아니라 도박입니다.

이 실습에서 쓰는 규칙

단계

  1. /root/fstab 디렉터리를 만들고 /opt/fixtures/st-fstab/fstab.broken/root/fstab/work.tab 으로 복사하세요.
  2. 주석과 빈 줄을 제외한 각 항목을 장치,마운트지점,타입,옵션,dump,pass CSV 로 변환해 /root/fstab/fields.csv 로 저장하세요. 필드가 모자란 줄은 있는 것만 적으세요.
  3. 위 네 규칙을 어긴 줄 번호를 오름차순으로 한 줄에 하나씩 /root/fstab/audit.txt 에 적으세요. 줄 번호는 주석 포함 파일 맨 위부터 1로 셉니다.
  4. 모든 위반을 고친 /root/fstab/fixed.tab 을 만드세요. 원본의 정상 항목은 그대로 유지하고, 필드가 모자란 줄은 0 2 를 채우고, 중복된 마운트 지점 중 나중 것은 /var2 로 옮기고, 잘못된 pass 값은 규칙 B 에 맞게 고치세요.
  5. fixed.tab 에서 장치 경로(/dev/...)로 적힌 항목을 UUID=1a2b3c4d-0004-4000-8000-000000000004 표기로 바꾸세요.
  6. fixed.tab 에서 루트가 아닌 모든 로컬 항목의 옵션에 nofail 을 추가하고, /tmp 항목의 옵션에 noexec, nosuid, nodev 를 모두 추가하세요.
  7. fixed.tab 의 NFS 항목 옵션에 _netdev, soft, timeo=600, retrans=2 가 모두 들어가도록 하세요.
  8. /root/fstab/validate.sh 를 작성하세요. 첫 번째 인자로 fstab 파일 경로를 받아 규칙 A~D 를 검사하고, 위반이 없으면 종료 코드 0, 하나라도 있으면 0 이 아닌 값으로 끝나야 합니다. 채점기가 fixed.tab(통과해야 함)과 fstab.broken(실패해야 함) 양쪽으로 실행합니다.

참고

작업 사본 만들기

/root/fstab 디렉터리를 만들고 /opt/fixtures/st-fstab/fstab.broken/root/fstab/work.tab 으로 복사하세요.

원본 픽스처는 건드리지 말고 사본에서 작업하세요. 줄 수가 원본과 같아야 합니다.

필드를 CSV 로 분해

주석과 빈 줄을 제외한 각 항목을 장치,마운트지점,타입,옵션,dump,pass CSV 로 변환해 /root/fstab/fields.csv 로 저장하세요. 필드가 모자란 줄은 있는 것만 적으세요.

주석과 빈 줄은 제외합니다. awk 로 여섯 필드를 쉼표로 이어 붙이면 됩니다.

규칙 위반 줄 찾기

위 네 규칙을 어긴 줄 번호를 오름차순으로 한 줄에 하나씩 /root/fstab/audit.txt 에 적으세요. 줄 번호는 주석 포함 파일 맨 위부터 1로 셉니다.

네 가지 규칙을 하나씩 적용해 보세요. 줄 번호는 주석 포함 파일 맨 위부터 셉니다.

수정본 제출

모든 위반을 고친 /root/fstab/fixed.tab 을 만드세요. 원본의 정상 항목은 그대로 유지하고, 필드가 모자란 줄은 0 2 를 채우고, 중복된 마운트 지점 중 나중 것은 /var2 로 옮기고, 잘못된 pass 값은 규칙 B 에 맞게 고치세요.

필드가 모자란 줄은 채우고, 중복 마운트 지점은 하나를 다른 경로로 옮기고, 잘못된 pass 값은 규칙에 맞게 고치세요.

장치명을 UUID 표기로

fixed.tab 에서 장치 경로(/dev/...)로 적힌 항목을 UUID=1a2b3c4d-0004-4000-8000-000000000004 표기로 바꾸세요.

장치 경로로 적힌 항목이 하나 있습니다. UUID= 표기로 바꾸되 값은 임의로 정해도 됩니다.

안전 옵션 추가

fixed.tab 에서 루트가 아닌 모든 로컬 항목의 옵션에 nofail 을 추가하고, /tmp 항목의 옵션에 noexec, nosuid, nodev 를 모두 추가하세요.

루트가 아닌 로컬 항목에는 실패해도 부팅을 계속하는 옵션이, /tmp 에는 보안 옵션 세 가지가 필요합니다.

NFS 항목 작성

fixed.tab 의 NFS 항목 옵션에 _netdev, soft, timeo=600, retrans=2 가 모두 들어가도록 하세요.

네트워크 파일시스템에는 네트워크 준비를 기다리는 옵션이 필요하고, pass 는 검사하지 않는 값이어야 합니다.

검증 스크립트 작성

/root/fstab/validate.sh 를 작성하세요. 첫 번째 인자로 fstab 파일 경로를 받아 규칙 A~D 를 검사하고, 위반이 없으면 종료 코드 0, 하나라도 있으면 0 이 아닌 값으로 끝나야 합니다. 채점기가 fixed.tab(통과해야 함)과 fstab.broken(실패해야 함) 양쪽으로 실행합니다.

채점기가 정상 파일과 불량 파일 양쪽으로 실행합니다. 정상이면 0, 문제가 있으면 0 이 아닌 값으로 끝나야 합니다.