리눅스 파일 퍼미션과 권한 오류 완벽 정리

“Permission denied” 해결 가이드

서버에서 워드프레스나 도커를 다루다 보면 이런 오류를 자주 만납니다 👇

Permission denied
Cannot open file for writing
Unable to upload file

이 문장은 99%의 경우, 리눅스 파일 권한(Permission) 문제입니다.
이번 글에서는 권한의 구조, 명령어, 그리고 실제 오류 해결법을 단계별로 알아봅니다.


파일 퍼미션(Permission)이란?

리눅스에서는 모든 파일과 폴더에 대해
누가 읽고(read), 쓰고(write), 실행(execute) 할 수 있는지를 지정합니다.

예를 들어 아래처럼 표시됩니다 👇

-rw-r--r--

이 문자열은 10개의 문자로 구성되어 있고,
각 문자의 의미는 다음과 같습니다.

구분의미설명
첫 번째 문자파일 타입-(일반 파일), d(디렉토리)
다음 3개 (rw-)소유자 권한읽기, 쓰기 가능
다음 3개 (r--)그룹 권한읽기만 가능
마지막 3개 (r--)기타 사용자 권한읽기만 가능

chmod 숫자 표기법

권한은 r=4, w=2, x=1 값으로 계산됩니다.

권한숫자설명
7rwx읽기+쓰기+실행
6rw-읽기+쓰기
5r-x읽기+실행
4r–읽기만
0접근 불가

예를 들어:

chmod 755 index.php

→ 소유자는 읽기/쓰기/실행 가능,
→ 그룹과 다른 사용자는 읽기/실행만 가능.


chown — 파일 소유자 변경

파일의 주인(owner) 이 잘못되어 있어도 권한 오류가 납니다.

도커나 워드프레스에서 이런 문제가 자주 발생하죠.

chown 사용자이름:그룹이름 파일명

예시:

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

→ Nginx/Apache가 사용하는 계정(www-data)에게 권한을 부여하는 명령입니다.


대표적인 권한 오류와 해결 방법

오류 메시지원인해결 명령어
Permission denied파일 쓰기 권한 없음sudo chmod 755 파일명
Could not open upload directory업로드 폴더에 쓰기 권한 없음sudo chown -R www-data:www-data wp-content/uploads
Permission denied: public_html폴더 실행 권한 누락sudo chmod 755 -R public_html
Failed to connect to socket /var/run/docker.sock도커 소켓 접근 권한 없음sudo chmod 666 /var/run/docker.sock
wp-config.php is not writable설정 파일 잠금 상태sudo chmod 640 wp-config.php

워드프레스에서 자주 발생하는 권한 오류

① 플러그인/테마 설치 시 오류

Unable to create directory wp-content/uploads/2025/11.
Permission denied

원인: 웹서버 계정이 해당 폴더에 쓰기 권한 없음
해결:

sudo chown -R www-data:www-data /var/www/html/wp-content
sudo chmod -R 755 /var/www/html/wp-content

② 파일 수정 저장 안 됨

wp-config.php is not writable

원인: 설정 파일이 읽기 전용
해결:

sudo chmod 640 /var/www/html/wp-config.php

→ 이 파일은 보안을 위해 “읽기만” 가능해야 합니다.


③ 도커 컨테이너 볼륨 마운트 시 “Permission denied”

도커 볼륨(./html:/usr/share/nginx/html)을 설정했는데
호스트 폴더의 권한이 root로 되어 있다면,
컨테이너 내부에서 파일을 쓸 수 없습니다.

해결:

sudo chmod -R 777 ./html

(임시방편)

혹은 컨테이너 실행 시 사용자 권한 지정:

docker run -u $(id -u):$(id -g) ...

보안상 안전한 권한 설정 가이드

파일/폴더권장 권한설명
/var/www/html/755웹 루트 디렉토리
wp-content/755테마·플러그인 폴더
wp-config.php640민감한 설정파일
uploads/775이미지 업로드 가능하게
.htaccess644웹서버에서 읽기 가능

절대 하지 말아야 할 설정:

chmod -R 777 /

이는 시스템 전체가 누구에게나 쓰기 가능하게 되어 보안이 무너집니다.


chown과 chmod의 차이 요약

구분명령어역할
chownsudo chown www-data:www-data 파일명파일의 주인(사용자/그룹) 변경
chmodsudo chmod 755 파일명권한(읽기/쓰기/실행) 변경

간단히 말하면 👇

chown은 “누구 소유냐”
chmod는 “무엇을 할 수 있느냐”


실무 팁 — 권한 오류가 반복된다면?

  • Docker 볼륨이 있는 경우,
    :z 옵션으로 SELinux 컨텍스트 문제를 방지할 수 있습니다. ./html:/usr/share/nginx/html:z
  • EC2에서 ubuntu 계정으로 작업 중이라면,
    웹서버가 사용하는 www-data 그룹에 계정을 추가: sudo usermod -aG www-data ubuntu → 이후 uploads 폴더 접근이 훨씬 부드러워집니다.

마무리

리눅스에서의 권한 설정은
보안과 안정성의 핵심이자,
워드프레스·도커에서 발생하는 대부분의 “에러의 근본 원인”입니다.

요약하자면 👇

  • chmod → 권한 설정
  • chown → 소유자 변경
  • 777은 응급조치, 755가 기본, 640은 보안용
  • 도커/워드프레스 권한은 반드시 www-data로 통일