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

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

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

Требования

Чтобы обеспечить надёжную основу для связки phpMyAdmin+Nginx, нужно выполнить начальную настройку сервера CentOS 7 и создать не-рутового пользователя с доступом к sudo.

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

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

К сожалению, стандартные репозитории CentOS 7 не предоставляют пакетов этой программы, потому нужно добавить репозиторий EPEL.

EPEL (ExtraPackages for Enterprise Linux) содержит множество дополнительных пакетов, в том числе и phpMyAdmin.

Процесс добавления репозитория EPEL стал намного проще. Для этого нужно установить пакет epel-release, который перенастраивает менеджер пакетов для использования EPEL.

Чтобы установить epel-release, введите:

sudo yum install epel-release

Теперь у вас есть доступ к репозиторию EPEL. Используйте менеджер пакетов yum, чтобы установить phpMyAdmin:

sudo yum install phpmyadmin

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

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

Также нужно перезапустить процессор PHP, чтобы убедиться, что он может загружать только что установленные дополнительные модули.

sudo systemctl restart php-fpm

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

http://server_domain_or_IP/phpMyAdmin

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

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

2: Защита phpMyAdmin

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

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

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

Изменение местонахождения phpMyAdmin

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

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

cd /usr/share/nginx/html
ls -l
-rw-r--r-- 1 root root 537 Aug  5 08:15 50x.html
-rw-r--r-- 1 root root 612 Aug  5 08:15 index.html
lrwxrwxrwx 1 root root  21 Aug  6 17:29 phpMyAdmin -> /usr/share/phpMyAdmin

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

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

sudo mv phpMyAdmin nothingtosee
ls -l
total 8
-rw-r--r-- 1 root root 537 Aug  5 08:15 50x.html
-rw-r--r-- 1 root root 612 Aug  5 08:15 index.html
lrwxrwxrwx 1 root root  21 Aug  6 17:29 nothingtosee -> /usr/share/phpMyAdmin

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

http://server_domain_or_IP/phpMyAdmin

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

http://server_domain_or_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/conf.d/default.conf

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

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

server {
. . .
location / {
try_file $uri $uri/ =404;
}
location /nothingtosee {
}
. . .
}

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

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

В результате блок выглядит так:

server {
. . .
location / {
try_file $uri $uri/ =404;
}
location /nothingtosee {
auth_basic "Admin Login";
auth_basic_user_file /etc/nginx/pma_pass;
}
. . .
}

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

Чтобы активировать новый шлюз авторизации, перезапустите веб-сервер:

sudo systemctl restart nginx

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

http://server_domain_or_IP/nothingtosee

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

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

Заключение

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

Tags: , , , ,

Добавить комментарий