2026年11月12日

2026年11月12日

WordPress 파일 권한 권장값|디렉터리 755·파일 644·wp-config.php 설정과 소유자 확인

이 글은 일본어 원문을 현지화한 버전입니다. 일본어 원문 보기

WordPress의 파일 권한은 디렉터리를 755, 파일을 644로 하는 것이 기본입니다. 데이터베이스 접속 정보가 들어 있는 wp-config.php는 읽을 수 있는 사람을 더 좁힙니다. 숫자만이 아니라 파일의 소유자가 누구이고 PHP가 어떤 사용자로 동작하는지도 함께 확인하면, 정보 유출과 "업데이트가 되지 않는" 문제를 모두 막을 수 있습니다. 이 글의 권장값은 2026년 11월 시점에 WordPress 공식 문서 "WordPress 보안 강화하기(Hardening WordPress)"를 확인한 내용입니다.

권한 숫자 읽는 법

권한은 "소유자·그룹·기타 사용자" 3개 조로, 읽기(4)·쓰기(2)·실행(1)의 합계로 나타냅니다.

값 표기 의미
755 rwxr-xr-x 소유자는 읽기·쓰기와 디렉터리 안으로 들어가는 동작이 가능하고, 그 외에는 읽기와 디렉터리 안으로 들어가는 동작만 가능(디렉터리용)
644 rw-r--r-- 소유자는 읽기·쓰기, 그 외에는 읽기만 가능(파일용)
640 rw-r----- 소유자는 읽기·쓰기, 그룹은 읽기, 기타 사용자는 아무것도 할 수 없음
600 rw------- 소유자만 읽고 쓸 수 있음
440 / 400 r--r----- / r-------- 아무도 쓸 수 없고, 읽기는 소유자(와 그룹)만 가능

디렉터리의 "실행(x)"은 그 디렉터리 안으로 들어가는 권한입니다. 디렉터리에서 x를 빼면 안에 있는 파일을 읽을 수 없게 됩니다.

WordPress의 권장값

대상 권장값 보충
디렉터리 755(공용 서버에서 다른 사람에게 보이고 싶지 않다면 750) 공식 자동 업데이트에서도 디렉터리는 755로 맞춰집니다
파일 644(위와 같은 경우는 640) 공식 자동 업데이트에서도 파일은 644로 맞춰집니다
wp-config.php 나와 웹 서버만 읽을 수 있도록 좁힌다 공식 설명은 "일반적으로 400 또는 440". PHP가 파일 소유자와 같은 사용자로 동작하는 환경이라면 600이나 400으로도 동작합니다
.htaccess 644 고유주소(Permalinks) 설정 저장으로 WordPress가 다시 쓰게 하는 경우에는 PHP 실행 사용자가 쓸 수 있어야 합니다
wp-content/uploads 디렉터리 755·파일 644 PHP 실행 사용자가 쓸 수 있는 소유자로 해 둡니다

777(누구나 쓸 수 있음)로 할 필요는 없습니다. 공용 서버에서는 같은 서버의 다른 이용자가 파일을 고쳐 쓸 우려가 있습니다.

일부 렌탈 서버는 권장값을 독자적으로 정해 두고 있습니다(서버마다 PHP를 구동하는 방식이 다르기 때문입니다). 계약한 서버의 매뉴얼에 값이 적혀 있다면 그쪽을 우선하세요.

소유자에 대한 개념

공식 설명에 따르면 파일은 내 사용자 계정이 소유하고 내가 쓸 수 있게 합니다. WordPress가 쓰기를 해야 하는 파일(uploads, 테마 편집기를 사용하는 경우의 테마 등)만 웹 서버(PHP) 실행 사용자가 쓸 수 있도록 소유자나 그룹을 맞춥니다.

전체를 chown -R www-data:www-data처럼 웹 서버 사용자의 소유로 하면 PHP에서 모든 파일을 고쳐 쓸 수 있는 상태가 됩니다. 플러그인 취약점을 공격당했을 때 피해가 커지기 쉬우므로, 먼저 현재 상태를 확인한 뒤에 결정합니다.

플러그인이나 코어를 업데이트할 때 "접속 정보(FTP 호스트명·사용자명·비밀번호)"를 요구하는 것은 대부분 이 소유자 불일치가 원인입니다. WordPress는 PHP가 만든 파일의 소유자와 WordPress 파일의 소유자가 같을 때만 파일을 직접 고쳐 쓰는 방식을 선택합니다. 다르면 FTP를 통한 업데이트를 요구합니다. 권한을 777로 넓히는 것이 아니라 소유자를 맞춰서 해결합니다.

현재 설정 확인하기

SSH로 WordPress 디렉터리에 들어가 다음 명령으로 값과 소유자를 확인합니다. 경로는 자신의 환경에 맞게 바꾸세요.

cd /var/www/html

# wp-config.php의 값·소유자·그룹
stat -c '%a %U:%G %n' wp-config.php

# 기타 사용자가 쓸 수 있는 파일과 디렉터리 찾기
find . -perm -o=w ! -type l

# uploads 안에 있는 PHP 파일 찾기(보통은 존재하지 않음)
find wp-content/uploads -type f -name '*.php'

웹에서 접속했을 때의 PHP 실행 사용자는 서버 설정(PHP-FPM 풀의 user 등)이나 렌탈 서버의 매뉴얼에서 확인하세요. SSH로 로그인한 사용자와 같다고는 할 수 없습니다.

uploads 안에 처음 보는 PHP 파일이 있다면 변조를 의심하고, 삭제하기 전에 파일의 날짜와 내용을 기록해 둡니다.

권한을 일괄 수정하기

