Установка и защита phpMyAdmin на Ubuntu 20.04

phpMyAdmin — это свободное веб-приложение для управления базами данных MySQL и MariaDB через браузер. С его помощью можно управлять пользователями и привилегиями, импортировать/экспортировать данные, выполнять SQL-запросы и многое другое. В этом руководстве показано, как установить phpMyAdmin с Nginx на Ubuntu 20.04 и защитить доступ с помощью бесплатного сертификата Let’s Encrypt.
Кому полезно
- Системным администраторам, которым нужно быстро развернуть веб-интерфейс управления базой данных.
- Разработчикам, которым нужен удобный интерфейс для администрирования локальных или удалённых баз.
Важно: данное руководство предполагает, что у вас есть домен, указывающий на сервер, и что вы понимаете риски открытия интерфейса управления БД в интернет.
Предварительные требования
- Сервер с Ubuntu 20.04.
- Действительный домен, направленный на IP сервера.
- Настроенный пароль root для сервера (или доступ по sudo).
Шаг 1 — Установка Nginx, MariaDB и PHP
Установите веб-сервер, СУБД и необходимые расширения PHP одной командой:
apt-get install nginx mariadb-server php php-cli php-mysql php-mbstring php-zip php-gd php-json php-curl php-fpm -yПосле установки сервисы будут доступны, но MariaDB не будет ещё защищена.
Шаг 2 — Установка phpMyAdmin
В Ubuntu 20.04 пакет phpMyAdmin доступен из официального репозитория. Установите пакет:
apt-get install phpmyadmin -yВо время установки установщик предложит выбрать веб-сервер. Поскольку мы используем Nginx, нажмите TAB и затем ENTER, чтобы пропустить выбор. Затем согласитесь на использование dbconfig-common (Yes) и задайте пароль приложения phpMyAdmin при запросе.



