Установка и защита phpMyAdmin+Nginx на сервере Ubuntu 16.04

Многим сайтам необходима база данных типа MySQL, однако интерфейс командной строки СУБД не очень дружественный и понятный, особенно для новичков.

phpMyAdmin был разработан, чтобы устранить эту проблему. Это альтернативный веб-интерфейс для работы с СУБД. В данном мануале речь пойдёт об установке и защите phpMyAdmin на сервере Ubuntu 16.04. В качестве веб-сервера используется Nginx – производительный сервер, способный обрабатывать большие нагрузки.

Требования

  • Сервер Ubuntu 16.04, настроенный по этому мануалу (разделы 1-4).
  • Предварительно установленный сервер LEMP (Linux, Nginx, MySQL и PHP). Все необходимые инструкции вы найдете в мануале Установка стека LEMP в Ubuntu 16.04. Обязательно запишите или запомните пароль администратора MySQL.

Также есть важные соображения безопасности, которые следует учитывать при использовании программного обеспечения, такого как phpMyAdmin: этот интерфейс напрямую связывается с вашей установкой MySQL, обрабатывает аутентификацию с использованием учетных данных MySQL, обрабатывает произвольные SQL-запросы и возвращает результаты по ним.

Кроме того, это широко распространенное приложение PHP, потому злоумышленники часто атакуют его. Поэтому запускать phpMyAdmin на удаленных системах по простому HTTP-соединению ни в коем случае нельзя. Если у вас нет домена, защищенного сертификатом SSL/TLS, обратитесь к руководству Создание сертификата Let’s Encrypt для Nginx в Ubuntu 16.04.

1: Установка phpMyAdmin

Предварительно установив платформу LEMP, можно сразу приступать к инсталляции phpMyAdmin. Пакеты этой программы можно найти в стандартных репозиториях Ubuntu.

Сначала обновите индекс пакетов системы. Затем используйте инструмент apt, чтобы загрузить пакеты из репозитория и установить их:

sudo apt-get update
sudo apt-get install phpmyadmin

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

Затем программа спросит, нужно ли настроить базу данных для phpMyAdmin при помощи dbconfig-common. Выберите Yes, чтобы продолжить.Теперь нужно ввести пароль администратора MySQL, созданный во время установки СУБД.

После этого создайте и подтвердите пароль для новой БД для phpMyAdmin.

Установка phpMyAdmin завершена. Чтобы Nginx мог найти и корректно обработать файлы phpMyAdmin, нужно создать симлинк на каталог document root сервера Nginx:

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

В завершение нужно включить PHP-модуль mcrypt, от которого зависит работа phpMyAdmin. Он устанавливается вместе с phpMyAdmin, нужно только активировать его и перезапустить процессор PHP.

sudo phpenmod mcrypt
sudo systemctl restart php7.0-fpm

Теперь phpMyAdmin полностью готов к работе. Чтобы открыть интерфейс, введите в браузер доменное имя или внешний IP-адрес и /phpmyadmin:

http://server_domain_or_IP/phpmyadmin

На экране появится стандартная страница входа phpMyAdmin.

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

2: Изменение стандартного URL-адреса phpMyAdmin

На данном этапе phpMyAdmin полностью готов к использованию. Однако установка веб-интерфейса открыла публичный доступ к MySQL, а это серьёзный риск для безопасности сервера. Из-за большой популярности phpMyAdmin и объемов данных, к которым он имеет доступ, подобные установки часто становятся целью злоумышленников.

В этом разделе вы узнаете, как защитить установку, изменив стандартный URL-адрес интерфейса (это позволяет отразить автоматизированные атаки ботов).

Ранее вы создали симлинк из каталога phpMyAdmin в корневой каталог, чтобы веб-сервер Nginx находил и обслуживал файлы phpMyAdmin. Чтобы изменить URL-адрес интерфейса phpMyAdmin, нужно переименовать этот симлинк.

Перейдите в корневой каталог Nginx:

cd /var/www/html/
ls -l

Вы получите такой вывод:

total 4
-rw-r--r-- 1 root root 612 Apr 10 16:40 index.nginx-debian.html
lrwxrwxrwx 1 root root  21 Apr 10 17:06 phpmyadmin -> /usr/share/phpmyadmin

