Содержание:

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

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

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

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

apt install nginx php-fpm mysql-server

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

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

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

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

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

Добавление репозиториев для Debian 10

В официальных репозиториях Debian 10 отсутствует большинство программ, в число которых входит PhpMyAdmin.

Чтобы добавить источники для загрузки PhpMyAdmin, нужно открыть файл, содержащий списки репозиториев – «sources.list», и внести строки, отвечающие за добавление адреса (URL) до сервера. 

Открыть «sources.list» в редакторе можно командой:

nano /etc/apt/sources.list

Нужно внести следующие строки в конец файла:

deb http://deb.debian.org/debian/ stretch main contrib non-free

deb-src http://deb.debian.org/debian/ stretch main contrib non-free

PhpMyAdmin Debian - Добавление репозиториев для Debian 10

Остаётся сохранить изменения нажатием «Ctrl+X» + «Y» + «Enter».

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

Веб-интерфейс

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

apt-get update

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

apt-get install phpmyadmin

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

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

Настройка базы данных

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

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

Создание пароля пользователя

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

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

Остается подождать, пока установятся необходимые пакеты ПО. 

Настройка Nginx

Чтобы PhpMyAdmin стал доступен по назначенному пользователем адресу и получил доступ к Unix-сокету PHP-FPM, нужно отредактировать конфигурационные файлы сервера Nginx.

Для начала нужно узнать информацию об установленной версии PHP. Она понадобится в следующих действиях при составлении команд. Узнать информацию о установленной версии можно, выполнив команду:

php -v

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

В последующий действиях потребуется использовать две цифры из установленной версии PHP. 

Примечание. В примерах будет использоваться версия 7.0.

Теперь нужно открыть конфигурационный файл Nginx в редакторе (по умолчанию — «/etc/nginx/sites-available/default»). Для этого в терминал требуется ввести следующую команду:

nano /etc/nginx/sites-available/default

Если файл редактируется в первый раз, нужно найти и удалить следующие строки:

root /var/www/html;

# Add index.php to the list if you are using PHP

index index.html index.htm index.nginx-debian.html;

server_name _;

location / {

        # First attempt to serve request as file, then

        # as directory, then fall back to displaying a 404.

        try_files $uri $uri/ =404;

}

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

Теперь нужно найти в начале файла директиву «server {» и перенести следующий код:

root /var/www/html/;

server_name 194.61.0.6;

# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;

location /pma {
alias /usr/share/phpmyadmin/;
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.0-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;
}
}

В примере:

  • «server_name» – директива, отвечающая за местоположение хоста. Вместо «194.61.0.6» нужно подставить действительный домен или IP-адресс сервера.
  • «location /pma {» – от значения «pma» зависит будущий адрес PhpMyAdmin (http://my-IP/pma/). Рекомендуется изменить «pma» на уникальное имя, чтобы скрыть PhpMyAdmin и избежать атак ботов, подбирающих пароль методом брутфорса (перебор паролей).
  • «fastcgi_pass unix:/run/php/php7.0-fpm.sock;» – путь до Unix сокета PHP-FPM. Название файла зависит от установленной версии PHP, поэтому на место 7.0 требуется подставить свою версию программы. В противном случае возможна ошибка 502 при запуске PhpMyAdmin.

В итоге файл конфигурации должен выглядеть следующим образом: Процесс установки PhpMyAdmin Debian

Остаётся сохранить изменения и закрыть файл. Для этого нужно нажать «Ctrl+X» + «Y» и подтвердить сохранение нажатием «Enter».

Проверить правильность внесенных данных можно командой:

nginx -t

Получение следующего вывода сигнализирует о правильности внесенных корректив в конфигурационный файл. 

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

Если вывод сервера Nginx отличается от полученного, то придётся проверить конфигурационный файл на наличие ошибок. Вполне возможно, что были допущены ошибки при расставлении скобок «}» или же Nginx заметил ошибки в секциях (повторяющиеся директивы и недопустимые значения).

Редактирование конфигурационных файлов PHP

Чтобы защита PhpMyAdmin оставалась на должном уровне, нужно добавить параметр «open_basedir», ограничивающий доступ к каталогам «/usr/share/phpmyadmin» и «/usr/share/php/php-gettext». Для этого требуется открыть конфигурационный файл пула PHP-FPM в текстовом редакторе Nano:

nano /etc/php/7.0/fpm/pool.d/www.conf

При составлении команды «7.0» нужно изменить на установленную версию PHP.

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

;php_admin_value[open_basedir] ="/usr/share/phpmyadmin:/usr/share/php/php-gettext"

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

После внесения правок, нужно сохранить изменения и выйти из файла.

Остается перезапустить Nginx и PHP-FPM для применения параметров. Для этого в терминале вводится команда:

systemctl restart nginx php7.0-fpm

Проверка работы PhpMyAdmin

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

http://server_domain_or_IP/pma

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

В случае успеха откроется окно входа PhpMyAdmin. При появлении ошибок 404, 403, 502 придётся повторно проверить файлы конфигурации и наличие всех компонентов комплекса LEMP. 

Выполнение входа в PhpMyAdmin

PhpMyAdmin для защиты аутентификации использует данные пользователей MySQL. Для входа придется указать логин и пароль, используемые для подключения к консоли БД (MySQL, MariaDB).

Если учетная запись MySQL отсутствует, то выполнить создание нового пользователя можно несколькими командами. Для начала нужно подключится к оболочке MySQL и ввести в терминал:

mysql -u root -p

Программа попросит пройти аутентификацию, указав пароль. Если авторизация для учетной записи root не настроена, то можно оставить поле «Enter Password» пустыми и, для подтверждения, нажать «Enter».     

После входа в оболочку нужно создать учетную запись и предоставить необходимые привилегия новому пользователю. Для этого последовательно выполняются команды: 

CREATE USER 'phpadmin'@'localhost' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON *.* TO 'phpadmin'@'localhost' WITH GRANT OPTION;

Вместо «phpadmin» нужно подставить собственный логин, а в поле «mypassword» ввести пароль для создаваемой учетной записи.

Теперь можно выполнить вход в интерфейс PhpMyAdmin, воспользовавшись данными авторизации только что созданного пользователя. 

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

Ограничение доступа для входа пользователю 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;

?>

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

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

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

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

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

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

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

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

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

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

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

openssl passwd

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

Output
O5az.RSPzd.HE

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

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

sudo nano /etc/nginx/pma_pass

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

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

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

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

nano /etc/nginx/sites-available/default

Здесь понадобится найти блок «server» и секцию «location». В данном примере указанное местоположение phpMyAdmin относительно корня сети – «/pma»:

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

Для запуска второго шлюза аутентификации нужно внести под секцию «location» следующие строки:

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

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

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

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

nginx -t

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

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

Остается перезапустить Nginx для применения параметров:

systemctl restart nginx

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

http://server_domain_or_IP/pma

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

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

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

Следующим действием настоятельно рекомендуется установить сертификат SSL/TLS. Он даст возможность наладить передачу зашифрованного трафика между клиентом и сервером.