Содержание:
- Подготовка к установке
- Установка PhpMyAdmin
- Настройка MySQL
- Настройка Nginx
- Смена стандартного местоположения PhpMyAdmin
- Настройка доступа по IP
Подготовка к установке
Чтобы установить PhpMyAdmin на Ubuntu 18.04, нужно подготовить стек программ LEMP, состоящий из веб-сервера Nginx, системы управления базами данных MySQL и языка программирования PHP. В репозиториях Ubuntu Linux есть всё необходимое. Достаточно лишь выполнить несколько команд.
Перед тем как начать установку, рекомендуется обновить список пакетов в репозиториях. Для этого в терминале требуется ввести команду:
sudo apt-get update
Установка phpMyAdmin
Установка PhpMyAdmin выполняется следующей командой:
sudo apt install phpmyadmin
В процессе установки появится окно, предлагающее выбор сервера. Поскольку производится установка на сервер Nginx, достаточно нажать «TAB» и «ОК», оставив поля «{ }» пустыми.
Следующим появится окно настройки пакета «dbconfig-common». Рекомендуется выбрать «Yes» (Да). Программа создаст базу данных в MySQL со служебной информацией.
Далее инсталлятор предложит пользователю создать пароль. Если оставить поле пустым, то программа самостоятельно сгенерирует случайный код.
Настройка MySQL
Предназначение PhpMyAdmin – управление базами данных MySQL. Поэтому работа PhpMyAdmin и MySQL тесно взаимосвязана.
Для аутентификации в веб-интерфейсе PhpMyAdmin используются данные пользователей MySQL, поэтому важно создать учётную запись MySQL и предоставить привилегии уровня «ALL PRIVILEGES».
Важно. Раздел статьи можно пропустить, если пользователь уже создан и имеет все необходимые привилегии.
Перед тем как выполнить создание нового пользователя нужно открыть оболочку MySQL следующей командой:
sudo mysql
Чтобы создать учетную запись в MySQL с необходимыми привилегиями, нужно поочередно выполнить следующие команды в терминале:
CREATE USER 'phpadmin'@'localhost' IDENTIFIED BY 'mypassword'; GRANT ALL PRIVILEGES ON *.* TO 'phpadmin'@'localhost' WITH GRANT OPTION;
Вместо «phpadmin» можно подставить собственный логин, а в поле «mypassword» — ввести собственный пароль.
Выйти из оболочки MySQL можно командой:
exit
Настройка Nginx
PhpMyAdmin не будет работать, поскольку в Nginx отсутствует конфигурация, размещающая веб-интерфейс на определенном хосте.
Далее будет рассмотрен способ размещения веб-интерфейса PhpMyAdmin на 80 порту (HTTP).
Примечание. В будущем рекомендуется настроить Nginx на вещание трафика через 443 порт (HTTPS), установив SSL сертификат и обезопасив соединение от злоумышленников.
Получение информации о PHP
Перед тем как вносить параметры в файлы конфигурации нужно узнать наименование файла Unix сокета. Если этот параметр будет указан неверно, то, переходя на страницу веб-интерфейса PhpMyAdmin будет появляться ошибка 502.
Узнать название файла можно, выполнив последовательно пару команд:
cd /run/php/
ls
Вывод будет следующим:
В примере «php7.4-fpm.sock» – необходимый файл Unix сокета.
Примечание. Название файла зависит от установленной версии PHP («php7.0-fpm.sock», «php7.2-fpm.sock» и т.д).
Создание конфига Nginx
Чтобы запустить PhpMyAdmin, нужно создать файл, в котором будет находиться конфигурация Nginx. Делается это командой:
sudo nano /etc/nginx/sites-available/phpmyadmin.conf
В созданный файл вносятся следующие строки:
server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html/; server_name 194.61.0.6; index index.php index.html index.htm index.nginx-debian.html; location /phpmyadmin { alias /usr/share/phpmyadmin/; location ~ \.php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include fastcgi_params; fastcgi_ignore_client_abort off; } location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { access_log off; log_not_found off; expires 1M; } } location ~ \.php$ { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
В данном примере важны следующие параметры:
- IP-адрес сервера «194.61.0.6». Вместо него нужно подставить свой домен, например «site.ru».
- «php7.4-fpm.sock» — файл Unix сокета.
После внесения кода, требуется сохранить файл. Если используется текстовой реактор Nano, то изменения применяются сочетанием клавиш «CTRL+X», далее следует нажатие «Y» и «Enter».
Теперь нужно удалить файл конфигурации Nginx по умолчанию — «default», и перенести созданный конфиг «phpmyadmin.conf» на его место:
sudo rm -rf /etc/nginx/sites-enabled/default sudo ln -s /etc/nginx/sites-available/phpmyadmin.conf /etc/nginx/sites-enabled/
Убедиться в отсутствии синтаксических ошибок можно командой:
sudo nginx -t
Если получен следующий вывод, то всё в порядке:
Примечание. Если вывод Nginx отличается от полученного, значит при написании конфига были обнаружены ошибки. Возможно были допущены ошибки при расставлении скобок «}»
После выполнения предыдущих действий необходим перезапуск сервера Nginx для применения параметров. Выполняется перезагрузка командой:
sudo systemctl restart nginx
Убедиться в правильности работы Nginx можно, выполнив команду:
sudo systemctl status nginx
Должен появиться следующий вывод:
Теперь следует проверить доступ к интерфейсу. Для этого нужно ввести в строке браузера IP-адрес, добавив «/phpmyadmin». Выглядеть результат должен следующим образом:
https://Ip_сервера/phpmyadmin
Теперь войти возможно, указав логин и пароль, использованные для подключения к консоли. Установку можно считать завершенной.
Однако, нужно учитывать тот факт, что теперь PhpMyAdmin присутствует в открытом доступе, а защита сервера находится на самом низком уровне. Нужно предпринять ряд шагов, которые обеспечат безопасность.
Смена стандартного местоположения PhpMyAdmin
Обычно программа находится по адресу «/phpmyadmin», «/pma», «/admin», «/mysql». Если оставить PhpMyAdmin в стандартном расположении, то злоумышленники могут использовать программы, взламывающие пароль методом брутфорса (перебора).
Чтобы обеспечить должную безопасность, нужно указать уникальный путь, защитив базу данных от проникновения.
Для этого нужно открыть, созданный в предыдущих действиях, конфигурационный файл «phpmyadmin.conf» и найти строку «location /phpmyadmin {»:
sudo nano /etc/nginx/sites-available/phpmyadmin.conf
При изменении слова «phpmyadmin» на нестандартное, меняется веб-адрес, а следовательно боты не смогут найти программу. К примеру, обозначим адресом PhpMyAdmin слово «ubuntu»:
Примечание. Вместо «ubuntu» нужно подставить свое наименование адреса к веб-интерфейсу PhpMyAdmin.
Теперь нужно сохранить изменения в файле и перезагрузить сервер Nginx следующей командой:
sudo systemctl restart nginx
При попытке открыть в веб-браузере старый адрес, появится ошибка 404 (не найдено):
https://server_domain_or_IP/phpmyadmin
Теперь открыть страницу возможно только по новому адресу:
https://server_domain_or_IP/ubuntu
Установка ограничения root доступа
Учётная запись root даёт не только особые привилегия пользователям, но и является уязвимостью, играющей на руку злоумышленнику. С изменением адреса PhpMyAdmin была устранена уязвимость в безопасности для автоматизированных программ, но всегда стоит минимизировать риски и защититься от других видов атак на сервер.
Для обеспечения защиты PhpMyAdmin придётся ввести ограничение root прав программе. Для этого нужно создать файл конфигурации по адресу:
/etc/phpmyadmin/conf.d/ с названием pma_secure.php: sudo nano /etc/phpmyadmin/conf.d/pma_secure.php
В созданный файл необходимо вставить следующий код:
/etc/phpmyadmin/conf.d/pma_secure.php <?php # PhpMyAdmin Settings # This should be set to a random string of at least 32 chars $cfg['blowfish_secret'] = '3!#32@3sa(+=_4?),5XP_:U%%8\34sdfSdg43yH#{o'; $i=0; $i++; $cfg['Servers'][$i]['auth_type'] = 'cookie'; $cfg['Servers'][$i]['AllowNoPassword'] = false; $cfg['Servers'][$i]['AllowRoot'] = false; ?>
В данном примере важны следующие параметры:
- АllowNoPassword – вход без пароля (false – отключен);
- AllowRoot – вход с учётной записи root пользователя (false – отключен).
Как только файл будет сохранен, изменения вступят в силу. При попытке выполнить вход из учётной записи суперпользователя, появится ошибка — «Access Denied» (Доступ запрещен).
Настройка доступа по IP
Еще один способ защитить PhpMyAdmin — предоставить или запретить доступ к веб-интерфейсу определенным хостам на уровне сервера Nginx. Это позволит ограничить доступ всем, кроме некоторых IP-адресов, или направленно заблокировать нежелательные, вредоносные хосты.
Предоставление доступа определенным хостам
В Nginx предусмотрена функция управления доступом на основе IP. Настройка хостов производится в блоке location PhpMyAdmin, с помощью переменных «allow» (разрешить) и «deny» (запретить). Если нужно разрешить запросы только с данного хоста, то достаточно внести эти строки:
allow XXX.XXX.XXX.XXX; deny all;
В примере переменная «XXX.XXX.XXX.XXX» — разрешенный публичный IP-адрес.
Чтобы узнать свой публичный IP адрес, нужно перейти по ссылке https://ipinfo.io/ip или последовательно ввести в консоли команды:
sudo apt-get install curl
curl https://ipinfo.io/ip
Выводом будет обычный IP адрес.
В принципе, разрешить доступ можно со скольких угодно хостов, создав «белый список». Параметр «deny all», наоборот блокирует все хосты, кроме разрешенных.
Примечание. При изменении сети или использовании VPN, публичный IP-адрес меняется. Важно вписать все возможные адреса хостов, с которых ожидается вход в PhpMyAdmin. В противном случае можно потерять доступ к веб-интерфейсу.
Чтобы начать настройку, нужно открыть файл конфигурации:
sudo nano /etc/nginx/sites-available/phpmyadmin.conf
Параметры вносятся примерным образом:
Для вступлений изменений в силу, требуется перезапустить процесс сервера Nginx:
sudo systemctl restart nginx
Ограничение доступа определенным хостам
Можно рассмотреть обратную ситуацию, когда требуется запретить доступ определенному хосту. Для этого в конфигурационный файл должна быть внесена следующая строка:
deny XXX.XXX.XXX.XXX;
В приведенном случае «XXX.XXX.XXX.XXX» — запрещённый публичный IP-адрес.
Можно использовать любое число директив «deny», если нужно запретить доступ нескольким хостам.
Чтобы начать настройку, нужно открыть файл конфигурации:
sudo nano /etc/nginx/sites-available/phpmyadmin.conf
И внести параметры примерно подобным образом:
Для вступлений изменений в силу, требуется перезапустить процесс сервера Nginx:
sudo systemctl restart nginx
После данной настройки все неразрешенные хосты будут отклоняться, получая ошибку 403.