# Установка 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
будет появляться окно с запросом авторизации.