Содержание:

Управление базами данных MariaDB или MySQL можно осуществлять через командную строку. Однако такой вариант подходит не для всех пользователей, особенно начинающих. Чтобы облегчить эту задачу, можно воспользоваться веб-интерфейсом phpMyAdmin для управления БД.

В данном руководстве рассмотрено, как установить phpMyAdmin на CentOS 7 с веб-сервером Nginx, а также защитить его от потенциальных злоумышленников. Данный способ также подходит для версий CentOS 6 и CentOS 8.

Подготовка к установке

Технические требования к установке PhpMyAdmin

Установка phpMyAdmin на сервер возможна в случае, если на CentOS уже установлен и настроен стек LEMP  (Linux, Nginx, MariaDB и PHP). Данный комплекс программ необходим для запуска, работы и дополнительной настройки веб-интерфейса PhpMyAdmin.

Установка дополнительных репозиториев

В официальных репозиториях CentOS 7 пакет phpMyAdmin отсутствует. Проблема решается добавлением в систему дополнительного репозитория EPEL (Extra Packages for Enterprise Linux). В нем имеется огромное количество дополнительных пакетов для установки разного ПО, включая phpMyAdmin.

Установка EPEL репозитория выполняется командой:

sudo yum -y install epel-release

Установка phpMyAdmin

Инсталляция PhpMyAdmin производится командой:

sudo yum -y install phpmyadmin

После непродолжительной установки файлы PhpMyAdmin будут распакованы по пути /usr/share/phpMyAdmin/. Даже после установки пакетов, PhpMyAdmin не будет работать, так как отсутствуют необходимые параметры в настройках хоста Nginx.

Настройка Nginx

PhpMyAdmin состоит из веб-страниц, написанных на языке PHP. Чтобы они стали доступны по определённому веб-адресу, нужно в настройки хоста Nginx добавить директиву «location», указывающую на каталог с веб-интерфейсом PhpMyAdmin, а так же набор необходимых параметров для работы с PHP. 

Для внесения параметров необходимо открыть конфигурационный файл Nginx с настройками хоста. По умолчанию это файл «default.conf» (/etc/nginx/conf.d/default.conf).

Открыть конфигурационный файл можно с помощью редактора Nano при помощи следующей команды:

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

В открывшемся файле нужно найти главную директиву «server» и добавить следующий блок «location»:

location /phpmyadmin {
  alias /usr/share/phpMyAdmin/;
  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $request_filename;
    include fastcgi_params;
    fastcgi_ignore_client_abort off;    
  }
  location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    access_log    off;
    log_not_found    off;
    expires 1M;
  }
}

В приведенном выше блоке «127.0.0.1:9000» – порт TCP порта для подключения к PHP. 

Примечание. В CentOS, по умолчанию, PHP-FPM слушает Nginx через TCP порт. В случае, если сервер настроен на работу с PHP через сокет PHP-FPM, нужно изменить строку «fastcgi_pass 127.0.0.1:9000;» на «fastcgi_pass unix:/run/php-fpm/php-fpm.sock;» Где «/run/php-fpm/php-fpm.sock;» – путь до UNIX сокета.

Настройка Nginx

Чтобы сохранить и закрыть файл, нужно нажать «Ctrl+X», потом «Y» и подтвердить изменения нажатием «Enter».

Проверить корректность введённый параметров можно командой:

nginx -t

Должен появится следующий вывод.

Примечание. Если вывод отличается от представленного, нужно проверить правильность внесенного кода в файл конфигурации Nginx. Вполне возможно, что были допущены ошибки при  введении параметров или расстановке скобок «}» в конфигурационном файле.

Для применения параметров нужно перезагрузить Nginx:

sudo systemctl restart nginx

Проверка работоспособности PhpMyAdmin

Проверить работоспособность PhpMyAdmin можно, введя в адресной строке браузера IP-адрес сервера и добавив «/phpmyadmin»:

http:// 194.61.0.6/phpmyadmin/

Вместо «194.61.0.6» нужно ввести актуальный IP-адрес сервера или домена.

После перехода по веб-адресу должна открыться приветственная страница PhpMyAdmin.

Примечание. При возникновении ошибок 403, 502 и подобных стоит проверить правильность указанного в конфиге Nginx пути до UNIX сокета PHP-FPM. Если все параметры указаны верно, можно попробовать перенастроить PHP. 

