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

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

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

1. 들어가며

1편에서 /etc, /var/log, /home, /tmp, /proc을 관제 핵심 경로로 소개했다. 이번 글은 범위를 넓혀 Linux 디렉터리 전체가 어떤 원칙으로 나뉘어 있는지(FHS) 를 정리하고, 이를 바탕으로 침해사고 분석 시 어떤 순서로 디렉터리를 확인하는지 까지 연결한다.

디렉터리 구조를 원칙으로 이해하면 처음 보는 서버에서도 "설정은 어디에, 로그는 어디에, 이 프로그램은 왜 여기에 있지?"를 빠르게 판단할 수 있다. 특히 정상적으로는 파일이 생기지 않아야 할 위치에 파일이 있는 것 자체가 중요한 탐지 단서가 된다.


2. 핵심 개념

2-1. FHS (Filesystem Hierarchy Standard)

FHS는 Linux Foundation이 관리하는 디렉터리 배치 표준 이다. 배포판마다 약간의 차이는 있지만, 대부분 이 표준을 따른다. 매뉴얼 man hier에서도 요약을 볼 수 있다.

2-2. 주요 디렉터리 상세

디렉터리역할대표 내용관제 포인트
/boot부팅 파일vmlinuz-*, initramfs-*, grub2/커널·부트 설정 변조
/dev장치 파일sda, null, tty*, shm//dev 안의 일반 파일(은닉 의심)
/etc시스템 설정passwd, shadow, ssh/, sudoers설정 변조, 지속성
/home사용자 홈/home/roror사용자 행위 흔적
/rootroot 홈.bash_history, .ssh/관리자 계정 흔적
/usr프로그램·라이브러리bin/, sbin/, lib64/, share/시스템 바이너리 교체
/usr/local로컬 설치 프로그램직접 빌드한 프로그램패키지 관리 밖 프로그램
/opt추가 패키지상용 소프트웨어출처 확인
/var변하는 데이터log/, lib/, spool/, tmp/, www/로그·예약작업·웹 루트
/tmp임시 파일모든 사용자 쓰기 가능공격 도구 저장
/run실행 상태 (tmpfs)PID 파일, 소켓재부팅 시 소멸
/proc, /sys커널 가상 FS프로세스·장치 정보실시간 상태
/srv서비스 데이터웹·FTP 데이터 (선택)
/mnt, /media임시·이동식 마운트USB, ISO외부 저장장치
/lib/modules커널 모듈$(uname -r)/kernel/모듈 출처(2편)

2-3. /usr 병합 (usrmerge)

Rocky Linux 9, Ubuntu 22.04 이후는 /bin, /sbin, /lib, /lib64가 각각 /usr/bin, /usr/sbin, /usr/lib, /usr/lib64를 가리키는 심볼릭 링크 다. 과거 자료에서 /bin/ls와 /usr/bin/ls를 별개로 설명하는 경우가 있는데, 지금은 같은 파일이다.


3. 동작 원리

FHS 디렉터리 분류와 침해 분석 확인 순서

FHS는 디렉터리를 두 기준으로 나눈다.

기준의미
Shareable / Unshareable여러 서버가 네트워크로 공유할 수 있는가, 이 서버 전용인가
Static / Variable관리자 개입 없이는 변하지 않는가, 운영 중 계속 변하는가

이 분류가 관제에 주는 의미는 "어디가 변하는 것이 정상인가" 를 알려준다는 점이다.

  • Static 영역(/usr, /etc, /boot)이 변경 → 패키지 업데이트나 관리자 작업이 아니라면 변조를 의심한다.
  • Variable 영역(/var/log, /run) 은 계속 변하는 것이 정상이다. 대신 변하지 않거나 줄어드는 것 (로그 크기 감소, 기록 공백)이 이상 징후다.

4. 실습

# 1) 최상위 구조와 usrmerge 확인
ls -l /
man hier            # FHS 요약 매뉴얼

# 2) 디렉터리별 용량 (최상위)
sudo du -xh --max-depth=1 / 2>/dev/null | sort -h

# 3) /var 하위 구조
ls -l /var
sudo du -sh /var/log /var/lib /var/cache 2>/dev/null

# 4) 최근 24시간 내 변경된 /etc 파일
sudo find /etc -type f -mtime -1 -ls

# 5) /dev 안의 일반 파일 (정상적으로는 거의 없음)
sudo find /dev -type f 2>/dev/null

# 6) 패키지 관리 밖의 실행 파일 — /usr/local, /opt
ls -la /usr/local/bin /opt

# 7) 패키지 무결성 검증 (RHEL 계열)
sudo rpm -Va 2>/dev/null | grep -E '^..5' | head
# Ubuntu: sudo apt install debsums && sudo debsums -s

