리눅스 파일 퍼미션과 권한 오류 완벽 정리
“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 값으로 계산됩니다.
| 권한 | 숫자 | 설명 |
|---|---|---|
| 7 | rwx | 읽기+쓰기+실행 |
| 6 | rw- | 읽기+쓰기 |
| 5 | r-x | 읽기+실행 |
| 4 | r– | 읽기만 |
| 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.php | 640 | 민감한 설정파일 |
uploads/ | 775 | 이미지 업로드 가능하게 |
.htaccess | 644 | 웹서버에서 읽기 가능 |
절대 하지 말아야 할 설정:
chmod -R 777 /
이는 시스템 전체가 누구에게나 쓰기 가능하게 되어 보안이 무너집니다.
chown과 chmod의 차이 요약
| 구분 | 명령어 | 역할 |
|---|---|---|
| chown | sudo chown www-data:www-data 파일명 | 파일의 주인(사용자/그룹) 변경 |
| chmod | sudo 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로 통일