블로그워드프레스 FTP 없이 플러그인·테마 설치하기 — 권한 문제 완벽 해결

워드프레스 FTP 없이 플러그인·테마 설치하기 — 권한 문제 완벽 해결

워드프레스 관리자에서 테마나 플러그인을 설치하려고 하면 “FTP 접속 정보를 입력하세요”라는 창이 뜨는 경우가 있습니다. 매번 호스트·사용자명·비밀번호를 입력하자니 번거롭고, FTP 서버가 없으면 아예 설치 자체가 안 되죠. 이 글에서는 FTP 없이도 바로 설치되도록 설정하는 방법을 원인·해결책·부작용까지 정리합니다.

환경: Ubuntu 24.04 LTS + Nginx + PHP-FPM (이 사이트와 동일). Apache·LiteSpeed·다른 OS에서도 원리는 같습니다.


왜 FTP 입력창이 뜨는가?

워드프레스는 파일을 설치하기 전에 “내가(PHP 프로세스가) wp-content/plugins 폴더에 쓸 수 있나?”를 확인합니다. 쓸 수 없다고 판단하면 대체 방법으로 FTP를 제안하죠. 그래서 근본 원인은 파일 권한 불일치입니다.

두 가지 시나리오 중 하나입니다.

  1. 소유권 불일치 — 파일 소유자는 wpadmin인데 PHP-FPM은 www-data로 실행되어 쓰기 권한이 없는 경우
  2. FS_METHOD 미지정 — 워드프레스가 “직접 쓰기” 방식을 자동 감지하지 못해 FTP로 폴백

해결 방법 1 — wp-config.php에 FS_METHOD 추가

가장 간단한 방법. wp-config.php/* That's all, stop editing! */ 주석 위에 한 줄 추가합니다.

define( 'FS_METHOD', 'direct' );

이는 “FTP 건너뛰고 파일 시스템에 직접 써라”는 명령입니다. 저장 후 관리자 → 플러그인 → 새로 추가 → 설치를 시도하면 FTP 창이 사라져 있습니다.

⚠️ 이 설정만으로 충분하지 않을 수 있습니다. 파일 권한 자체가 안 맞으면 여전히 실패합니다. 그럴 땐 해결 방법 2로 이어집니다.


해결 방법 2 — 파일 소유권·권한 정리

① PHP-FPM이 어떤 사용자로 도는지 확인

ps aux | grep php-fpm | grep -v grep
# www-data  1234  ...  php-fpm: pool www
# www-data  1235  ...  php-fpm: pool www

# 또는 설정 파일에서 확인
grep -E "^(user|group)" /etc/php/8.4/fpm/pool.d/www.conf
# user = www-data
# group = www-data

② 소유권을 PHP 사용자와 같게 맞추기

# 소유자:그룹 일괄 변경 (워드프레스 루트 기준)
sudo chown -R www-data:www-data /home/wpadmin/public_html

# 또는, 관리자 계정을 www-data 그룹에 넣어 공동 쓰기
sudo usermod -aG www-data wpadmin
sudo chown -R wpadmin:www-data /home/wpadmin/public_html
sudo chmod -R g+w /home/wpadmin/public_html

③ 권한 체계 표준화

# 디렉토리는 755, 파일은 644
sudo find /home/wpadmin/public_html -type d -exec chmod 755 {} \;
sudo find /home/wpadmin/public_html -type f -exec chmod 644 {} \;

# wp-config.php는 더 엄격하게
sudo chmod 640 /home/wpadmin/public_html/wp-config.php

이 세 단계를 거치면 FTP 창이 완전히 사라지고 테마·플러그인 설치가 즉시 됩니다. 자동 업데이트도 정상 작동합니다.


해결 방법 3 — WP-CLI로 우회 설치

서버에 SSH 접속 권한이 있다면 WP-CLI가 가장 빠릅니다. FTP·웹 UI 둘 다 필요 없습니다.

# WP-CLI 설치 (한 번만)
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
sudo chmod +x /usr/local/bin/wp

# 플러그인 설치·활성화
cd /home/wpadmin/public_html
wp plugin install yoast-seo --activate
wp plugin install wp-super-cache --activate

# 테마 설치
wp theme install generatepress --activate

# 전체 업데이트
wp core update
wp plugin update --all
wp theme update --all