5. 결과 분석

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

① ls -l /

lrwxrwxrwx.   1 root root    7 ... bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 ... boot
drwxr-xr-x.  81 root root 8192 ... etc
drwxrwxrwt.  12 root root 4096 ... tmp
표시의미
l + ->심볼릭 링크 (usrmerge)
drwxrwxrwt/tmp — 모두 쓰기 가능 + Sticky Bit(t)
권한 뒤의 .SELinux 보안 컨텍스트가 있음 (RHEL 계열, 47편)

② rpm -Va 결과 읽기

S.5....T.  c /etc/ssh/sshd_config
..5....T.    /usr/bin/xxx
위치문자의미
1번째S크기(Size)가 패키지 원본과 다름
3번째5내용 해시가 다름
8번째T수정 시각이 다름
파일 앞c설정 파일 (변경이 흔함)

c가 붙은 설정 파일은 관리자가 수정하는 것이 일반적이지만, c가 없는 /usr/bin 바이너리의 해시가 다르다면 시스템 명령어가 교체되었을 가능성을 의심해야 한다.


6. 보안 관점

위치공격자가 노리는 이유대표 흔적
/etc계정·권한·서비스 설정을 바꿔 재접속 경로 확보passwd 새 계정, sudoers.d/ 새 파일
/var/spool/cron, /etc/cron.*주기적 재실행모르는 스크립트 등록
/etc/systemd/system부팅 시 자동 실행 서비스새 .service 파일
/usr/bin, /usr/sbinps, ss 같은 명령어를 교체해 결과를 숨김rpm -Va 해시 불일치
/tmp, /var/tmp, /dev/shm권한 없는 계정도 쓰기 가능숨김 디렉터리, ELF 파일
/dev장치 파일 사이에 일반 파일을 숨김find /dev -type f
/var/www웹 루트에 웹셸 업로드최근 생성된 .php, .jsp

7. SOC / 보안관제 활용

7-1. 휘발성 순서에 따른 확인 순서

증적은 사라지기 쉬운 것부터 수집하는 것이 원칙이다(RFC 3227의 휘발성 순서 개념).

순서대상이유대표 명령
1/proc, /run, /dev/shm재부팅·프로세스 종료 시 소멸ps, ss, ls -l /proc/*/exe
2/tmp, /var/tmp정리 작업(tmpfiles)으로 삭제될 수 있음ls -la, find -newer
3/var/log로테이션·덮어쓰기사본 + sha256sum
4/etc, cron, systemd변조 여부find -mtime, rpm -Va
5/home, /root사용자 흔적history, .ssh
6/usr, /opt, /boot바이너리 무결성rpm -Va

7-2. 기준값(Baseline) 비교

평소 상태를 저장해 두면 이상 여부를 빠르게 판단할 수 있다.

# 평소 상태 저장
sudo find /etc /usr/bin /usr/sbin -type f -exec sha256sum {} + > /root/baseline_$(date +%F).txt

# 사고 시 비교
sudo find /etc /usr/bin /usr/sbin -type f -exec sha256sum {} + > /tmp/now.txt
diff <(sort -k2 /root/baseline_2026-09-23.txt) <(sort -k2 /tmp/now.txt)

이 방식을 체계화한 것이 40편 이후에 다룰 파일 무결성 점검(Tripwire, AIDE, Wazuh FIM) 이다.


8. 핵심 정리

  • FHS는 디렉터리를 Shareable/Unshareable × Static/Variable 로 나눈다.
  • Static 영역(/usr, /etc, /boot) 변경은 변조 의심, Variable 영역(/var/log)은 줄어들거나 멈추는 것 이 이상 징후다.
  • 현재 배포판은 /bin, /sbin, /lib가 /usr 하위의 링크다(usrmerge).
  • 공격자는 /etc(설정), cron·systemd(지속성), /usr/bin(명령어 교체), /tmp(작업 공간)를 노린다.
  • rpm -Va로 패키지 원본 대비 변경된 파일을 찾을 수 있다.
  • 증적은 휘발성이 높은 순서(/proc → /tmp → /var/log → /etc → /home → /usr) 로 수집한다.

9. 다음 글

다음 글 「8. Linux 부팅 과정」 에서는 전원을 켠 순간부터 로그인 화면까지 /boot, GRUB, 커널, systemd가 어떤 순서로 동작하는지 정리한다. 부팅 단계별로 공격자가 끼어들 수 있는 지점과, 예상치 못한 재부팅을 관제에서 어떻게 확인하는지도 함께 다룬다.


참고 자료

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

0개의 댓글