Linux 시스템 보안 기초 · 17/50편
이 글은
리눅스 시스템 기초·파일 · 권한 · 사용자 관리·서비스 · 프로세스 관리시리즈를 선행 학습으로 두고, 동일한 개념을 보안관제(SOC) 관점에서 한 단계 확장합니다.
World-Writable(other에 쓰기 허용, -rw-rw-rw- 등) 파일은 '아무 사용자나 내용을 바꿀 수 있는' 파일입니다. 설정 파일·스크립트가 이 상태면 권한 상승·지속성의 발판이 됩니다. 이번 편은 탐지와 예외 판단을 다룹니다.
위험의 크기는 파일 종류에 따라 다릅니다.
| 대상 | 위험 |
|---|---|
| 루트 소유 스크립트/설정 | 매우 높음(내용 변조→권한 상승) |
| cron으로 실행되는 스크립트 | 매우 높음(지속성+상승) |
| 일반 데이터 파일 | 낮음~중간 |
핵심은 '단순히 world-writable인가'가 아니라 '누가 실행/신뢰하는 파일인가'입니다.
root 소유, cron 실행 스크립트가 world-writable 이면:
일반 사용자 alice ──write──> /opt/backup.sh (rw-rw-rw-)
│ cron이 root로 실행
▼
alice가 넣은 코드가 root로 실행 → 권한 상승
other 쓰기 비트가 켜지면 소유자·그룹과 무관하게 누구든 내용을 덮어쓸 수 있습니다. 여기에 '그 파일이 높은 권한으로 실행됨'이 결합되면 권한 상승이 성립합니다. 대표 시나리오: root의 cron이 도는 스크립트가 world-writable → 일반 사용자가 악성 코드를 삽입 → cron이 root로 실행.
그래서 탐지 시 반드시 소유자·실행 맥락을 함께 봐야 합니다. world-writable 자체보다 조합이 위험합니다.
# world-writable '파일' 탐지 (심볼릭 링크 제외 권장)
sudo find / -xdev -type f -perm -0002 ! -path '/proc/*' 2>/dev/null
# world-writable 디렉터리 중 Sticky Bit 없는 것 (더 위험)
sudo find / -xdev -type d -perm -0002 ! -perm -1000 2>/dev/null
# 특정 위험 대상만: root 소유 world-writable 파일
sudo find / -xdev -type f -perm -0002 -user root 2>/dev/null
실습 환경에서 테스트 파일을 만들어 탐지한 실제 결과입니다. (실제 캡처)
$ find ww -perm -0002 -type f -ls
794673 0 -rw-rw-rw- 1 root root 0 Sep 25 12:37 ww/leak.sh
ww/leak.sh가 rw-rw-rw-(world-writable)이고 root 소유입니다. 이런 파일이 실행 경로에 있으면 즉시 권한을 644 또는 600으로 조여야 합니다: chmod o-w ww/leak.sh.
/tmp, /var/tmp, /dev/shm 등은 원래 world-writable이되 Sticky Bit로 보호됨(20편).점검 결과를 무조건 '취약'으로 보고하면 오탐이 됩니다. 정상 예외를 구분하는 것이 실력입니다.
find -perm -0002 스캔 후 예외 목록과 대조Wazuh SCA는 CIS 벤치마크 항목으로 world-writable 파일/디렉터리를 정기 점검합니다. SIEM 관점에서는 스캔 결과 자체보다, '기준선에 없던 world-writable 파일이 새로 생김'이 의미 있는 신호입니다. 특히 실행 경로의 신규 world-writable 파일은 권한 상승 준비 단계로 볼 수 있습니다.
[ ] find -perm -0002로 파일/디렉터리 스캔
[ ] 정상 예외(/tmp 등 Sticky) 구분
[ ] root 소유 world-writable 우선 조치
[ ] 실행 맥락(cron/서비스) 확인
다음 편에서는 18. SUID 파일 보안 점검 를 다룹니다. 권한 상승의 단골, SUID 파일을 정상과 비정상으로 구분하는 법을 봅니다.
본 실습은 격리된 테스트 VM(Rocky Linux / Ubuntu, VMware) 및 테스트 계정 환경을 기준으로 하며, 운영 서버를 대상으로 하지 않습니다. 실행 결과는 실제 캡처와 예시 출력을 명확히 구분해 표기합니다.