리눅스 시스템 기초 · 입문편 — 본문의 "N편"은 입문 과정 번호다. 번호별 글과 전체 250편 구성은 통합 로드맵에서 확인할 수 있다.

리눅스 시스템 기초 6 / 50 · Part 1. Linux 기본 구조
실습 환경: Rocky Linux 9 (10.0.0.200) · 비교: Ubuntu 22.04
이전 글: 5. Linux 시스템 호출(System Call)

🔗 심화 시리즈 — 「파일 · 권한 · 사용자 관리」
이 주제를 더 깊게 다룬 실무형 보안 시리즈: 02. Linux 파일 시스템과 파일의 관계 · 03. Linux 디렉터리 구조 이해 · 13. inode 이해하기

1. 들어가며

5편에서 cat /etc/passwd가 openat System Call을 호출하고, 커널이 VFS를 거쳐 권한을 검사한다는 것을 봤다. 이번 글은 그 VFS 아래에 있는 파일 시스템 을 다룬다.

"파일 시스템"이라는 말은 두 가지 뜻으로 쓰인다.

의미예다루는 글
데이터를 디스크에 저장하는 형식xfs, ext4, tmpfs이번 글 (6편)
/에서 시작하는 디렉터리 계층/etc, /var/log다음 글 (7편)

관제 관점에서 파일 시스템 구조를 알아야 하는 이유:

  • 로그 파티션이 가득 차면 로그가 기록되지 않는다. 증거가 사라지는 가장 흔한 원인이다.
  • /tmp, /dev/shm에 noexec가 없으면 공격자가 그 자리에서 파일을 내려받아 실행 할 수 있다.
  • /dev/shm 같은 메모리 기반(tmpfs) 경로는 재부팅하면 사라진다. 증적 수집 순서에 영향을 준다.

2. 핵심 개념

2-1. 저장 구조의 계층

물리 디스크 (/dev/sda)
  └ 파티션 (/dev/sda1, /dev/sda2)
      └ (선택) LVM — 여러 파티션을 묶어 유연하게 나눔 (/dev/mapper/rl-root)
          └ 파일 시스템 (xfs, ext4) — 데이터를 저장하는 형식
              └ 마운트 포인트 (/, /boot, /var) — 디렉터리 트리에 붙이는 위치

2-2. 주요 파일 시스템

종류저장 위치기본 사용처특징
xfs디스크RHEL / Rocky 기본대용량·병렬 쓰기에 강함, 축소 불가
ext4디스크Ubuntu 기본범용, 축소 가능
vfat디스크UEFI 부트 파티션 (/boot/efi)권한 개념 없음
tmpfs메모리/run, /dev/shm (배포판에 따라 /tmp)재부팅 시 내용 소멸
proc커널 (가상)/proc프로세스·커널 정보
sysfs커널 (가상)/sys장치·드라이버 정보

2-3. 파일 시스템의 기본 구성 요소

요소역할
Superblock파일 시스템 전체 정보 (크기, 블록 크기, 상태)
inode파일 하나의 메타데이터 (권한, 소유자, 크기, 시각, 데이터 위치) — 파일 이름은 없음
Directory entry"이름 → inode 번호" 연결표
Data block실제 파일 내용

inode는 14편에서 자세히 다룬다. 여기서는 "파일 이름은 디렉터리에, 메타데이터는 inode에, 내용은 데이터 블록에" 저장된다는 것만 기억하면 된다.


3. 동작 원리

Linux 파일 시스템 계층 — 디스크에서 경로까지

3-1. VFS의 역할

VFS(Virtual File System)는 커널 안의 공통 인터페이스 계층 이다. 프로그램은 open, read, write만 호출하면 되고, 그 파일이 xfs에 있든 ext4에 있든 메모리(tmpfs)에 있든 신경 쓰지 않는다. VFS가 경로를 해석해 어떤 파일 시스템에 속하는지 판단하고, 해당 파일 시스템 코드로 요청을 넘긴다. 권한 검사도 이 단계에서 이루어진다.

3-2. 마운트

마운트는 파일 시스템을 디렉터리 트리의 한 지점에 붙이는 작업이다.

  • 부팅 시 자동 마운트 목록: /etc/fstab
  • 현재 마운트 상태: findmnt, mount, /proc/self/mounts
  • 마운트 옵션으로 그 위치에서 허용할 동작 을 제한할 수 있다 (noexec, nosuid, nodev).

3-3. Page Cache

커널은 디스크에서 읽은 데이터를 메모리(Page Cache)에 보관해 두고, 쓰기도 바로 디스크에 쓰지 않고 모아서 쓴다. 그래서 전원이 갑자기 끊기면 마지막 쓰기가 유실될 수 있다. 증적 파일을 복사한 뒤 sync를 실행하는 이유다.


4. 실습

# 1) 블록 장치와 파일 시스템 구조
lsblk -f

# 2) 마운트된 파일 시스템과 사용률 (-T: 형식 표시)
df -hT

# 3) 마운트 트리와 옵션
findmnt
findmnt -o TARGET,SOURCE,FSTYPE,OPTIONS /tmp
findmnt -o TARGET,FSTYPE,OPTIONS /dev/shm

# 4) 부팅 시 마운트 설정
cat /etc/fstab

# 5) 커널이 지원하는 파일 시스템
cat /proc/filesystems | head -20

# 6) 파일 시스템 상세 정보
sudo xfs_info /            # Rocky (xfs)
# sudo tune2fs -l /dev/sda1 | head -20   # Ubuntu (ext4)

# 7) inode 사용률 (파일 개수 한도)
df -i

noexec 효과 확인 (실습용 VM에서만)

