커널 가상 파일시스템 (proc/sys/dev/tmpfs/cgroup)

lv2dev·2025년 11월 6일

Linux

목록 보기
6/7

TL;DR

  • 커널 가상 FS = 디스크 아님. 커널 상태/제어를 파일처럼 노출하는 특수 마운트임
  • 대표: procfs(/proc), sysfs(/sys), devtmpfs(/dev), devpts(/dev/pts), tmpfs(/run,/dev/shm,/tmp), cgroupfs(/sys/fs/cgroup)
  • 퍼미션이 일반 파일과 의미 다름. --w--w--w- 떠도 보안취약 아님일 수 있음
  • 백업/감사/스캔 시 기본 제외(prune) 추천. false positive 줄어듦
  • chmod/chown고치려 들지 말 것. 커널 인터페이스 망가짐 위험 있음

커널 가상 FS가 뭐임

  • 디스크에 저장 안 함. 커널 메모리/상태파일 인터페이스로 노출함
  • 앱은 open/read/write로 접근 → 커널이 즉시 계산해서 응답함
  • 그래서 파일 크기 0인데 읽으면 데이터 나오는 케이스 흔함

대표 종류 요약

  • procfs(/proc)

    • /proc/<pid>/… = 프로세스 상태
    • /proc/sys/* = 커널 튜닝(sysctl) 엔트리. echo로 값 바꾸기도 함
  • sysfs(/sys)

    • 디바이스/드라이버 트리, 전원/LED/블록장치 등 하드웨어 속성/제어
    • echo 한 줄이 실제 하드웨어 동작 바꿈. 신중하게 다룰 것
  • devtmpfs(/dev)

    • 커널이 디바이스 노드 자동 생성. udev가 속성/권한 덮어씀
  • devpts(/dev/pts)

    • 가상 터미널(pseudo TTY)용
  • tmpfs(/run, /dev/shm, 종종 /tmp)

    • 메모리 기반 임시 FS. 재부팅 시 휘발
    • 디렉터리는 보통 1777(world-writable + sticky) 정상임
  • cgroupfs(/sys/fs/cgroup)

    • cgroup v1/v2 리소스 제어 인터페이스. 권한이 특이하게 보일 수 있음
  • (참고) pstore, securityfs, tracefs 등도 있음

왜 퍼미션이 이상하게 보임?

  • --w--w--w- 같은 거 보이면 보안사고 같아 보이나, 의미가 다름
  • 커널이 특정 쓰기 패턴만 허용하거나, 컨트롤 FD 기대함. 누구나 맘대로 쓰기 아님
  • 예) /sys의 컨트롤 파일은 한 줄 쓰기만 받음. 잘못 쓰면 커널 동작 바뀜 → 테스트 금지

스캔/백업 때 주의 (false positive 줄이는 법)

  • /proc /sys /dev /run/user/*/gvfs /snap /var/lib/docker /var/lib/containers제외 권장

  • find 원라이너(파일만 world-writable):

    find / -xdev \
      \( -path /proc -o -path /sys -o -path /dev -o -path '/run/user/*/gvfs' -o -path /var/lib/docker -o -path /var/lib/containers -o -path /snap \) -prune -o \
      -type f -perm -0002 -printf '%M %u:%g %m %TY-%Tm-%Td %TH:%TM %p\n' 2>/dev/null
  • rsync 백업 예외:

    rsync -aAX --exclude={"/proc/*","/sys/*","/dev/*","/run/*","/tmp/*","/mnt/*","/media/*","/lost+found"} / DEST/
  • tar 백업 예외:

    tar --one-file-system --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run -cpf backup.tar /

“find 에러 난무” 왜 그럼?

  • /proc실시간이라 스캔 중 프로세스/FD 사라짐 → No such file 정상

  • 조용히 돌리려면:

    find / -ignore_readdir_race ... 2>/dev/null

진짜로 가상 FS인지 확인법

# 마운트 타입 보기
findmnt -t proc,sysfs,tmpfs,devtmpfs,devpts,cgroup,cgroup2

# 특정 경로 파일시스템 타입
stat -f -c '%T %n' /proc /sys /dev /run /tmp

# 커널이 아는 FS 타입 리스트
cat /proc/filesystems

변경은 어떻게 하냐 (안전 루트)

  • sysctl 경로/etc/sysctl.conf / /etc/sysctl.d/*.conf 로 설정하고 sysctl -p
  • /proc/sys/* / /sys/*에 직접 echo 쓰는 건 일시적/테스트용으로만
  • 디바이스 노드 권한 바꿀 땐 udev 규칙으로 관리(직접 chmod는 비권장)

컨테이너/네임스페이스 팁

  • 컨테이너 안 /proc /sys분리된 뷰일 수 있음
  • 호스트 커널 건드리는 설정은 제한됨. 권한 상승 옵션(capabilities) 열려 있으면 영향 커질 수 있음 → 보안 정책 점검 요망

/tmp, /dev/shm 체크

  • 보통 tmpfs + 1777이 정석임

  • 디렉터리가 world-writable이면 sticky(1) 꼭 있어야 함:

    ls -ld /tmp /dev/shm
    # 기대: drwxrwxrwt …  /tmp  (맨 끝 t)

감사 체크리스트 (현업용)

  • world-writable 파일은 디스크 영역에서만 점검
  • 디렉터리 world-writable는 sticky 비트(1777) 필수
  • /proc /sys /dev 퍼미션 보고 취약 판정 금지
  • sysctl/sysfs 변경은 영속 설정 파일로 관리
  • 백업/검색/스캔 툴에 가상 FS 제외 규칙 기본 포함

치트시트

# 로컬 FS만(EXT/XFS/BTRFS) world-writable 파일 찾기
findmnt -rn -t ext2,ext3,ext4,xfs,btrfs -o TARGET \
| while read m; do
    find "$m" -xdev \
      \( -path /proc -o -path /sys -o -path /dev -o -path '/run/user/*/gvfs' \) -prune -o \
      -type f -perm -0002 -printf '%M %u:%g %m %p\n'
  done

# 특정 경로가 가상 FS인지 판별(one-liner)
stat -f -c '%T' "$PATH" | grep -Eq 'proc|sysfs|tmpfs|devtmpfs|devpts|cgroup' && echo vfs || echo disk

결론

  • 커널 가상 FS는 보여지는 파일이 곧 디스크 파일이 아님
  • 퍼미션/사이즈/타임스탬프 해석이 일반 파일과 다름
  • 스캔/감사/백업에선 제외하고 디스크 데이터에 집중하는 게 정답
  • 설정 변경은 공식 경로(sysctl/udev 등) 로만. 직접 chmod/echo 남발 금지
profile
언제나 레벨업을 하고 싶은 영원한 lv1

0개의 댓글