Как установить и защитить phpMyAdmin с Nginx в Ubuntu 16.04

Вступление

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

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

Предпосылки

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

  • Во-первых, предположим, что вы используете пользователя без полномочий root с привилегиями sudo, как описано в шагах 1-4initial server setup of Ubuntu 16.04.

  • Мы также предполагаем, что вы завершили установку LEMP (Linux, Nginx, MySQL и PHP) на вашем сервере Ubuntu 16.04. Если вы еще этого не сделали, следуйте инструкциям поinstalling a LEMP stack on Ubuntu 16.04. Обязательно запишите свой пароль администратора базы данных MySQL.

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

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

Выполнив все эти предварительные шаги, вы готовы начать работу с этим руководством.

[[step-1 -—- install-phpmyadmin]] == Шаг 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

Наконец, нам нужно включить модуль PHPmcrypt, на который полагается phpMyAdmin. Это было установлено с phpMyAdmin, поэтому мы включим его и перезапустим наш процессор PHP:

sudo phpenmod mcrypt
sudo systemctl restart php7.0-fpm

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

http://server_domain_or_IP/phpmyadmin

phpMyAdmin login screen

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

phpMyAdmin admin interface

Нажмите вокруг, чтобы ознакомиться с интерфейсом.

В следующих двух разделах мы предпримем шаги для защиты нашей новой веб-консоли phpMyAdmin.

[[step-2 -—- change-the-default-phpmyadmin-url]] == Шаг 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 404 error

Теперь ваш интерфейс phpMyAdmin будет доступен по новому URL-адресу, который мы только что настроили:

http://server_domain_or_IP/nothingtosee

phpMyAdmin login screen

Теперь мы можем дополнительно укрепить нашу установку phpMyAdmin, настроив шлюз аутентификации.

[[step-3 -—- set-up-an-nginx-authentication-gateway]] == Шаг 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, но вы должны выбрать другое имя пользователя. Файл должен выглядеть так:

/etc/nginx/pma_pass

sammy:O5az.RSPzd.HE

Сохраните и закройте файл, когда вы закончите.

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

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

В этом файле нам нужно добавить новый разделlocation. Это будет нацелено наlocation, которые мы выбрали для нашего интерфейса phpMyAdmin (мы выбрали/nothingtosee в этом руководстве).

Создайте этот раздел внутри блокаserver, но вне любых других блоков. В нашем примере мы поместим наш новый блокlocation под блоком/:

/etc/nginx/sites-available/default

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 запросит у пользователя данные для аутентификации и проверит, соответствуют ли введенные значения тому, что он находит в указанном файле.

После того, как мы закончим, файл должен выглядеть так:

/etc/nginx/sites-available/default

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

Nginx authentication page

Как только вы введете свои учетные данные, вы попадете на стандартную страницу входа phpMyAdmin.

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

Заключение

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

Related