Как установить и защитить phpMyAdmin с помощью Nginx на сервере CentOS 7

Вступление

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

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

Предпосылки

Прежде чем мы начнем, необходимо выполнить несколько требований.

Чтобы убедиться, что у вас есть прочная база для построения этой системы, вам следует пройти через нашиinitial server setup guide for CentOS 7. Среди прочего, это поможет вам настроить пользователя без полномочий root с доступомsudo для административных команд.

Вторым условием, которое необходимо выполнить для начала работы с этим руководством, является установка стека LEMP (Linux, Nginx, MariaDB и PHP) на вашем сервере CentOS 7. Это платформа, которую мы будем использовать для обслуживания нашего интерфейса phpMyAdmin (MariaDB также является программным обеспечением для управления базами данных, которым мы хотим управлять). Если у вас еще нет установленного LEMP на вашем сервере, следуйте нашему руководству поinstalling LEMP on CentOS 7.

Когда ваш сервер находится в правильно работающем состоянии после выполнения этих руководств, вы можете продолжить с этой страницы.

[[step-one -—- install-phpmyadmin]] == Шаг первый - установите phpMyAdmin

Поскольку наша платформа LEMP уже установлена, мы можем начать установку программного обеспечения phpMyAdmin. К сожалению, phpMyAdmin недоступен в репозитории CentOS 7 по умолчанию.

Чтобы получить нужные нам пакеты, нам нужно добавить дополнительное репо в нашу систему. Репозиторий EPEL (пакетыExtraPдляEnterpriseLinux) содержит множество дополнительных пакетов, включая пакет phpMyAdmin, который мы ищем.

К счастью, процедура добавления репозитория EPEL стала намного проще. На самом деле существует пакет под названиемepel-release, который перенастраивает наш менеджер пакетов для использования репозиториев EPEL.

Мы можем установить это сейчас, набрав:

sudo yum install epel-release

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

sudo yum install phpmyadmin

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

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

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

sudo systemctl restart php-fpm

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

http://server_domain_or_IP/phpMyAdmin

phpMyAdmin login screen

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

phpMyAdmin admin interface

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

[[step-two -—- secure-your-phpmyadmin-instance]] == Шаг второй - защитите свой экземпляр phpMyAdmin

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

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

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

Изменение места доступа приложения

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

Чтобы изменить URL, по которому можно получить доступ к нашему интерфейсу phpMyAdmin, нам просто нужно переименовать символическую ссылку. Перейдите в корневой каталог документов 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 404 error

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

http://server_domain_or_IP/nothingtosee

phpMyAdmin login screen

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

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

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

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

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

openssl passwd

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

O5az.RSPzd.HE

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

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

sudo nano /etc/nginx/pma_pass

В этом файле вам просто нужно указать имя пользователя, которое вы хотите использовать, затем двоеточие (:), а затем зашифрованную версию вашего пароля, которую вы получили от утилитыopenssl passwd.

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

demo:O5az.RSPzd.HE

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

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

sudo nano /etc/nginx/conf.d/default.conf

В этом файле нам нужно добавить новый раздел местоположения. Это будет нацелено на расположение, которое мы выбрали для нашего интерфейса 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 systemctl restart nginx

Теперь, если мы посетим наше местоположение phpMyAdmin в нашем веб-браузере (вам может потребоваться очистить кеш или использовать другой сеанс браузера, если вы уже использовали phpMyAdmin), вам будет предложено ввести имя пользователя и пароль, которые вы добавили вpma_pass файл:

http://server_domain_or_IP/nothingtosee

Nginx authentication page

После ввода учетных данных вы попадете на обычную страницу входа phpMyAdmin. Этот дополнительный уровень защиты поможет сохранить ваши журналы MySQL чистыми от попыток аутентификации в дополнение к дополнительным преимуществам безопасности.

Заключение

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

Related