Как установить и защитить phpMyAdmin с помощью Nginx в Ubuntu 16.04
Введение
Хотя многим пользователям нужны функциональные возможности системы управления базами данных, такой как MySQL, ее интерфейс командной строки может быть для некоторых менее интуитивным и удобным для пользователя, что представляет собой барьер для входа.
phpMyAdmin был создан для того, чтобы пользователи могли взаимодействовать с MySQL через веб-интерфейс. В этом руководстве мы обсудим, как установить и защитить phpMyAdmin, чтобы вы могли безопасно использовать его для управления своими базами данных из системы Ubuntu 16.04. Мы построим эту установку поверх веб-сервера Nginx, который имеет хороший профиль производительности и может справляться с большими нагрузками лучше, чем некоторые другие веб-серверы.
Предпосылки
Прежде чем приступить к работе с этим руководством, убедитесь, что вы выполнили следующие обязательные шаги:
- Во-первых, мы предполагаем, что вы используете пользователя без полномочий root с привилегиями sudo, как описано в шагах 1–4 первоначальной настройки сервера Ubuntu 16.04.
- Мы также предполагаем, что вы завершили установку LEMP (Linux, Nginx, MySQL и PHP) на свой сервер Ubuntu 16.04. Если вы еще этого не сделали, вы можете следовать руководству по установке стека LEMP в Ubuntu 16.04. Обязательно запишите свой пароль администратора базы данных MySQL.
Наконец, есть важные соображения безопасности, о которых следует помнить при использовании программного обеспечения, такого как phpMyAdmin: оно напрямую взаимодействует с вашей установкой MySQL, обрабатывает аутентификацию с использованием учетных данных MySQL, а также выполняет и возвращает результаты для произвольных запросов SQL.
По этим причинам, а также потому, что это широко распространенное PHP-приложение, которое часто подвергается атакам, никогда не следует запускать phpMyAdmin на удаленных системах через обычное HTTP-соединение. Если у вас нет существующего домена, настроенного с сертификатом SSL/TLS, вы можете следовать этому руководству по защите Nginx с помощью Let’s Encrypt в Ubuntu 16.04.
Выполнив эти предварительные шаги, вы готовы приступить к работе с этим руководством.
Шаг 1 — Установите phpMyAdmin
Поскольку наша платформа LEMP уже установлена, мы можем начать с установки phpMyAdmin, который доступен в стандартных репозиториях Ubuntu.
Во-первых, мы обновим локальный индекс пакетов сервера, чтобы убедиться, что у него есть свежий набор ссылок на доступные пакеты. Затем мы будем использовать инструменты упаковки apt
, чтобы извлечь программное обеспечение из репозиториев и установить его в нашей системе:
- sudo apt-get update
- sudo apt-get install phpmyadmin
Во время установки вам будет предложено ввести некоторую информацию. Он спросит вас, какой веб-сервер вы хотите, чтобы программное обеспечение автоматически настраивало. Поскольку Nginx, веб-сервер, который мы используем, не является одним из доступных вариантов, вы можете просто нажать TAB
, а затем ENTER
, чтобы обойти это приглашение.
Следующее приглашение спросит, хотите ли вы, чтобы dbconfig-common
настроил базу данных для использования phpMyAdmin. Чтобы продолжить, выберите «Да». Чтобы разрешить эти изменения, вам потребуется ввести пароль администратора базы данных, который вы настроили во время установки MySQL.
Теперь вам будет предложено выбрать и подтвердить пароль для приложения phpMyAdmin и его базы данных (которая будет создана на этом шаге). Выберите и подтвердите безопасный пароль и запишите его.
Теперь установка будет завершена. Чтобы веб-сервер Nginx правильно находил и обслуживал файлы phpMyAdmin, нам нужно создать символическую ссылку из установочных файлов на корневой каталог нашего документа 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
Чтобы войти, используйте набор учетных данных для действительного пользователя MySQL. Например, для начала хорошим выбором будет пользователь root
и пароль администратора MySQL. После этого вы сможете получить доступ к административному интерфейсу:
Нажмите вокруг, чтобы ознакомиться с интерфейсом.
В следующих двух разделах мы предпримем шаги для защиты нашей новой веб-консоли phpMyAdmin.
Шаг 2 — Измените URL-адрес phpMyAdmin по умолчанию
На этом этапе установка phpMyAdmin должна быть полностью функциональной. Однако, установив веб-интерфейс, мы открыли доступ к нашему серверу базы данных MySQL внешнему миру. Из-за популярности phpMyAdmin и большого объема данных, к которым он может предоставить доступ, подобные установки часто становятся мишенями для атак.
В этом разделе мы «защитим» или заблокируем нашу установку, изменив URL-адрес интерфейса с /phpmyadmin
на что-то нестандартное, чтобы обойти некоторые попытки автоматического перебора ботов.
На предыдущем шаге мы создали символическую ссылку из каталога phpMyAdmin в корень нашего документа, чтобы наш веб-сервер Nginx мог найти и обслужить наши файлы phpMyAdmin. Чтобы изменить URL-адрес нашего интерфейса phpMyAdmin, мы переименуем эту символическую ссылку.
Во-первых, давайте перейдем к корневому каталогу документов Nginx, чтобы лучше понять изменения, которые мы внесем:
- cd /var/www/html/
- ls -l
Вы получите следующий вывод:
Outputtotal 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
в этом каталоге. Мы можем изменить это имя ссылки на любое другое. Это, в свою очередь, изменит URL-адрес доступа phpMyAdmin, что может помочь скрыть конечную точку от ботов, жестко запрограммированных для поиска общих имен конечных точек (таких как \phpmyadmin).
Выберите имя, которое скрывает назначение конечной точки. В этом руководстве мы назовем нашу конечную точку /nothingtosee
, но вы должны выбрать другое имя. Для этого мы просто переименуем ссылку:
- sudo mv phpmyadmin nothingtosee
- ls -l
После выполнения приведенных выше команд вы получите следующий вывод:
Outputtotal 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-адресу, вы получите ошибку 404:
http://server_domain_or_IP/phpmyadmin
Теперь ваш интерфейс phpMyAdmin будет доступен по новому URL-адресу, который мы только что настроили:
http://server_domain_or_IP/nothingtosee
Теперь мы можем дополнительно усилить нашу установку phpMyAdmin, настроив шлюз аутентификации.
Шаг 3 — Настройте шлюз аутентификации Nginx
Следующая функция, которую мы настроим, — это запрос аутентификации, который пользователь должен будет пройти, прежде чем увидеть экран входа в phpMyAdmin. Большинство веб-серверов, включая Nginx, изначально предоставляют эту возможность. Нам просто нужно изменить наш файл конфигурации Nginx с деталями.
Прежде чем мы это сделаем, мы создадим файл паролей, в котором будут храниться учетные данные для аутентификации. Nginx требует, чтобы пароли были зашифрованы с помощью функции crypt()
. Пакет OpenSSL, который уже должен быть установлен на вашем сервере, включает эту функцию.
Чтобы создать зашифрованный пароль, введите:
- openssl passwd
Вам будет предложено ввести и подтвердить пароль, который вы хотите использовать. Затем утилита отобразит зашифрованную версию пароля, которая будет выглядеть примерно так:
OutputO5az.RSPzd.HE
Скопируйте это значение, так как вам нужно будет вставить его в файл аутентификации, который мы будем создавать.
Теперь создайте файл аутентификации. Мы назовем этот файл pma_pass
и поместим его в каталог конфигурации Nginx:
- sudo nano /etc/nginx/pma_pass
В этом файле вы укажете имя пользователя, которое хотите использовать, за которым следует двоеточие (:
), за которым следует зашифрованная версия пароля, полученного вами из openssl passwd
утилита.
Мы собираемся назвать нашего пользователя sammy
, но вы должны выбрать другое имя пользователя. Файл должен выглядеть так:
sammy:O5az.RSPzd.HE
Сохраните и закройте файл, когда закончите.
Теперь мы готовы изменить наш файл конфигурации Nginx. Откройте его в текстовом редакторе, чтобы начать:
- sudo nano /etc/nginx/sites-available/default
В этом файле нам нужно добавить новый раздел location
. Это будет нацелено на местоположение
, которое мы выбрали для нашего интерфейса phpMyAdmin (в этом руководстве мы выбрали /nothingtosee
).
Создайте этот раздел внутри блока server
, но вне любых других блоков. В нашем примере мы поместим наш новый блок location
под блоком /
:
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
в сообщение аутентификации, которое наша подсказка будет отображать для пользователей. Мы не хотим указывать неавторизованным пользователям, что мы защищаем, поэтому не сообщайте конкретных деталей. В нашем примере мы просто будем использовать \Вход администратора.
Затем нам нужно добавить переменную с именем 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
Теперь, если вы посещаете URL-адрес phpMyAdmin в своем веб-браузере (если обновление страницы не работает, вам может потребоваться очистить кеш или использовать другой сеанс браузера, если вы уже использовали phpMyAdmin), вам будет предложено ввести имя пользователя и пароль, которые вы добавили в файл pma_pass
:
http://server_domain_or_IP/nothingtosee
Как только вы введете свои учетные данные, вы попадете на стандартную страницу входа в phpMyAdmin.
В дополнение к обеспечению дополнительного уровня безопасности, этот шлюз поможет защитить ваши журналы MySQL от спамных попыток аутентификации.
Заключение
После завершения этого руководства вы теперь можете управлять своими базами данных MySQL из достаточно безопасного веб-интерфейса. Этот пользовательский интерфейс предоставляет большую часть функций, доступных через командную строку MySQL. Вы можете просматривать базы данных и схемы, выполнять запросы и создавать новые наборы данных и структуры.