Установка и защита phpMyAdmin в Ubuntu 20.04

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

Благодаря phpMyAdmin пользователи могут управлять MySQL через веб-интерфейс. Данный мануал содержит пошаговые инструкции по установке и защите веб-интерфейса phpMyAdmin в системе Ubuntu 20.04.

Требования

  • Сервер Ubuntu 20.04, настроенный по этому мануалу (с пользователем sudo и настроенным ufw).
  • Стек LAMP (его можно установить с помощью этого мануала).

При использовании программ вроде phpMyAdmin следует учитывать, что она:

  • Взаимодействует с MySQL напрямую;
  • Проходит аутентификацию при помощи учётных данных MySQL;
  • Обрабатывает и возвращает результаты для произвольных запросов SQL.

По этим причинам (а также из-за своей популярности и распространённости) это приложение PHP часто подвергается атакам злоумышленников. Потому ни при каких обстоятельствах его нельзя запускать в удалённой системе по HTTP-соединению. Без SSL/TLS-сертификата для веб-сервера Apache использовать phpMyAdmin очень опасно.

Читайте также:

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

Пакеты phpMyAdmin доступны в стандартном репозитории Ubuntu.

Войдите в систему как пользователь sudo и обновите индекс пакетов

sudo apt update

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

Если вы установили стек LAMP по этому руководству, ряд необходимых модулей уже есть у вас на сервере (их мы устанавливали вместе с php). Сейчас рекомендуется установить эти пакеты:

  • php-mbstring: модуль для обработки строк, которые не поддерживают ASCII, и преобразования их в другие кодировки
  • php-zip: включает загрузку.zip файлов в phpMyAdmin
  • php-gd: обеспечивает поддержку библиотеки GD Graphics
  • php-json: обеспечивает поддержку сериализации JSON для PHP
  • php-curl: обеспечивает взаимодействие PHP с разными типами серверов по разным протоколам.

Чтобы установить эти пакеты, введите следующую команду. Чтобы настроить экземпляр phpMyAdmin, во время установки нужно ответить на ряд вопросов.

  • Выберите apache2 как веб-сервер (обратите внимание: в первом окне ответ apache2 выделен, но по факту не выбран. Если вы не нажмёте пробел, инсталлятор не сможет переместить нужные файлы во время установки. Чтобы выбрать Apache, нажмите пробел, Tab и Enter).
  • Ответьте yes на вопрос, нужно ли использовать dbconfig-common для настройки БД.
  • После чего программа предложит выбрать и подтвердить пароль phpMyAdmin.

Примечание: Если при установке MySQL вы включили плагин Validate Password, это может вызвать ошибку при попытке установить пароль для пользователя phpmyadmin:

mysql said: ERROR 1819 (HY000) at line 1: your password does not satisfy the current policy requirements. Your options are: […]

Чтобы устранить ошибку, выберите в списке предложенных ответов опцию abort, чобы остановить установку. Затем откройте консоль MySQL:

sudo mysql

Если у вас включена парольная аутентификация для пользователя root MySQL, запустите эту команду и затем введите пароль:

mysql -u root -p

В командной строке MySQL запустите следующую команду, чтобы отключить плагин Validate Password. Обратите внимание: эта команда не удалит этот компонент, а просто остановит его загрузку на сервер MySQL:

UNINSTALL COMPONENT "file://component_validate_password";

Теперь можно закрыть клиент MySQL:

exit

Снова попробуйте установить phpmyadmin. На этот раз ошибки быть не должно:

sudo apt install phpmyadmin

Когда установка phpMyAdmin будет завершена, снова откройте командную строку MySQL (с помощью команды sudo mysql or mysql -u root –p) и включите плагин Validate Password.

INSTALL COMPONENT "file://component_validate_password";

Во время установки в каталог /etc/apache2/conf-enabled/ добавляется конфигурационный файл phpMyAdmin. В этом каталоге файл читается автоматически. Чтобы завершить настройку Apache и PHP для поддержки phpMyAdmin, нужно только явно включить PHP-расширение mbstring.

sudo phpenmod mbstring

Перезапустите Apache, чтобы обновить настройки:

sudo systemctl restart apache2

Теперь phpMyAdmin установлен и может взаимодействовать с Apache. Но прежде чем вы сможете начать работу с MySQL при помощи phpMyAdmin, вам нужно настроить привилегии пользователей MySQL.

2: Настройка аутентификации и привилегий

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

Настройка парольного доступа для root-пользователя MySQL

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

Чтобы подключаться к phpMyAdmin как root-пользователь MySQL, измените метод аутентификации. Вместо auth_socket настройте парольную аутентификацию. Для начала откройте командную строку MySQL:

sudo mysql

Затем проверьте, какой метод аутентификации использует ваш пользователь MySQL:

SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+

| user             | authentication_string                     | plugin                | host      |


+------------------+-------------------------------------------+-----------------------+-----------+


| root             |                                           | auth_socket           | localhost |


| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost |


| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost |


| debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost |


| phpmyadmin       | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_password | localhost |


+------------------+-------------------------------------------+-----------------------+-----------+

5 rows in set (0.00 sec)

Как видите, пользователь root использует плагин auth_socket. Чтобы настроить его для поддержки парольной аутентификации, запустите команду ALTER USER (вместо password укажите надежный пароль):

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

Примечание: Эта команда ALTER USER настроит пользователя root MySQL для аутентификации с помощью плагина caching_sha2_password​​. Этот плагин рекомендуется использовать в официальной документации MySQL, поскольку он обеспечивает более надежное шифрование, чем старый, но широко используемый mysql_native_password. Однако некоторые версии PHP плохо поддерживают caching_sha2_password. Эта проблема была устранена в PHP 7.4​​​, но если вы все же получите ошибку при попытке войти в phpMyAdmin, вы можете настроить для root аутентификацию с помощью плагина mysql_native_password:

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

Проверьте, какой метод аутентификации поддерживают ваши пользователи и убедитесь, что root больше не поддерживает auth_socket:

SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+

| user             | authentication_string                     | plugin                | host      |


+------------------+-------------------------------------------+-----------------------+-----------+


| root             | *DE06E242B88EFB1FE4B5083587C260BACB2A6158 | caching_sha2_password | localhost |


| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost |


| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost |


| debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost |


| phpmyadmin       | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_password | localhost |


+------------------+-------------------------------------------+-----------------------+-----------+

5 rows in set (0.00 sec)

Теперь вы знаете, что root пользователь поддерживает парольную аутентификацию, и можете войти в phpMyAdmin как этот пользователь.

Настройка парольной аутентификации для выделенного пользователя MySQL

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

sudo mysql

Если вы включили парольную аутентификацию для пользователя root, вам нужно будет запустить следующую команду и ввести пароль:

mysql -u root -p

Создайте нового пользователя:

CREATE USER '8host'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

Примечание: Опять же, в зависимости от установленной версии PHP вам может потребоваться настроить аутентификацию по плагину mysql_native_password вместо caching_sha2_password:

ALTER USER '8host'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Затем предоставьте новому пользователю соответствующие права. Например, вы можете предоставить ему права на все таблицы в БД, а также возможность добавлять, изменять и удалять пользовательские привилегии с помощью этой команды:

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

Закройте оболочку MySQL:

exit

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

https://your_domain_or_IP/phpmyadmin

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

3: Защита phpMyAdmin

Из-за своей распространённости PhpMyAdmin часто подвергается атакам злоумышленников. Теперь нам необходимо обеспечить интерфейсу достаточный уровень защиты для предотвращения неавторизованного доступа.

Один из самых простых способ защиты phpMyAdmin – размещение шлюза безопасности. Это делается при помощи специальных файлов Apache под названием .htaccess.

Сначала нужно включить поддержку файлов .htaccess, отредактировав конфигурационный файл phpmyadmin.conf.

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

В раздел <Directory /usr/share/phpmyadmin> нужно добавить параметр AllowOverride All:

<Directory /usr/share/phpmyadmin>
Options FollowSymLinks
DirectoryIndex index.php
AllowOverride All
. . .

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

Перезапустите Apache, чтобы обновить настройки:

sudo systemctl restart apache2

Теперь приложение поддерживает файлы .htaccess; осталось создать такой файл.

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

sudo nano /usr/share/phpmyadmin/.htaccess

Вставьте в файл такие строки:

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

Рассмотрим эти строки подробнее:

  • AuthType Basic задает тип авторизации; в данном случае используется аутентификация по паролю с помощью файла паролей .htpasswd.
  • AuthName содержит текст сообщения диалогового окна аутентификации. Чтобы неавторизованные пользователи не могли получить дополнительной информации о закрытом приложении, это сообщение не должно содержать подробностей, а только общие данные.
  • AuthUserFile задает расположение файла паролей htpasswd, который будет использоваться для авторизации. Он должен находиться вне обслуживаемых каталогов. Такой файл будет создан позже.
  • Require valid-user указывает, что доступ к этому ресурсу могут получить только авторизованные пользователи. Именно этот параметр защищает ресурс от неавторизованных пользователей.

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

Файл с паролями нужно создать в каталоге, заданном в директиве AuthUserFile, в данном случае это /etc/phpmyadmin/.htpasswd.

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

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

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

sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

Теперь при входе в подкаталог phpMyAdmin будут запрашиваться учетные данные пользователя:

https://domain_name_or_IP/phpmyadmin
The server http://111.111.11.111:22 requires a username and password. The server says: Restricted Files.
User Name:
Password:

Только после аутентификации пользователь сможет получить доступ к странице авторизации phpMyAdmin. Это установит дополнительный уровень безопасности, который защитит веб-интерфейс phpMyAdmin от атак методом подбора паролей.

Заключение

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

Tags: , , , ,

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