# /dev/shm에 noexec를 임시 적용
sudo mount -o remount,noexec,nosuid,nodev /dev/shm
findmnt -o TARGET,OPTIONS /dev/shm

# 테스트 스크립트
printf '#!/bin/bash\necho run\n' > /dev/shm/test.sh
chmod +x /dev/shm/test.sh
/dev/shm/test.sh           # → Permission denied 가 정상
rm /dev/shm/test.sh

영구 적용은 /etc/fstab에 옵션을 추가한다. 잘못 작성하면 부팅이 실패할 수 있으므로 수정 전 백업하고 findmnt --verify로 검증 한다.


5. 결과 분석

아래 출력은 형식 설명용 예시다.

① df -hT

Filesystem          Type   Size  Used Avail Use% Mounted on
/dev/mapper/rl-root xfs     17G  4.1G   13G  24% /
/dev/sda1           xfs    960M  250M  711M  27% /boot
tmpfs               tmpfs  1.8G     0  1.8G   0% /dev/shm
확인 항목기준이유
Use%80% 이상이면 주의, 90% 이상이면 조치100%가 되면 로그 기록 중단
/var가 /와 같은 파티션인지분리되어 있으면 안정적로그 폭증이 OS 전체를 멈추지 않게
Typetmpfs 경로 파악재부팅 시 사라지는 위치

② findmnt -o TARGET,OPTIONS /tmp

TARGET OPTIONS
/tmp   rw,nosuid,nodev,noexec,relatime

/tmp가 별도 마운트가 아니라 /의 일부라면 결과가 나오지 않는다. 이 경우 /tmp에는 /의 옵션(보통 noexec 없음)이 적용된다. 기본 설치 상태에서는 흔한 구성이며, 보안 점검 항목 이 된다.

③ df -i — 디스크 공간은 남았는데 IUse%가 100%면 파일을 더 만들 수 없다. 작은 파일을 대량으로 만드는 이상 행위나 로그 설정 오류의 신호일 수 있다.


6. 보안 관점

위협설명대응
임시 경로에서 실행웹 취약점으로 들어온 공격자가 /tmp, /dev/shm에 도구를 받아 실행noexec,nosuid,nodev
SUID 파일 반입사용자가 쓸 수 있는 파티션에 SUID 파일을 두고 권한 상승nosuid
로그 파티션 고갈로그 폭증(또는 의도적 대량 요청)으로 디스크를 채워 기록 중단/var 분리, logrotate, 용량 경보
메모리 기반 은닉tmpfs(/dev/shm)에 파일을 두면 재부팅 시 흔적 소멸재부팅 전 증적 수집
외부 저장장치USB로 파일 반출·반입dmesg/journalctl -k 장치 연결 기록

noexec는 완벽한 차단이 아니다. 인터프리터로 스크립트를 읽어 실행하는 방식(bash /tmp/script.sh)은 막지 못한다. 공격 비용을 높이는 여러 계층 중 하나로 이해해야 한다.


7. SOC / 보안관제 활용

7-1. 점검 명령어 모음

# 임시 경로 마운트 옵션
for d in /tmp /var/tmp /dev/shm; do
  printf '%-10s %s\n' "$d" "$(findmnt -no OPTIONS -T $d)"
done

# 디스크 사용률 90% 이상 파티션
df -hP | awk 'NR>1 && int($5)>=90 {print "[경고]", $6, $5}'

# 임시 경로의 실행 파일 (ELF)
sudo find /tmp /var/tmp /dev/shm -type f -exec file {} + 2>/dev/null | grep -i elf

# 최근 연결된 저장 장치
sudo journalctl -k --since "1 day ago" | grep -iE 'usb|sd[b-z]'

findmnt -T는 해당 경로가 실제로 속한 마운트를 보여주므로, /tmp가 별도 마운트가 아닐 때도 적용 옵션을 확인할 수 있다.

7-2. 분석 흐름

[Event]   웹 서버 access_log에서 파일 업로드 후 이상 요청
   ↓
[IOC]     /dev/shm 에 apache 소유 ELF 파일 발견 (file 명령으로 확인)
   ↓
[분석]    findmnt → /dev/shm noexec 없음 → 실행 가능했던 상태
          ps -ef | grep apache → 해당 파일 실행 여부
   ↓
[증적]    tmpfs는 재부팅 시 사라짐 → 먼저 파일 복사 + sha256sum
   ↓
[대응]    프로세스 종료, noexec 적용, 업로드 취약점 조치

8. 핵심 정리

  • 저장 구조: 디스크 → 파티션 → (LVM) → 파일 시스템 → 마운트 포인트.
  • Rocky는 xfs, Ubuntu는 ext4가 기본이다. /run, /dev/shm은 메모리 기반 tmpfs 다.
  • VFS 가 파일 시스템 차이를 감추고, 권한 검사를 수행한다.
  • 파일 이름은 디렉터리에, 메타데이터는 inode에, 내용은 데이터 블록에 있다.
  • /tmp, /var/tmp, /dev/shm에는 noexec,nosuid,nodev 를 권장한다 (완벽한 차단은 아님).
  • 로그 파티션이 가득 차면 증거가 사라진다. df -hT, df -i를 관제 점검 항목에 넣는다.
  • tmpfs 경로의 증거는 재부팅 전에 수집한다.

9. 다음 글

다음 글 「7. Linux 디렉터리 구조」 에서는 파일 시스템 위에 만들어지는 디렉터리 계층(FHS)을 다룬다. 각 디렉터리가 어떤 기준으로 나뉘는지, 그리고 침해사고 분석 시 어떤 디렉터리를 어떤 순서로 확인하는지 정리한다.


참고 자료

profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글