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

Реляционные системы управления базами данных, такие как MySQL, необходимы для корректной работы большинства веб-сайтов и приложений. Однако не все пользователи обладают навыками управления такими СУБД из командной строки.

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

Требования

Чтобы обеспечить надёжную основу для сборки этой связки, нужно выполнить начальную настройку сервера Ubuntu 14.04 и создать пользователя с расширенными привилегиями (т.е., с доступом к sudo).

Кроме того, необходимо предварительно установить группу программ LEMP (Linux, Nginx, MySQL, PHP). Эта платформа необходима для обслуживания интерфейса phpMyAdmin. Чтобы получить инструкции по установке этого программного стека, читайте это руководство.

Подготовив сервер, приступайте к выполнению руководства.

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

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

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

sudo apt-get update
sudo apt-get install phpmyadmin

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

Следующая подсказка спросит, нужно ли базу данных для phpmyadmin при помощи dbconfig-common. Выберите Yes, чтобы продолжить.

Теперь нужно ввести пароль администратора MySQL, созданный во время установки СУБД. После этого создайте и подтвердите пароль для новой БД, созданной только что для phpMyAdmin.

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

sudo ln -s /usr/share/phpmyadmin /usr/share/nginx/html

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

sudo php5enmod mcrypt

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

http://домен_или_IP_сервера/phpmyadmin

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

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

2: Защита phpMyAdmin

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

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

Чтобы уменьшить риск взлома, можно использовать две стратегии. Во-первых, можно изменить местонахождение установки (сейчас это /phpmyadmin), чтобы обойти ботов, которые пытаются взломать сервер методом автоматизированного прямого подбора пароля. Также можно создать дополнительный шлюз аутентификации на уровне веб-сервера, который нужно пройти, чтобы получить доступ к экрану входа в PhpMyAdmin.

Изменение расположения phpMyAdmin

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

Чтобы изменить URL, по которому находится phpMyAdmin, нужно просто переименовать символическую ссылку. Перейдите в каталог каталог document root веб-сервера Nginx:

cd /usr/share/nginx/html
ls -l
total 8
-rw-r--r-- 1 root root 537 Mar  4 06:46 50x.html
-rw-r--r-- 1 root root 612 Mar  4 06:46 index.html
lrwxrwxrwx 1 root root  21 Aug  6 10:50 phpmyadmin -> /usr/share/phpmyadmin

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

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

sudo mv phpmyadmin nothingtosee
ls -l
total 8
-rw-r--r-- 1 root root 537 Mar  4 06:46 50x.html
-rw-r--r-- 1 root root 612 Mar  4 06:46 index.html
lrwxrwxrwx 1 root root  21 Aug  6 10:50 nothingtosee -> /usr/share/phpmyadmin

Теперь попробуйте посетить предыдущее местонахождение установки phpMyAdmin; на экране появится ошибка 404.

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

Интерфейс phpMyAdmin доступен по новой ссылке:

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

Настройка шлюза авторизации веб-сервера

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

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

Сначала нужно создать файл паролей для хранения учётных данных. 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

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

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

server {
. . .
location / {
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: , , , , , ,

3 комментария

  • Борис says:

    А почему в etc/nginx/sites-available/default вы показываете каталог
    $ root /var/www/html;
    а ссылку создаете:
    $ sudo ln -s /usr/share/phpmyadmin /usr/share/nginx/html
    ????

    Правильно наверное:
    sudo ln -s /usr/share/phpmyadmin /var/www/html ???

    • Максим says:

      Нет неправильно, т. к. /usr/share/nginx/html – это каталог (document root) сервера nginx, сервер изначально “смотрит” в него. Чтобы сервер nginx мог обрабатывать файлы phpmyadmin, в этот каталог и нужно разместить символьную ссылку на phpmyadmin, а он устанавливается по-умолчанию в директорию /usr/share/phpmyadmin. То есть, как и написано в статье.

      • Максим says:

        Не совсем корректно написал, поправлюсь:
        Чтобы Nginx смог правильно обрабатывать файлы phpMyAdmin, нужно создать символьную ссылку на каталог document root сервера Nginx и разместить ее в этом каталоге, как в статье:
        sudo ln -s /usr/share/phpmyadmin /usr/share/nginx/html

Добавить комментарий для Максим Отменить ответ