Вход в PhpMyAdmin

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

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

Войти в оболочку MySQL можно командой:

sudo mysql -u root -p

Примечание. После ввода команды программа запросит пароль root пользователя MySQL. Если пароль не задан, нужно оставить поле «Enter password» пустым и нажать «Enter».

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

CREATE USER 'user'@'localhost' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost' WITH GRANT OPTION;
  • «user» – логин создаваемой учётной записи.
  • «mypassword» – пароль создаваемой учётной записи.

Теперь можно выполнить вход в PhpMyAdmin от имени созданного пользователя. После входа будет открыто окно с интерфейсом PhpMyAdmin.

На этом установка на сервер phpMyAdmin будет закончена. Далее следует защитить к нему доступ от возможности входа сторонних лиц.

Защита phpMyAdmin

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

Обеспечить безопасность можно с помощью двух несложных действий:

  1. Изменить стандартное местоположение phpMyAdmin на другое. Так боты не смогут отследить путь к веб-интерфейсу. 
  2. Создать еще одно окно авторизации, но уже на уровне сервера. Только после его прохождения, появится возможность открыть окно входа в phpMyAdmin.

Изменение местоположения PhpMyAdmin

При настройке Nginx задается стандартный путь до PhpMyAdmin – «/phpmyadmin». Чтобы избежать многочисленных атак ботов, рекомендуется изменить этот адрес на уникальный. 

Для внесения изменений нужно открыть конфигурационный файл Nginx:

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

В открывшемся файле нужно найти блок «location /phpmyadmin {» и изменить слово «phpmyadmin» на уникальное, например «userphp».

Примечание. Местоположение в данном примере — «/userphp». Его следует изменить на другое — соответствующее актуальному.

Остается проверить, все ли сделано правильно, для чего — перейти по старому адресу для входа:

http://IP-адрес/phpmyadmin

Вместо окна авторизации должна появиться «ошибка 404». При этом открыть phpMyAdmin теперь возможно по новому адресу:

http://IP-адрес/userphp

Двухэтапная авторизация PhpMyAdmin

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

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

Генерация зашифрованного пароля

Согласно требованиям Nginx, сохраненные пароли необходимо зашифровать функцией «crypt ()». Она включена в пакет OpenSSL, который устанавливается автоматически вместе с Nginx.

Для создания зашифрованных паролей в терминале используется команда:

openssl passwd

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

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

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

Создание файла авторизации

Можно переходить к созданию самого файла авторизации. В последующем он будет занесён в переменную Nginx «auth_basic_user_file» для обозначения логина и зашифрованного пароля. В этом примере файл авторизации будет назван «pma_pass» и сохранен в папке настроек Nginx:

sudo nano /etc/nginx/pma_pass

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

admin:8s3CCk/u7uOQ6

В приведенном выше примере:

  • «admin» — логин для входа. Для повышения уровня безопасности, рекомендуется придумать собственное и уникальное имя.
  • «8s3CCk/u7uOQ6» — значение зашифрованного пароля, полученное из предыдущих действий.

По завершении ввода остается сохранить и закрыть текстовый редактор.

Настройка Nginx

Можно приступать к редактированию файла настроек веб-сервера Nginx. Его следует запустить в своем текстовом редакторе (в данном примере — Nano):

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

В блок «location /phpmyadmin {» нужно внести следующие две строки:

auth_basic "Admin Login";
auth_basic_user_file /etc/nginx/pma_pass;

В приведенном выше примере:

  • «auth_basic «Admin Login»;» — параметр, отвечающий за показ пользователям окна авторизации. Значение «Admin Login» отвечает за показ дополнительного информационного сообщения пользователям (можно изменить по желанию).
  • «auth_basic_user_file /etc/nginx/pma_pass;» — параметр, указывающий на путь до файла с логином и зашифрованным паролем.

Остается сохранить изменения и закрыть этот файл.

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

sudo systemctl restart nginx

Проверка работы двухэтапной аутентификации

При попытке перехода по веб-адресу phpMyAdmin, браузер покажет окно с запросом ввести логин и пароль, добавленные в файле «pma_pass». 

При попытке авторизоваться с помощью несуществующего логина и пароля, сервер выдаст ошибку «403 Forbidden».