CLI는 수백 개의 사이트를 스크립트로 일괄 관리할 수 있어, 대행사·자동화 환경에서는 사실상 표준 도구입니다.


⚠️ 보안 주의사항 — “777이면 다 풀린다”는 함정

구글에 “워드프레스 FTP” 치면 “파일 권한을 chmod 777로 주면 해결”이라는 글이 많습니다. 절대 따라하지 마세요. 777은 “아무나 읽고 쓰고 실행”을 뜻합니다. 웹셸·악성 스크립트가 업로드되는 즉시 실행되어 사이트가 탈취됩니다.

  • ✅ 디렉토리 755, 파일 644가 표준
  • wp-config.php640 또는 600
  • ✅ 업로드 폴더에서 PHP 실행 차단(Nginx에서 location 제한)
  • chmod 777은 어떤 경우에도 사용 금지

업로드 폴더 PHP 실행 차단 예시 (Nginx):

location ~* /wp-content/uploads/.*\.php$ {
    deny all;
}

그래도 해결이 안 된다면 — 체크리스트

  • FS_METHOD 추가 후 브라우저 캐시 강제 새로고침 (Ctrl+F5)
  • ☐ PHP 사용자 확인 → 워드프레스 파일 소유자와 일치시키기
  • wp-content·wp-content/plugins·wp-content/themes·wp-content/uploads 쓰기 가능 여부
  • ☐ SELinux / AppArmor가 경로 차단 중인지 (Ubuntu 기본 AppArmor 활성)
  • ☐ 호스팅 방화벽·보안 정책으로 www-data가 특정 경로를 못 쓰게 막았는지
  • ☐ 테마·플러그인 zip 파일이 서버 메모리 한도보다 큰지 (upload_max_filesize, post_max_size)

php 설정 조정은 /etc/php/8.4/fpm/php.ini에서:

upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 300

# 수정 후 재시작
sudo systemctl restart php8.4-fpm

FAQ

Q. 공유 호스팅에서도 이 방법이 통하나요?

호스팅사마다 권한 정책이 달라 FS_METHOD direct만으로 해결 안 될 수 있습니다. cPanel/DirectAdmin 같은 관리 패널을 쓰면 보통 suPHP / suExec로 파일 소유자 = 웹서버 실행자가 자동 정렬되어 추가 설정 없이 됩니다. 그래도 안 되면 호스팅 지원센터에 “FTP 없이 플러그인 설치되게 해 주세요”라고 요청하세요.

Q. AWS EC2 / Lightsail에서도 같은 방법인가요?

Amazon Linux·Ubuntu·Bitnami 모두 원리는 동일합니다. Bitnami 이미지는 기본 사용자가 bitnami이고 PHP는 daemon으로 도는 등 특수 설정이 있으니 공식 문서를 참고하세요.

Q. FTP 창에 그냥 정보 입력하면 안 되나요?

동작은 하지만 매 설치마다 입력해야 하고, FTP는 평문 전송이라 보안상 권장되지 않습니다. 굳이 써야 한다면 반드시 SFTP(SSH 기반)를 선택하세요. 장기적으로는 이 글의 방법 1·2로 전환하는 것이 안전·편리합니다.

Q. Docker로 워드프레스 돌리는데도 같은 문제가 있나요?

네. Docker의 공식 WordPress 이미지는 내부에서 www-data 사용자로 도는데, 호스트 볼륨을 마운트하면 UID 불일치로 권한 문제가 납니다. --user 옵션 또는 docker-compose.ymluser: 지시어로 UID를 맞추세요. Docker Compose 설정은 Docker Compose 실전 가이드 참고.


마무리

정리하면: (1) FS_METHOD direct 추가 → (2) 파일 소유권 www-data로 정렬 → (3) 755/644 권한 표준화. 이 세 가지면 99%의 FTP 창 문제가 해결됩니다. 777로 모두 여는 손쉬운 해결은 보안 사고로 이어지니 반드시 권한 체계를 지키세요. 매번 FTP 정보를 치던 불편이 사라지면 플러그인 설치·업데이트 스트레스가 확연히 줄어듭니다.

이 글이 도움이 되셨다면 공유해주세요!

댓글 남기기

날꿀닷컴 도구 안내