phpMyAdmin과 Adminer: 데이터베이스 패널
VDS에 데이터베이스용 웹 패널을 설치하고, 진입 통로가 되지 않도록 잠그는 방법을 알아봐요. 비밀번호 접근, 주소 제한, 대안을 다뤄요.
업데이트 2026년 8월 23일
웹 패널은 일회성 수정이나 테이블 확인에는 편리해요. 하지만 서버가 침해되는 가장 흔한 원인이기도 해요. /phpmyadmin URL은 자동으로 무차별 대입 공격을 당하고, 로그인 폼은 데이터에 대한 직접적인 접근을 허용하거든요.
Adminer: 단일 파일
Adminer는 단일 PHP 파일이며 MySQL, PostgreSQL, SQLite를 지원해요. 설치할 것이 없어요:
mkdir -p /var/www/tools
curl -L -o /var/www/tools/adminer.php \
https://github.com/vrana/adminer/releases/latest/download/adminer.php
chown www-data:www-data /var/www/tools/adminer.php
작동하는 PHP-FPM이 필요해요. 파일 이름은 알아보기 어려운 것으로 바꾸는 게 좋아요. 보호 수단은 아니지만 대량 스캔을 피할 수 있어요.
phpMyAdmin
apt install -y phpmyadmin
이 패키지는 Apache에 자동으로 연결돼요. Nginx의 경우 경로를 직접 지정해요:
location /db-panel {
alias /usr/share/phpmyadmin;
index index.php;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
}
필수 보호 조치
다음 세 가지 없이는 패널을 절대 설치하지 마세요.
내 주소에서만 접근:
location /db-panel {
allow 203.0.113.10;
deny all;
}
웹 서버 수준의 추가 비밀번호:
apt install -y apache2-utils
htpasswd -c /etc/nginx/.htpasswd admin
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
그리고 세 번째는 HTTPS 전용이에요: Let's Encrypt 인증서. 이게 없으면 데이터베이스 비밀번호가 평문으로 전송돼요.
최선의 선택: 패널을 외부에 노출하지 않기
주소가 동적이라면 패널을 아예 노출하지 마세요. SSH 터널을 설정하고 데스크톱 클라이언트(DBeaver, TablePlus, HeidiSQL)로 작업하세요:
ssh -L 3307:127.0.0.1:3306 root@YOUR_ADDRESS -N
자세한 내용은 원격 접근을 참고하세요. 이렇게 하면 SSH 외에는 외부에 아무것도 노출되지 않고, 패널이 아예 필요 없어져요.
흔한 실수
| 증상 | 원인 |
|---|---|
브라우저가 adminer.php를 다운로드함 | 이 경로에 PHP가 연결되지 않음 |
#1045 Access denied | 데이터베이스 사용자가 다른 호스트에 바인딩됨 |
| 대용량 덤프 가져오기가 중단됨 | upload_max_filesize와 max_execution_time이 너무 작음. 콘솔에서 가져오는 게 나음 |
로그에 /phpmyadmin 요청이 수천 건 | 일상적인 스캔 — 패널을 닫아야 함 |
| 패널은 작동하는데 사이트는 안 됨 | 패널의 과도한 요청으로 공유 PHP-FPM 풀이 고갈됨 |
대용량 데이터베이스를 웹 패널로 덤프하면 시간 초과가 발생해요. 실제 백업은 콘솔에서 일정에 따라 수행해요 — 데이터베이스 백업.