# Установка phpMyAdmin на Ubuntu

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

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

В этой инструкции мы расскажем, как установить phpMyAdmin на сервер под управлением Ubuntu 20.04 и добавить к основной защите ещё один уровень безопасности.

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

Важно помнить, что phpMyAdmin обращается напрямую к MySQL при помощи запросов и использует для аутентификации учётные данные пользователей MySQL. Поэтому phpMyAdmin — одна из самых распространённых целей для хакерских атак. Старайтесь не запускать phpMyAdmin на домене, не защищённом SSL-сертификатом и использующим только HTTP-соединение с сервером.

На Джино вы можете подключить бесплатный SSL-сертификат к своему домену — он обеспечит базовую защиту данных от перехвата и последующей расшифровки.

# Установка phpMyAdmin

Чтобы установить phpMyAdmin, воспользуемся apt. Для начала обновим базы данных, если не делали этого раньше:

sudo apt update
sudo apt upgrade

После установки всех необходимых обновлений можно переходить к установке приложения:

sudo apt install phpmyadmin php-mbstring smarty-gettext

Вместе с самим приложением установим два расширения для php — mbstring и gettext. Первое отвечает за работу с многобайтными строками, а второе — за перевод приложения на другие языки.

В процессе установки программа спросит, какой веб-сервер следует настроить для работы с phpMyAdmin, — нам нужно выбрать apache2. Для настройки будет использована утилита dbconfig-common, которая не только настроит Apache для работы с phpMyAdmin и добавит всю необходимую информацию в /etc/apache2/conf-enabled/, но и создаст нового пользователя для phpMyAdmin и попросит задать его пароль.

Будьте внимательны — если в процессе установки программного стека LAMP при установке и настройке MySQL вы использовали утилиту mysql_secure_installation, она будет активна при проверке пароля вновь создаваемого пользователя для phpMyAdmin. При задании пароля нужно будет учитывать её требования к проверке сложности пароля.

После окончания установки вручную запустим расширение mbstring:

sudo phpenmod mbstring

Теперь осталось перезапустить Apache:

sudo systemctl restart apache2

# Настройка аутентификации и прав пользователей

В процессе установки phpMyAdmin автоматически создаётся пользователь phpmyadmin, необходимый программе для завершения установочных процессов. Использовать его для входа в phpMyAdmin, как и пользователя root, крайне не рекомендуется. Обычно для каждой новой базы данных создают отдельного пользователя, наделённого правами на управление только этой базой.

В последних версиях MySQL (начиная с 5.7) для root-пользователя по умолчанию установлен тип аутентифкации auth_socket. Конечно, это удобно для части решаемых задач и делает работу root-пользователя безопаснее, но если для входа нужно использовать удалённую программу — например, phpMyAdmin — это вызывает ряд трудностей.

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

sudo mysql

Проверим методы аутентификации, установленные для всех имеющихся пользователей MySQL:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

В результате на экране должна появиться таблица со всеми пользователями и методами их аутентификации. Нас интересует строчка root — auth_socket:

Изменим метод аутентификации root-пользователя:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Значение password будет новым паролем для root-пользователя, поэтому сделайте его надёжным. Теперь перезагрузим таблицы привилегий, чтобы наши изменения вступили в силу:

FLUSH PRIVILEGES

Повторим команду:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Теперь мы видим, что в строке напротив root появилось значение mysql_native_password.

# Создание нового пользователя

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

mysql> CREATE USER 'user’@'localhost' IDENTIFIED BY 'password';

Нового пользователя нужно будет наделить правами на управление базой данных. Для примера наделим нового пользователя всеми правами на выбранную базу:

GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Теперь можно выйти из mysql.

mysql> exit

Проверим работу phpMyAdmin. Для этого зайдём в браузере на страницу http://your_domain/phpmyadmin.

Если всё работает правильно, вы увидите окно доступа в панель управления phpMyAdmin.

Вы можете зайти в панель управления как root-пользователь или как только что созданный — там будет домашняя страница phpMyAdmin.

# Дополнительная защита phpMyAdmin

Поскольку панель управления phpMyAdmin — один из самых распространённых объектов для атаки, то ещё один уровень защиты будет не лишним.

Мы поместим перед окном авторизации phpMyAdmin дополнительные ворота при помощи встроенного инструмента Apache .htaccess.

Чтобы использовать .htaccess, нужно сначала исправить конфигурационный файл самого Apache.

Поскольку при установке dbconfig-common добавил все настройки phpMyAdmin в Apache, мы просто откроем конфигурационный файл phpMyAdmin и добавим в него возможность использования .htaccess:

sudo vim /etc/apache2/conf-available/phpmyadmin.conf

В секцию <Directory /usr/share/phpmyadmin> нужно добавить строчку AllowOverride All, сохранить сделанные изменения и перезапустить Apache:

sudo systemctl restart apache2

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

sudo vim /usr/share/phpmyadmin/.htaccess

В этом файле укажем следующее:

AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user

Здесь:

  • AuthType указывает на то, какой тип защиты мы будем использовать — Базовый;
  • AuthName отвечает за сообщение, которое будет показываться при неправильном подключении;
  • AuthUserFile — путь, по которому будет размещаться верный пароль, с ним Apache будет сравнивать вводимое значение;
  • Require valid-use сообщает, что только зарегистрированные пользователи базы данных смогут пройти авторизацию.

Теперь создадим пароль, хэшируем и разместим его сразу же в нужной директории:

sudo htpasswd -c /etc/phpmyadmin/.htpasswd User

Здесь User — пользователь, для которого мы задаём пароль.

Если нам нужно будет добавить ещё одного пользователя, это можно будет сделать той же командой, но уже без использования флага -c:

sudo htpasswd -c /etc/phpmyadmin/.htpasswd User

Теперь при попытке получить доступ в консоль phpMyAdmin по адресу http://your_domain/phpmyadmin будет появляться окно с запросом авторизации.