phpMyAdmin – это инструмент управления базами данных для MySQL, который поставляется с веб-интерфейсом. В данном руководстве будет рассмотрена установка phpMyAdmin на сервер с популярной ОС Debian 10, а также некоторые способы защиты приложения.

Подготовка к установке

Перед развертыванием самой программы следует соблюсти ряд условий. Главное из них — уже должен быть установлен программный пакет, включающий в себя стек LEMP (Linux, Nginx, MySQL и PHP), защищенный с помощью утилиты Uncomplicated Firewall (ufw).

Если эти компоненты установлены не полностью, в терминале следует выполнить команду:

sudo apt install nginx

Установка phpMyAdmin Debian

По завершении установки будет отображен следующий результат:

Установка phpMyAdmin Debian

Примечание. Установка веб-сервера и phpMyAdmin для Debian 9 производится теми же командами.

Так как phpMyAdmin использует учетные данные MySQL для защиты аутентификации, настоятельно рекомендуется установить сертификат SSL/TLS. Он даст возможность наладить передачу зашифрованного трафика между клиентом и сервером.

Процесс установки phpMyAdmin

Первое, что следует сделать – установить веб-интерфейс phpMyAdmin на Nginx-сервер. Для этого будут использоваться репозитории Debian по умолчанию. Следовательно, сначала нужно обновить базу пакетов командой в терминале:

sudo apt update

Установка phpMyAdmin Debian

Теперь можно установить phpMyAdmin на Debian командой:

sudo apt install phpmyadmin

Установка phpMyAdmin Debian

Установщик в процессе предложит указать, какой веб-сервер потребуется настраивать автоматически (Apache или Lighthttp). В данном случае, речь идет об Nginx, поэтому выбор делать не нужно. Чтобы пропустить этот вопрос, следует нажать клавишу «Tab», а затем подтвердить выбор кнопкой «ОК».

Установка phpMyAdmin Debian

После этого мастер установки предложит задействовать dbconfig-common, чтобы настроить базу данных приложения. Здесь следует выбрать «Да». Это позволит настроить внутреннюю базу данных и пользователя с привилегиями администратора для phpMyAdmin.

Установка phpMyAdmin Debian

Программа предложит создать пароль для пользователя MySQL. Это поле можно не заполнять, чтобы позволить phpMyAdmin сгенерировать случайный код доступа.

Установка phpMyAdmin Debian

Остается подождать, пока установятся необходимые пакеты ПО. Далее в терминале потребуется создать симлинк из установочных файлов на каталог с файлами Nginx. Это позволит веб-серверу правильно находить и пользоваться файлами phpMyAdmin:

sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin

Установка phpMyAdmin завершается проверкой доступа к интерфейсу. Для этого нужно перейти по доменному имени или общедоступному IP-адресу веб-сервера, добавив в адресной строке «/phpmyadmin»:

https://server_domain_or_IP/phpmyadmin

Установка phpMyAdmin Debian

Выше уже говорилось, что phpMyAdmin для защиты аутентификации используются данные из MySQL. Для входа придется указать те самые логин и пароль, используемые для подключения к БД в консоли или посредством API.

Важно знать! Не стоит никогда открывать phpMyAdmin как root-пользователь MySQL. Это значительно снижает безопасность. Ниже будет рассмотрен способ отключения возможности входа как root.

Как только первый вход в веб-интерфейс будет выполнен, установку можно считать завершенной.

Однако сразу после этого база данных на сервере становится открытой для всего мира. Поскольку приложение phpMyAdmin популярно и может предоставить доступ к огромным объемам информации, базы данных оказываются хорошей мишенью для хакерских атак. Поэтому не менее важной после установки является последующая защита phpMyAdmin.

Смена стандартного местоположения phpMyAdmin

Самое элементарное решение, позволяющее защитить приложение– это сделать поиск phpMyAdmin более трудным. Боты ищут путь к интерфейсу по стандартным путям, включая пути —  «/phpmyadmin», «/pma», «/admin», «/mysql» и похожие.