WordPress 디렉터리에서 실행합니다. 실행하기 전에 백업을 만들어 두세요.

cd /var/www/html

# 디렉터리는 755, 파일은 644로 맞춘다
find . -type d -exec chmod 755 {} +
find . -type f -exec chmod 644 {} +

# wp-config.php를 좁힌다(PHP가 파일 소유자로 동작하는 환경의 예)
chmod 600 wp-config.php

wp-config.php의 값은 환경에 맞춰 다음과 같이 고릅니다.

  • PHP가 파일 소유자와 같은 사용자로 동작한다(많은 공용 렌탈 서버, 사용자별 PHP-FPM): 600 또는 400
  • 소유자는 내 계정이고, 웹 서버는 그룹으로서 읽는다: 640 또는 440으로 하고 그룹을 웹 서버의 그룹으로 한다
# 예: 소유자는 본인, 그룹은 웹 서버(www-data)로 하고 640
sudo chgrp www-data wp-config.php
chmod 640 wp-config.php

설정한 뒤 사이트와 관리자 화면을 열어 표시와 로그인이 되는지 확인합니다. 하얀 화면이나 오류가 나타났다면 PHP가 wp-config.php를 읽지 못하고 있는 것입니다. 값을 644로 되돌린 다음 소유자와 그룹을 다시 확인하세요.

400이나 440으로 하면 wp-config.php에 쓰기를 하는 플러그인(캐시 설정을 기록하는 것 등)이 실패합니다. 그런 플러그인을 설정할 때만 일시적으로 쓰기를 허용합니다.

wp-config.php를 웹에서 읽지 못하게 하기

PHP가 정상적으로 동작하고 있다면 wp-config.php에 브라우저로 접속해도 내용은 표시되지 않습니다. PHP가 멈췄을 때 등에 소스가 표시되는 것을 막기 위해 웹 서버 쪽에서도 접근을 거부해 둡니다. Apache 2.4에서는 WordPress를 설치한 디렉터리의 .htaccess에 다음을 작성합니다(예전의 Order Deny,Allow / Deny from all은 Apache 2.2의 방식입니다).

<Files "wp-config.php">
    Require all denied
</Files>

자세한 절차는 "wp-config.php 접근을 거부하는 설정"에서 설명합니다.

.htaccess 자체는 Apache의 기본 설정(httpd.conf의 <Files ".ht*">)으로 이미 접근이 거부되어 있습니다.

공식 설명에 따르면 wp-config.php를 WordPress를 설치한 디렉터리의 한 단계 위로 옮길 수도 있습니다. WordPress는 같은 디렉터리에 wp-config.php가 없으면 한 단계 위의 디렉터리를 찾습니다. 다만 공식 문서도 효과가 작다는 의견과, 방법을 잘못하면 오히려 위험해지는 점을 언급하고 있습니다. 옮길 때는 한 단계 위의 디렉터리가 공개 디렉터리가 아닌지 확인하세요.

uploads에서 PHP를 실행하지 못하게 하기

uploads는 WordPress가 쓰기를 하는 디렉터리이므로 공격으로 파일이 놓이기 쉬운 곳입니다. 여기서 PHP가 실행되지 않도록 해 두면, 파일이 놓이더라도 동작하지 않습니다.

Apache 2.4에서는 wp-content/uploads/.htaccess를 만들어 다음을 작성합니다.

<FilesMatch "\.(php|phtml|phar)$">
    Require all denied
</FilesMatch>

.htaccess에서 Require를 사용하려면 서버 쪽 AllowOverride에서 허용되어 있어야 합니다. 허용되어 있지 않으면 500 오류가 나거나 설정이 무시됩니다. 작성한 뒤 https://example.com/wp-content/uploads/test.php 같은 존재하지 않는 PHP URL을 열어 403이 나오는지 확인합니다(404 그대로라면 설정이 적용되지 않은 것입니다).

Nginx에서는 server 블록 안에서 PHP를 처리하는 location ~ \.php$보다 앞에 다음을 둡니다. 정규 표현식 location은 위에서부터 순서대로 대조되고 처음 일치한 것이 사용되기 때문입니다.

location ~* ^/wp-content/uploads/.*\.(php|phtml|phar)$ {
    deny all;
}

설정을 바꿨다면 nginx -t로 구문을 확인한 뒤에 다시 읽어 들입니다.

참고로 WordPress의 미디어 업로드는 허용된 종류(이미지·PDF 등) 이외의 파일을 기본적으로 받지 않습니다. PHP 파일을 미디어로 업로드하는 것은 관리자 화면에서는 보통 할 수 없습니다.

주의점

  • 권한을 바꾸기 전에 파일과 데이터베이스의 백업을 만듭니다.
  • FTP 소프트웨어로 권한을 바꿀 때 서버에 따라서는 일괄 변경을 지원하지 않는 경우가 있습니다. 파일 수가 많을 때는 SSH의 find를 쓰는 편이 빠르고 누락도 막을 수 있습니다.
  • 업데이트할 때 FTP 접속 정보를 요구한다면 권한을 넓히지 말고 소유자를 확인합니다. "WordPress 권한 오류 해결 방법"도 참고하세요.
  • 정기적으로 위의 확인 명령(기타 사용자가 쓸 수 있는 파일, uploads 안의 PHP)을 실행하면 설정이 어긋나거나 변조된 것을 빨리 알아챌 수 있습니다.

WordPress에 대해 궁금한 점이 있으신가요? 이 사이트의 운영사는 일본에 있으며 일본어로 답변합니다. 문의하기(일본어)

お気軽にご相談ください

お見積りへ お問い合わせへ
▲