Установка phpMyAdmin и безопасный доступ
Пошаговая установка phpMyAdmin на Apache и Nginx, настройка SSL, управление пользователями, ограничение по IP и усиление безопасности.
Содержание
Установка phpMyAdmin и безопасный доступ
phpMyAdmin — это приложение с открытым исходным кодом на PHP для управления базами данных MySQL и MariaDB через веб-браузер. С его помощью можно создавать базы данных, управлять таблицами, выполнять SQL-запросы и настраивать права пользователей через графический интерфейс. В этом руководстве рассматриваются установка, настройка Apache и Nginx, конфигурация SSL и усиление безопасности.
Предварительные требования
Перед установкой phpMyAdmin убедитесь, что готово следующее:
- Ubuntu 20.04/22.04 или Debian 11/12
- MySQL 8.0+ или MariaDB 10.5+
- PHP 7.4+ (рекомендуется: PHP 8.1+)
- Apache 2.4+ или Nginx 1.18+
# Обновление системы
apt update && apt upgrade -y
# PHP и необходимые модули
apt install -y php php-mysql php-mbstring php-zip php-gd php-json php-curl
# Проверка версии PHP
php -v
Установка phpMyAdmin
Установка через менеджер пакетов
# Установить phpMyAdmin
apt install -y phpmyadmin
Во время установки:
- Выбор веб-сервера:
apache2илиlighttpd(при использовании Nginx ничего не выбирайте) - Настройка базы данных с
dbconfig-common:Yes - Установите пароль для phpMyAdmin
Ручная установка (рекомендуется)
Ручная установка даёт последнюю версию и больше контроля:
# Скачать последнюю версию
cd /tmp
wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
# Распаковать архив
tar xzf phpMyAdmin-latest-all-languages.tar.gz
# Переместить в веб-директорию
mv phpMyAdmin-*-all-languages /var/www/html/phpmyadmin
# Установить владельца
chown -R www-data:www-data /var/www/html/phpmyadmin
chmod -R 755 /var/www/html/phpmyadmin
# Создать файл конфигурации
cp /var/www/html/phpmyadmin/config.sample.inc.php /var/www/html/phpmyadmin/config.inc.php
Генерация Blowfish Secret
# Сгенерировать случайный ключ из 32 символов
openssl rand -base64 32
# Редактировать config.inc.php
nano /var/www/html/phpmyadmin/config.inc.php
// Вставьте сгенерированный ключ сюда
$cfg['blowfish_secret'] = 'ВСТАВЬТЕ_СЛУЧАЙНЫЙ_КЛЮЧ_ЗДЕСЬ';
// Установить временную директорию
$cfg['TempDir'] = '/tmp/phpmyadmin';
# Создать временную директорию
mkdir -p /tmp/phpmyadmin
chown www-data:www-data /tmp/phpmyadmin
Настройка Apache
Создание виртуального хоста
nano /etc/apache2/sites-available/phpmyadmin.conf
<VirtualHost *:80>
ServerName pma.example.com
DocumentRoot /var/www/html/phpmyadmin
<Directory /var/www/html/phpmyadmin>
Options FollowSymLinks
DirectoryIndex index.php
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/phpmyadmin_error.log
CustomLog ${APACHE_LOG_DIR}/phpmyadmin_access.log combined
</VirtualHost>
# Активировать сайт
a2ensite phpmyadmin.conf
a2enmod rewrite
systemctl reload apache2
Защита HTTP Basic Auth
# Создать файл .htpasswd
htpasswd -c /etc/apache2/.htpasswd admin
<Directory /var/www/html/phpmyadmin>
AuthType Basic
AuthName 'phpMyAdmin Access'
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
Настройка Nginx
nano /etc/nginx/sites-available/phpmyadmin
server {
listen 80;
server_name pma.example.com;
root /var/www/html/phpmyadmin;
index index.php;
# Защита HTTP Auth
auth_basic 'phpMyAdmin Access';
auth_basic_user_file /etc/nginx/.htpasswd;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
# Скрыть чувствительные директории
location ~* /(libraries|setup/frames|setup/libs) {
deny all;
return 404;
}
}
# Создать htpasswd для Nginx
apt install -y apache2-utils
htpasswd -c /etc/nginx/.htpasswd admin
# Активировать сайт
ln -s /etc/nginx/sites-available/phpmyadmin /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
Настройка SSL
Бесплатный SSL с Let's Encrypt
# Установить Certbot
apt install -y certbot python3-certbot-apache
# или для Nginx:
apt install -y certbot python3-certbot-nginx
# Получить SSL-сертификат для Apache
certbot --apache -d pma.example.com
# Получить SSL-сертификат для Nginx
certbot --nginx -d pma.example.com
# Проверить автоматическое обновление
certbot renew --dry-run
Ручная настройка SSL (Nginx)
server {
listen 443 ssl http2;
server_name pma.example.com;
root /var/www/html/phpmyadmin;
index index.php;
ssl_certificate /etc/letsencrypt/live/pma.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/pma.example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# HSTS
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains' always;
auth_basic 'phpMyAdmin Access';
auth_basic_user_file /etc/nginx/.htpasswd;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
}
# Перенаправление HTTP на HTTPS
server {
listen 80;
server_name pma.example.com;
return 301 https://$host$request_uri;
}
Управление пользователями
Создание выделенного пользователя phpMyAdmin
-- Подключиться к MySQL/MariaDB
mysql -u root -p
-- Создать администратора для phpMyAdmin
CREATE USER 'pma_admin'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON *.* TO 'pma_admin'@'localhost' WITH GRANT OPTION;
-- Создать ограниченного пользователя приложения
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'AppPassword456!';
GRANT ALL PRIVILEGES ON myapp.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;
Ограничение пользователей в config.inc.php
// Разрешить только определённых пользователей
$cfg['Servers'][$i]['AllowDeny']['order'] = 'deny,allow';
$cfg['Servers'][$i]['AllowDeny']['rules'] = [
'deny % from all',
'allow pma_admin from localhost',
'allow app_user from 192.168.1.0/24',
];
// Заблокировать вход root
$cfg['Servers'][$i]['AllowRoot'] = false;
Усиление безопасности
Ограничение по IP
# Nginx - разрешить только определённые IP
location / {
allow 192.168.1.0/24;
allow 10.0.0.5;
deny all;
}
# Apache - ограничение по IP
<Directory /var/www/html/phpmyadmin>
Require ip 192.168.1.0/24
Require ip 10.0.0.5
</Directory>
Изменение URL по умолчанию
# Переименовать директорию phpmyadmin
mv /var/www/html/phpmyadmin /var/www/html/db_manager_x7k2
# Обновить конфигурацию Nginx/Apache соответственно
Безопасность сессий
// config.inc.php - настройки безопасности
$cfg['LoginCookieValidity'] = 1800; // Тайм-аут сессии 30 минут
$cfg['LoginCookieStore'] = 0; // Удалять сессию при закрытии браузера
$cfg['ForceSSL'] = true; // Принудительный SSL
$cfg['Servers'][$i]['ssl'] = true; // SSL-соединение MySQL
$cfg['SendErrorReports'] = 'never';
Удаление директории setup
# Удалить директорию setup после установки
rm -rf /var/www/html/phpmyadmin/setup
Защита от брутфорса с Fail2Ban
nano /etc/fail2ban/filter.d/phpmyadmin.conf
[Definition]
failregex = ^<HOST> .* 'POST /phpmyadmin/index.php.*' (401|403)
ignoreregex =
# /etc/fail2ban/jail.local
[phpmyadmin]
enabled = true
port = http,https
filter = phpmyadmin
logpath = /var/log/nginx/phpmyadmin_access.log
maxretry = 5
bantime = 3600
Устранение неполадок
# Проверить логи ошибок PHP
tail -f /var/log/php8.1-fpm.log
# Логи ошибок Nginx
tail -f /var/log/nginx/error.log
# Логи ошибок Apache
tail -f /var/log/apache2/phpmyadmin_error.log
# Проверить права phpMyAdmin
ls -la /var/www/html/phpmyadmin/
# Проверить модули PHP
php -m | grep -E 'mysql|mbstring|zip'
Заключение
phpMyAdmin — мощный инструмент управления базами данных, но без надлежащей настройки безопасности он несёт серьёзные риски. Всегда используйте SSL, добавляйте HTTP-аутентификацию, ограничивайте доступ по IP и меняйте URL по умолчанию. С этими мерами phpMyAdmin можно безопасно использовать на серверах REXE.
Связанные статьи
Установка MySQL и MariaDB: Руководство по базовому управлению
Пошаговая установка MySQL и MariaDB на Linux, mysql_secure_installation, создание баз данных и пользователей, основные SQL-команды, настройка удалённого доступа и оптимизация производительности.
Установка и базовое управление PostgreSQL
Установка PostgreSQL на Ubuntu/Debian и RHEL/CentOS, создание пользователей и баз данных, основные SQL-команды, настройка удалённого подключения и резервное копирование. Пошаговое руководство.
Установка Redis и Memcached: Руководство по кэш-слою
Установка Redis и Memcached на Ubuntu/Debian, основные команды, настройки персистентности, конфигурация TTL, сравнение Redis и Memcached, интеграция с приложениями.