Если изменить путь /phpmyadmin на какой-нибудь нестандартный адрес, автоматизированные программы не смогут найти приложение и попытаться получить к нему доступ с использованием метода перебора паролей — bruteforce.

Во время инсталляции phpMyAdmin создается симлинк (символическая ссылка), содержащий путь /usr/share/phpmyadmin. В этой папке расположены файлы веб-интерфейса. Для замены веб-адреса, каталог и ссылку придется изменить.

Перед этим следует открыть в терминале корневую папку Nginx и ознакомиться с ее содержимым. Это делается для того, чтобы понять, как именно будет изменено местоположение каталога с файлами phpMyAdmin:

cd /var/www/html/
ls -l

Результат должен выглядеть таким образом:

Установка phpMyAdmin Debian

Отсюда видно, что данная папка имеет символическую ссылку phpmyadmin. Следовательно, нужно заменить ее имя на произвольное. Эта операция заменит веб-адрес для доступа к веб-интерфейсу и скроет пункт назначения от ботов, которые выполняют поиск по определенным схемам.

Затем можно подобрать новое название папки. В данном примере она названа «/hiddenfolder». На настроенном сервере необходимо выбрать что-нибудь другое. В терминале это выполняется так:

sudo mv phpmyadmin hiddenfolder
ls -l

Если все сделано правильно, после этих команд в окне терминала будет отображен такой результат:

Установка phpMyAdmin Debian

Можно попытаться открыть phpMyAdmin по старому адресу. Должна открыться страница с ошибкой 404:

https://server_domain_or_IP/phpmyadmin

В веб-интерфейс теперь можно попасть, если открыть созданный только что адрес:

https://server_domain_or_IP/hiddenfolder

Настоящее местоположение phpMyAdmin теперь надежно скрыто.

Ограничение доступа для входа пользователю root

Суперпользователь в MySQL, как и в Linux – это пользователь, обладающий правами администратора и неограниченным доступом ко всей базе данных. Вдобавок к этому, root является достаточно популярным логином и боты используют его чуть ли не чаще всего в процессе применения bruteforce.

Чтобы исключить подобный риск, phpMyAdmin необходимо сконфигурировать так, чтобы даже с правильными данными для входа под root пользователем панель управления выдавала ошибку «Доступ запрещен» и закрыла доступ к своему интерфейсу.

В процессе установки использовался пакет dbconfig-common, отвечающий за настройку и сохранение опций phpMyAdmin. Следовательно, стандартная конфигурация сейчас находится в БД. Следует создать файл config.inc.php, в котором будут храниться собственные настройки пользователя.

Хотя все PHP-файлы для работы phpMyAdmin расположены в /usr/share/phpmyadmin (или уже измененной директории), система пользуется конфигурационными файлами из /etc/phpmyadmin. Так что новый файл создается в /etc/phpmyadmin/conf.d и имеет название pma_secure.php:

sudo nano /etc/phpmyadmin/conf.d/pma_secure.php

В создаваемом файле следует вставить предложенный ниже код, который позволит отключить вход без пароля (напротив AllowNoPassword указано false) и под суперпользователем (напротив AllowRoot стоит такое же значение):

/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;

?>

После этого можно сохранить файл. Если для его создания использовался редактор Nano, это делается поочередным нажатием «CTRL + X», затем «y» для подтверждения изменений и «ENTER». Можно перезагрузить страницу авторизации и попробовать залогиниться как пользователь root. Отобразится сообщение об ошибке с запретом доступа:

Установка phpMyAdmin Debian

Итак, войти в панель phpMyAdmin как root теперь невозможно. Возможность подбора пароля для этого пользователя исключена.  Вдобавок, код дает возможность пользоваться учетными записями MySQL с меньшими привилегиями для входа в phpMyAdmin. Что само по себе сильная мера защиты.

Установка второго шлюза аутентификации

Описанные выше меры безопасности позволяют обеспечить сильную защиту от автоматических программ для сканирования сети и ботов. Однако такая защита малоэффективна от целевого нападения.

