← 아티클 목록

Linux Permission denied 해결 — 권한·소유자·실행비트 좁히기

2026-08-10#linux#권한#트러블슈팅

bash: ./deploy.sh: Permission denied. 권한 에러는 chmod 777로 때려서 넘기지 말고, 세 가지(권한 비트·소유자·실행비트) 중 무엇이 막았는지를 좁혀야 합니다. 대충 풀면 보안 구멍만 남습니다.

1단계 — 누가, 무엇을 가졌나

로컬 터미널
ls -l deploy.sh
id              # 내 uid·gid·소속 그룹
OUTPUT
-rw-r--r-- 1 root root 412 Aug 10 09:00 deploy.sh

ls -l 의 맨 앞 10자리를 읽습니다: -(파일) + rw-(소유자) + r--(그룹) + r--(기타). 위 예시는 누구에게도 x(실행)가 없음 → 실행 자체가 불가. 소유자도 root 인데 내가 root가 아니면 그룹/기타 권한만 적용됩니다.

2단계 — 원인별로 가른다

증상원인해결
Permission denied 실행 시x 비트 없음chmod +x deploy.sh
읽기/쓰기 거부내 uid·gid가 rwx 대상 아님소유자/그룹 조정 또는 적정 권한
파일 권한은 맞는데 거부상위 디렉터리에 x 없음경로상 모든 디렉터리에 x 필요
root 소유 파일 수정 거부소유자 불일치sudo 또는 chown

상위 디렉터리 x 비트 함정이 가장 안 보입니다. 파일이 rwxr-xr-x 라도 그 디렉터리에 들어갈(x) 권한이 없으면 접근 자체가 막힙니다.

로컬 터미널
namei -l /opt/myapp/deploy.sh    # 경로 전체의 권한을 한 줄씩

3단계 — 최소 권한으로 고친다

로컬 터미널
chmod +x deploy.sh                  # 실행만 필요하면 x만 추가
sudo chown app:app deploy.sh        # 소유자를 실제 사용자로
chmod 750 deploy.sh                 # 소유자 rwx, 그룹 rx, 기타 차단

777은 거의 항상 틀린 답입니다. "누가 무엇을 해야 하는가"에 맞춰 최소로 줍니다.

순서 요약

로컬 터미널
ls -l <파일>        # 권한·소유자
id                  # 내 신원
namei -l <경로>      # 상위 디렉터리 x까지
chmod / chown       # 최소 권한으로 교정

권한 비트·소유자·setuid·디렉터리 x의 동작을 직접 실험하며 익히는 실습은 리눅스 트랙에서 회원가입 없이 무료로 할 수 있습니다.