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 비밀번호 포함)의 올바른 권한은?해설 600 이 정답입니다. DB 비밀번호가 든 파일을 644 로 두면 서버에 들어온 아무 계정이나 읽을 수 있어요. 최소 권한 — 주인만 읽게 합니다.
🤔 확인 문제
웹 앱이 쓰는 DB 계정에 DROP TABLE 권한을 주지 않는 것은 어떤 원칙인가요?
해설 최소 권한입니다. 웹 앱은 조회·삽입만 하면 되므로 DROP 권한이 필요 없어요. 권한을 안 주면, SQL 인젝션(11강)이 성공해도 공격자가 표를 통째로 지우지는 못합니다.