Для повышения безопасности веб-интерфейса с ограниченным доступом, лучше всего останавливать злоумышленников до того, как они смогут найти панель. Это исключит для них возможность воспользоваться универсальными эксплойтами и атаковать при помощи bruteforce.

Поэтому стоит добавить еще один уровень авторизации, открывающий доступ к окну входа в phpMyAdmin. Если это не сделать, у злоумышленников остается возможность применить bruteforce для попытки авторизоваться.

В большей части веб-серверов повышение безопасности таким способом доступно из коробки.

Настройка нового уровня аутентификации

Для начала, потребуется создать файл, где будут храниться пароли для учетных данных аутентификации. Согласно требованию Nginx, эти пароли необходимо зашифровать, используя функцию crypt(). Она доступна в пакете OpenSSL – он автоматически поставляется в комплекте Nginx. Можно приступать к созданию паролей, введя в терминале команду:

openssl passwd

После ввода появится предложение создать пароль и подтвердить его. Далее программа покажет этот пароль, уже в зашифрованном виде:

Output
O5az.RSPzd.HE

Это значение необходимо скопировать в надежное место или лучше записать на бумаге. Оно понадобится для вставки в файл аутентификации.

Приступим к созданию самого файла. Для примера, его можно назвать pma_pass и расположить в папке с конфигурационным файлом Nginx:

sudo nano /etc/nginx/pma_pass

Здесь потребуется вписать строку с именем пользователя, используемого для аутентификации. За ним ставится двоеточие и добавляется сгенерированный пароль с помощью openssl passwd. Назовем нашего пользователя admin, следовательно, результат должен выглядеть таким образом:

/etc/nginx/pma_pass
admin:O5az.RSPzd.HE

Можно сохранять изменения и переходить к следующему шагу – изменить файл с конфигурациями Nginx. В данном примере, он расположен по следующему адресу:

/etc/nginx/sites-available/example.com

На своем веб-сервере нужно будет отредактировать соответствующий файл настроек для сайта, который обслуживается с помощью phpMyAdmin. Чтобы провести изменения, его нужно открыть в текстовом редакторе:

sudo nano /etc/nginx/sites-available/example.com

Здесь понадобится найти блок server, в котором будет изменена секция location. Она должна иметь новый вид и соответствовать текущему пути к phpMyAdmin на Nginx. В данном примере указанное местоположение phpMyAdmin относительно корня сети – /hiddenfolder:

/etc/nginx/sites-available/default

server {
. . .

location / {
try_files $uri $uri/ =404;
}

location /hiddenfolder {
# Settings for phpMyAdmin will go here
}

. . .
}

Задача заключается в определении двух новых правил:

  • auth_basic – позволяет задать сообщение, отображаемое в приглашении пройти аутентификацию;
  • auth_basic_user_file – указывает на созданный только что файл.

Измененная секция в итоге должна выглядеть таким образом:

/etc/nginx/sites-available/default

server {
. . .

location /hiddenfolder {
auth_basic "Admin Login";
auth_basic_user_file /etc/nginx/pma_pass;
}

. . .
}

После сохранения изменений и выхода из редактора не лишним будет проверить, правильно ли выполнена настройка. В терминале это можно сделать командой:

sudo nginx -t

Если все правильно, вывод будет такого вида:

Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Остается запустить еще один шлюз аутентификации. Он запустится автоматически, после перезагрузки Nginx:

sudo systemctl reload nginx

Можно попытаться снова открыть веб-адрес phpMyAdmin. Однако, в этом случае браузер сделает запрос на ввод логина и пароля, сохраненных в pma_pass:

https://server_domain_or_IP/hiddenfolder

Если пользователь выполнит успешный вход, он получит возможность авторизоваться непосредственно в phpMyAdmin.

Важно! Если при проверке второй шлюз отсутствует, в браузере следует выполнить очистку кэша или перейти в новый сеанс браузера (если в текущий момент выполнен вход в phpMyAdmin).

Дополнительным преимуществом такой защиты является возможность сохранить чистыми журналы MySQL от попыток аутентификации ботами.