Русский (Russian)

Установка и защита phpMyAdmin на Linux VPS

2 min
VPS/VDS-хостинг

phpMyAdmin — удобный веб-интерфейс для MariaDB и MySQL, а также один из самых сканируемых адресов в Интернете. В этом руководстве две установки на ваш VPS Linux Infrawire: пакет apt с Apache и ручная установка за Nginx, а затем меры, которые защищают панель от ботов.

📋 Требования

  • VPS с Ubuntu 24.04 или Debian 12 и доступом root или sudo (IP-адрес и пароль root указаны в вашем личном кабинете)
  • Рабочий стек LAMP (вариант A) или LEMP (вариант B) с MariaDB
  • Ваш собственный публичный IP, далее ADMIN_IP

1. Вариант A: пакет apt с Apache

Bash
apt update apt install -y phpmyadmin php-mbstring php-zip php-gd php-curl

В установщике отметьте apache2 клавишей пробела (должна появиться звёздочка), затем ответьте «Да» на настройку базы через dbconfig-common и задайте пароль для внутренней учётной записи phpMyAdmin. После этого перезагрузите Apache:

Bash
phpenmod mbstring systemctl reload apache2

Теперь phpMyAdmin доступен по адресу http://VPS_IP/phpmyadmin.

2. Отдельный пользователь базы данных

Никогда не входите как root. В MariaDB на Ubuntu и Debian root использует аутентификацию unix_socket, и phpMyAdmin всё равно его отклонит: оставьте так и создайте обычную учётную запись.

Bash
mariadb
SQL
CREATE USER 'pmauser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD'; GRANT ALL PRIVILEGES ON appdb.* TO 'pmauser'@'localhost'; FLUSH PRIVILEGES; EXIT;

Выдавайте права только на те базы, которыми пользователь действительно управляет. Не включайте AllowNoPassword в конфигурации.

3. Скрытие URL и аутентификация (Apache)

Замените стандартный алиас случайным и создайте файл паролей:

Bash
SUFFIX=$(openssl rand -hex 6); echo "pma-$SUFFIX" sed -i "s#Alias /phpmyadmin#Alias /pma-$SUFFIX#" /etc/phpmyadmin/apache.conf htpasswd -c /etc/phpmyadmin/.htpasswd USER

Затем добавьте эти строки внутрь существующего блока <Directory /usr/share/phpmyadmin> в файле /etc/phpmyadmin/apache.conf:

Apache
1AuthType Basic 2AuthName 'Restricted area' 3AuthUserFile /etc/phpmyadmin/.htpasswd 4<RequireAll> 5 Require valid-user 6 Require ip ADMIN_IP 7</RequireAll>

Без <RequireAll> Apache принял бы любое из двух условий; с ним необходимы и пароль, и IP.

Bash
apache2ctl configtest && systemctl reload apache2

4. Вариант B: ручная установка за Nginx

Установите зависимости, затем скачайте последнюю версию с официального сайта phpMyAdmin (замените VERSION актуальным номером):

Bash
apt install -y nginx php-fpm php-mysql php-mbstring php-xml php-zip php-gd php-curl apache2-utils cd /tmp wget https://files.phpmyadmin.net/phpMyAdmin/VERSION/phpMyAdmin-VERSION-all-languages.tar.gz tar xzf phpMyAdmin-VERSION-all-languages.tar.gz mkdir -p /var/www/pma mv phpMyAdmin-VERSION-all-languages /var/www/pma/pma-SECRET cd /var/www/pma/pma-SECRET cp config.sample.inc.php config.inc.php openssl rand -hex 16

Замените pma-SECRET случайным именем. Отредактируйте config.inc.php и вставьте сгенерированное значение (32 символа) в качестве секрета:

PHP
$cfg['blowfish_secret'] = 'RANDOM_32_CHARS'; $cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';
Bash
mkdir -p /var/lib/phpmyadmin/tmp chown www-data:www-data /var/lib/phpmyadmin/tmp chmod 700 /var/lib/phpmyadmin/tmp chown -R root:www-data /var/www/pma chmod 640 /var/www/pma/pma-SECRET/config.inc.php htpasswd -c /etc/nginx/.htpasswd USER

Добавьте этот блок внутрь server { ... } вашего сайта. В Debian 12 сокет называется php8.2-fpm.sock, а не php8.3-fpm.sock:

Nginx
1location ^~ /pma-SECRET/ { 2 allow ADMIN_IP; 3 deny all; 4 auth_basic 'Restricted area'; 5 auth_basic_user_file /etc/nginx/.htpasswd; 6 root /var/www/pma; 7 index index.php; 8 9 location ~ \.php$ { 10 include snippets/fastcgi-php.conf; 11 fastcgi_pass unix:/run/php/php8.3-fpm.sock; 12 } 13}
Bash
nginx -t && systemctl reload nginx

5. Самый безопасный вариант: SSH-туннель

Если вы не хотите никакого публичного доступа, оставьте интерфейс доступным только с самого VPS и откройте туннель со своего компьютера:

Bash
ssh -L 8080:127.0.0.1:80 USER@VPS_IP

Пока сессия открыта, заходите на http://127.0.0.1:8080/pma-SECRET/. В Apache замените в блоке Require ip ADMIN_IP на Require local; в Nginx используйте allow 127.0.0.1;. Это заодно решает проблему меняющегося домашнего IP.

6. Проверка защиты

Bash
curl -sI http://VPS_IP/phpmyadmin | head -n 1 curl -sI http://VPS_IP/pma-SECRET/ | head -n 1

Первый запрос должен вернуть 404. Второй возвращает 403 с любого IP, кроме ADMIN_IP, а с вашего — 401, пока вы не введёте пароль базовой аутентификации. Также отдавайте phpMyAdmin только по HTTPS, иначе пароли передаются открытым текстом.

🛠️ Решение проблем

404 Not Found. Алиас или имя location не совпадает с введённым URL, либо веб-сервер не был перезагружен.

403 Forbidden для вас самих. Ваш публичный IP изменился. Обновите ADMIN_IP или перейдите на SSH-туннель.

«The mbstring extension is missing» или пустая страница. Установите php-mbstring, затем выполните phpenmod mbstring (Apache) или перезапустите php8.3-fpm (Nginx).

Access denied для root. Это ожидаемо и правильно. Входите под отдельным пользователем, созданным на шаге 2.


🎉 phpMyAdmin установлен, скрыт и ограничен: к вашим базам данных есть доступ только у вас.

Следите за последними предложениями, скидками и специальными акциями.

Смотреть акции

Мы используем файлы cookie

Аналитические cookie улучшают работу сайта. Данные не продаются третьим лицам. Подробнее в политике конфиденциальности.