9강 / 20강

권한 — 뚫려도 덜 잃도록

최소 권한 · 파일 권한 · 새어 나가는 .env

권한 — 뚫려도 덜 잃도록
완벽한 방어는 없습니다. 그래서 뚫렸을 때 피해를 줄이는 설계가 중요합니다.

지금까지는 '못 들어오게' 막는 방어였습니다. 하지만 보안의 냉정한 진실은 언젠가는 뚫린다는 것입니다. 그래서 성숙한 보안은 질문을 하나 더 합니다 — "뚫렸을 때, 공격자가 얼마나 멀리 갈 수 있는가?"

그 피해를 줄이는 핵심 원칙이 최소 권한(least privilege)입니다. 모든 것에 딱 필요한 만큼만 권한을 주는 거예요.

rwx — 리눅스 권한 읽는 법

파일마다 읽기(r)·쓰기(w)·실행(x) 권한이 세 부류에게 따로 있습니다.

-rw-r-----   1 root shadow   /etc/shadow
 │└┬┘└┬┘└┬┘
 │ │  │  └ 그 외 전원 (---)  ← 아무 권한 없음
 │ │  └─── 그룹     (r--)  ← 읽기만
 │ └────── 소유자   (rw-)  ← 읽고 쓰기
 └──────── 파일 종류

숫자로도 씁니다 — rw-=6, r--=4, ---=0 이라 640. 777 은 '누구나 읽고 쓰고 실행'이라 가장 위험합니다.

우리 서버의 중요한 파일들 권한을 봅니다. 위험한 게 있나요?
🖥️ 내 가상 서버 브라우저 안에서 실행 (계산용)
권한이 644 라 서버에 들어온 누구나 DB 비번을 봅니다.
🖥️ 내 가상 서버 브라우저 안에서 실행 (계산용)
.env 는 600, uploads 는 실행 안 되게 755 로.
🖥️ 내 가상 서버 브라우저 안에서 실행 (계산용)
권한 실습실 — 파일 권한을 바꿔 가며 '누가 읽을 수 있나'를 확인
불러오는 중…

권한 상승 — 공격자가 노리는 '지름길'

공격자가 낮은 권한으로 들어왔다면, 다음 목표는 root 가 되는 것입니다. 이를 권한 상승(privilege escalation)이라고 해요. 대표적 통로가 SUID 파일입니다 — '실행하면 파일 주인의 권한으로 도는' 특별한 표시죠.

정상 목록에 없는 게 끼어 있으면 위험 신호입니다.
🖥️ 내 가상 서버 브라우저 안에서 실행 (계산용)
🤔 확인 문제
.env 파일(DB 비밀번호 포함)의 올바른 권한은?
🤔 확인 문제
웹 앱이 쓰는 DB 계정에 DROP TABLE 권한을 주지 않는 것은 어떤 원칙인가요?