Совет: используйте сложный пароль для внутреннего пользователя phpMyAdmin (если вы используете dbconfig-common).
Шаг 3 — Базовая настройка и защита MariaDB
Сразу после установки выполните стандартную утилиту безопасной настройки MariaDB:
mysql_secure_installationСледуйте подсказкам и ответьте утвердительно на изменение пароля root, удаление анонимных пользователей, запрет удалённого входа для root, удаление тестовой базы и перезагрузку таблиц привилегий.
Затем создайте отдельного пользователя для взаимодействия с phpMyAdmin (рекомендуется не использовать системного root для повседневных задач):
mysql -u root -pВ MySQL/MariaDB shell выполните:
create user 'admin'@'localhost' identified by 'password';
grant all privileges on *.* to 'admin'@'localhost' with grant option;
flush privileges;
exit;Замените ‘admin’ и ‘password’ на желаемые логин и надёжный пароль.
Важно: для продуктивных сред гранулярные права (только нужные базы/операции) безопаснее, чем grant all.
Шаг 4 — Конфигурация Nginx для phpMyAdmin
Создайте новый конфигурационный файл виртуального хоста:
nano /etc/nginx/sites-available/phpmyadminВставьте (при необходимости замените server_name на ваш домен):
server {
listen 80;
listen [::]:80;
server_name phpmyadmin.linuxbuz.com;
root /usr/share/phpmyadmin/;
index index.php index.html index.htm index.nginx-debian.html;
access_log /var/log/nginx/phpmyadmin_access.log;
error_log /var/log/nginx/phpmyadmin_error.log;
location / {
try_files $uri $uri/ /index.php;
}
location ~ ^/(doc|sql|setup)/ {
deny all;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include snippets/fastcgi-php.conf;
}
location ~ /\.ht {
deny all;
}
}Сохраните файл и создайте символическую ссылку в sites-enabled:
ln -s /etc/nginx/sites-available/phpmyadmin /etc/nginx/sites-enabled/Установите рекомендованный размер хэш-таблицы имён серверов:
nano /etc/nginx/nginx.confДобавьте внутри блока http { строку:
server_names_hash_bucket_size 64;Проверьте конфигурацию Nginx и перезапустите сервис:
nginx -t
systemctl restart nginx
systemctl status nginxЕсли вы меняете server_name, не забудьте заменить phpmyadmin.linuxbuz.com на ваш реальный домен.
Шаг 5 — Защита с помощью Let’s Encrypt (Certbot)
Добавьте репозиторий Certbot и установите клиент (вариант может отличаться по репозиторию; используйте официальный способ для вашей системы при необходимости):
add-apt-repository ppa:ahasenack/certbot-tlssni01-1875471
apt-get update -y
apt-get install certbot python3-certbot-nginx -yЗапустите Certbot для автоматического получения и установки сертификата:
certbot --nginx -d phpmyadmin.linuxbuz.comВ процессе укажите email и согласитесь с условиями. После этого вам предложат выбрать перенаправление HTTP -> HTTPS. Для публичного сайта рекомендуется выбрать перенаправление (Redirect).
После успешного получения сертификата Certbot обновит конфигурацию Nginx и настроит автоматическое обновление. Подтвердите работу автообновления командой:
certbot renew --dry-runДополнительные меры безопасности (рекомендуется)
- Ограничение доступа по IP: если доступ нужен только из офисной сети, в конфиге Nginx добавьте allow/deny. Пример:
location / {
allow 203.0.113.0/24;
deny all;
try_files $uri $uri/ /index.php;
}- HTTP Basic Auth в Nginx: добавляет второй слой аутентификации.
apt-get install apache2-utils
htpasswd -c /etc/nginx/.phpmyadmin_htpasswd youruserЗатем в server блоке:
location / {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.phpmyadmin_htpasswd;
try_files $uri $uri/ /index.php;
}- fail2ban: настройте фильтр для защиты попыток входа в phpMyAdmin.
- Отключите прямой доступ к setup/ и doc/ (в конфиге уже добавлено deny).
- Регулярные бэкапы дампов БД и конфигураций.
Примечание: Basic Auth и ограничение по IP совместимы с HTTPS и повышают безопасность.
Автоматическое продление сертификата и мониторинг
Let’s Encrypt сертификаты действуют 90 дней. Certbot обычно добавляет cron/systemd задачу. Проверьте dry-run:
certbot renew --dry-runРекомендуется настраивать мониторинг доступности (Uptime) и оповещения о проблемах с HTTPS.
Частые проблемы и отладка
- Nginx не стартует после правок: проверьте nginx -t и логи /var/log/nginx/error.log.
- Certbot не может верифицировать домен: убедитесь, что DNS A/AAAA запись указывает на сервер и порт 80 доступен.
- PHP-файлы скачиваются как текст: проверьте, что fastcgi_pass и snippets/fastcgi-php.conf включены и PHP-FPM запущен.
Чеклист перед открытием phpMyAdmin в интернет
- MariaDB защищена и root не доступен удалённо.
- Отдельный пользователь для повседневных задач создан.
- HTTPS включён (Let’s Encrypt).
- Доступ ограничен по IP или защищён Basic Auth.
- Fail2ban настроен для защиты от перебора паролей.
- Регулярные бэкапы БД настроены.
Проверки для ролей
Для администратора:
- Убедиться, что права пользователей минимизированы.
- Настроить мониторинг и уведомления о просроченных сертификатах.
- Проводить периодические аудиты доступа.
Для разработчика:
- Использовать отдельные учётки для разных сред (dev/stage/prod).
- Не хранить пароли в коде.
- Проверять запросы перед выполнением (особенно импорты SQL).
Короткий словарь
- phpMyAdmin — веб-интерфейс для MySQL/MariaDB.
- Certbot — клиент для получения сертификатов Let’s Encrypt.
- PHP-FPM — FastCGI-процесс для интерпретации PHP.
Критерии приёмки
- Веб-интерфейс доступен по HTTPS на вашем домене.
- Вход в phpMyAdmin возможен под созданной учётной записью.
- Ограничения доступа и мониторинг настроены по чеклисту.
Заключение
Вы успешно установили phpMyAdmin и защитили его с помощью Let’s Encrypt на Ubuntu 20.04. Дополнительные слои безопасности (ограничение IP, Basic Auth, fail2ban) и регулярные бэкапы помогут снизить риски при эксплуатации.
Важно: при работе с продакшн-базами всегда следуйте принципу наименьших привилегий и храните резервные копии в безопасном месте.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента