Permission denied 오류 해결법 – 리눅스 파일 권한 완전 정복

1. Permission denied, 왜 이 오류가 자꾸 나오는 걸까?

리눅스 서버를 다루다 보면 Permission denied라는 오류를 자주 마주칩니다. 파일을 실행하려 했는데, 폴더에 파일을 저장하려 했는데, 설정 파일을 수정하려 했는데 막히는 상황이 생깁니다.

이 오류는 무작위로 발생하는 것이 아닙니다. 리눅스는 모든 파일과 폴더에 누가 무엇을 할 수 있는지 정밀하게 권한을 설정합니다. 이 개념을 이해하면 Permission denied 오류를 스스로 해결할 수 있고, 서버 보안도 더 잘 이해하게 됩니다.

2. 리눅스 권한의 세 가지 주체

리눅스에서 모든 파일과 폴더는 세 부류의 사용자에 대해 권한을 따로 설정합니다.

소유자(Owner): 파일을 만든 사용자입니다. 가장 넓은 권한을 갖는 것이 일반적입니다.

그룹(Group): 소유자가 속한 그룹의 다른 멤버들입니다. 같은 팀이 함께 작업할 때 활용합니다.

기타(Other): 소유자도 아니고 그룹도 아닌 나머지 모든 사용자입니다.

ls -al 명령어로 파일 목록을 확인하면 맨 앞에 -rwxr-xr--처럼 표시됩니다. 맨 앞 문자는 파일 종류(-는 파일, d는 디렉토리), 그 다음 9자리가 세 주체의 권한을 나타냅니다. 앞 3자리가 소유자, 중간 3자리가 그룹, 마지막 3자리가 기타입니다.

3. rwx – 권한의 세 가지 종류

각 주체에게 줄 수 있는 권한은 세 가지입니다.

r (read, 읽기): 파일 내용을 읽거나 디렉토리 목록을 볼 수 있습니다.

w (write, 쓰기): 파일 내용을 수정하거나 디렉토리에 파일을 생성·삭제할 수 있습니다.

x (execute, 실행): 파일을 프로그램으로 실행하거나 디렉토리 안으로 진입할 수 있습니다.

-는 해당 권한이 없음을 나타냅니다.

예시를 통해 이해해 봅니다. rwxr-xr--는 소유자는 읽기·쓰기·실행 모두 가능, 그룹은 읽기와 실행만 가능, 기타는 읽기만 가능한 상태입니다.

4. 숫자로 권한 표현하기

리눅스 권한은 숫자(8진수)로도 표현합니다. r=4, w=2, x=1이며 세 값을 더해 표현합니다.

문자 표현계산숫자
rwx4+2+17
rw-4+2+06
r-x4+0+15
r–4+0+04
0+0+00

세 주체의 숫자를 나란히 쓰면 최종 권한이 됩니다. 755는 소유자 rwx(7), 그룹 r-x(5), 기타 r-x(5)입니다. 644는 소유자 rw-(6), 그룹 r–(4), 기타 r–(4)입니다.

5. chmod로 권한 바꾸기

**chmod(change mode)**는 파일이나 폴더의 권한을 변경하는 명령어입니다.

기본 형태입니다.

chmod 권한숫자 대상파일

644 권한을 적용하는 예시입니다.

chmod 644 index.html

스크립트 파일에 실행 권한을 추가하는 방법입니다.

chmod +x deploy.sh

폴더와 그 안의 모든 파일에 일괄 적용하려면 -R 옵션을 사용합니다.

chmod -R 755 /var/www/html

6. chown으로 소유자 바꾸기

**chown(change owner)**은 파일이나 폴더의 소유자와 그룹을 변경합니다.

소유자와 그룹을 함께 변경하는 형태입니다.

sudo chown 소유자:그룹 파일명

index.html의 소유자를 ubuntu, 그룹을 www-data로 바꾸는 예시입니다.

sudo chown ubuntu:www-data /var/www/html/index.html

폴더 전체에 일괄 적용할 때입니다.

sudo chown -R ubuntu:www-data /var/www/html

Nginx는 기본적으로 www-data 사용자 권한으로 실행됩니다. 웹 파일의 그룹을 www-data로 설정해야 Nginx가 정상적으로 파일을 읽을 수 있습니다.

7. 777을 쓰면 절대 안 되는 이유

검색하다 보면 Permission denied 해결법으로 chmod 777을 추천하는 글을 만납니다. 777은 소유자, 그룹, 기타 모든 사람에게 읽기·쓰기·실행 권한을 주는 설정입니다.

문제는 기타 사람(Other)에게도 쓰기와 실행 권한이 생긴다는 점입니다. 웹서버를 통해 서버에 접근하는 모든 사람이 잠재적으로 파일을 수정하거나 실행할 수 있게 됩니다. 악성 스크립트를 업로드해서 실행하거나 중요한 설정 파일을 덮어쓰는 것이 가능해집니다.

오류를 빠르게 없애기 위해 777을 쓰면 보안 구멍이 생깁니다. 올바른 해결법은 필요한 권한을 최소한으로 부여하는 것입니다.

8. 상황별 올바른 권한 설정값

상황권장 설정이유
웹 파일(HTML, CSS 등)644Nginx가 읽을 수 있고 외부에서 수정 불가
웹 디렉토리755진입은 가능하지만 외부에서 파일 생성 불가
SSH 개인키 파일600소유자만 읽기 가능
SSH 디렉토리700소유자만 접근 가능
실행 스크립트755소유자는 모두 가능, 다른 사람은 실행만 가능
설정 파일(비밀번호 포함)600소유자만 읽고 쓰기 가능

9. 정리 및 다음 단계

오늘 배운 핵심을 정리합니다.

  • 리눅스 권한은 소유자(Owner), 그룹(Group), 기타(Other) 세 주체에 대해 읽기(r=4), 쓰기(w=2), 실행(x=1)을 각각 설정합니다.
  • chmod로 권한을 변경하고 chown으로 소유자를 변경합니다.
  • 777은 절대 사용하면 안 됩니다. 보안상 큰 구멍이 생깁니다.
  • 웹 파일은 644, 디렉토리는 755, SSH 키는 600이 표준입니다.

다음 글에서는 서버 시간이 실제 시간과 달라지는 이유와 타임존·NTP 설정 방법을 알아보겠습니다.

댓글 남기기

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.