Вывод сообщает, что в этом каталоге есть симлинк phpmyadmin. Измените имя этой ссылки; это изменит расположение phpMyAdmin, по которому его можно найти в браузере, благодаря чему автоматизированные боты для взлома  не смогут получить к нему доступ.

Выберите нестандартное имя, которое не описывает цели; для примера в этом мануале это место называется /nothingtosee. Переименуйте ссылку:

sudo mv phpmyadmin nothingtosee
ls -l

Теперь вы получите:

total 4
-rw-r--r-- 1 root root 612 Apr 10 16:40 index.nginx-debian.html
lrwxrwxrwx 1 root root  21 Apr 10 17:06 nothingtosee -> /usr/share/phpmyadmin

Убедитесь, что старый URL не работает:

http://server_domain_or_IP/phpmyadmin
404 Not Found

Интерфейс phpMyAdmin доступен по другому URL-адресу.

http://server_domain_or_IP/nothingtosee

3: Настройка шлюза авторизации Nginx

Теперь нужно создать страницу авторизации сервера, которую необходимо пройти, чтобы получить доступ к странице входа в PhpMyAdmin.

Большинство веб-серверов, – и Nginx в их числе, — поставляются с этой функцией по умолчанию. Нужно просто отредактировать конфигурационный файл Nginx

Сначала нужно создать файл паролей pma_pass для хранения учётных данных. Nginx требует, чтобы пароль был зашифрован при помощи функции crypt(). Криптографический пакет OpenSSL, который должен быть установлен на сервере, предоставляет эту функциональность.

Чтобы создать зашифрованный пароль, введите:

openssl passwd

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

O5az.RSPzd.HE

Скопируйте это значение и вставьте его в файл паролей.

Чтобы создать файл паролей, используйте следующую команду (файл будет называться pma_pass и находиться в конфигурационном каталоге Nginx):

sudo nano /etc/nginx/pma_pass

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

К примеру, если пользователя зовут demo, то файл будет выглядеть так:

demo:O5az.RSPzd.HE

Примечание: Ни в коем случае не используйте такое имя – его очень легко угадать.

Сохраните и закройте файл.

Теперь можно отредактировать конфигурационный файл Nginx. Откройте его в текстовом редакторе:

sudo nano /etc/nginx/sites-available/default

В этот файл нужно внести новый раздел location для phpMyAdmin (в данном случае это /nothingtosee).

Создайте блок location в блоке server (и вне других блоков) и укажите в нём место установки:

server {
. . .
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
location /nothingtosee {
}
. . .
}

В этом блоке в директиве auth_basic нужно указать сообщение аутентификации, которое будет отображаться в запросе учётных данных. Чтобы ограничить доступ неавторизованным пользователям, можно просто использовать «Admin Login».

Затем нужно использовать директиву auth_basic_user_file, чтобы направить веб-сервер на файл паролей. Nginx запросит у пользователя учётные данные и проверит этот файл на наличие в нём введённых данных.

В результате блок имеет такой вид:

server {
. . .
location / {
try_files $uri $uri/ =404;
}
location /nothingtosee {
auth_basic "Admin Login";

auth_basic_user_file /etc/nginx/pma_pass;


}

. . .
}

Сохраните и закройте файл.

sudo service nginx restart

Если посетить phpMyAdmin в веб-браузере, будет запрошено имя пользователя и пароль, внесённые в файл pma_pass.

http://домен_или_IP/nothingtosee

Примечание: Если страница не появляется после обновления браузера, попробуйте очистить кэш или открыть ее в другом браузере.

Получив учётные данные, браузер откроет страницу входа в phpMyAdmin. Это создаёт дополнительный уровень безопасности и сохранит логи MySQL в чистоте (в них не будет сотен записей о неудачных попытках входа).

Заключение

Теперь можно управлять MySQL при помощи надёжного и относительно безопасного интерфейса. Он предоставляет основные функции, доступные из командной строки MySQL: пользователь может просматривать базы данных, схемы, создавать запросы и новые наборы и структуры данных.

Tags: , , , ,