Поиск по сайту:

Как установить и защитить phpMyAdmin в Ubuntu


Введение

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

phpMyAdmin был создан для того, чтобы пользователи могли взаимодействовать с MySQL через веб-интерфейс. В этом руководстве мы обсудим, как установить и защитить phpMyAdmin, чтобы вы могли безопасно использовать его для управления базами данных в системе Ubuntu.

Как установить и защитить phpMyAdmin в Ubuntu

  1. Установка phpMyAdmin
  2. Настройка аутентификации пользователя и привилегий
  3. Защита вашего экземпляра phpMyAdmin

Предварительные условия

Для выполнения этого руководства вам понадобится:

  • Сервер Ubuntu. На этом сервере должен быть пользователь без полномочий root с правами администратора и брандмауэр, настроенный с помощью ufw. Чтобы настроить это, следуйте нашему руководству по первоначальной настройке сервера для Ubuntu.
  • Стек LAMP (Linux, Apache, MySQL и PHP), установленный на вашем сервере Ubuntu. Если это еще не завершено, вы можете воспользоваться этим руководством по установке стека LAMP в Ubuntu.

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

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

По этим причинам, а также поскольку это широко распространенное PHP-приложение, которое часто подвергается атакам, никогда не следует запускать phpMyAdmin на удаленных системах через простое HTTP-соединение.

Если у вас нет существующего домена, настроенного с использованием сертификата SSL/TLS, вы можете воспользоваться этим руководством по обеспечению безопасности Apache с помощью Let’s Encrypt в Ubuntu. Для этого вам потребуется зарегистрировать доменное имя, создать записи DNS для вашего сервера и настроить виртуальный хост Apache.

Шаг 1 — Установка phpMyAdmin

Вы можете использовать APT для установки phpMyAdmin из репозиториев Ubuntu по умолчанию.

Как пользователь sudo без полномочий root, обновите индекс пакетов вашего сервера, если вы не делали этого в последнее время:

sudo apt update

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

Если вы следовали предварительному руководству по стеку LAMP, несколько из этих модулей будут установлены вместе с пакетом php. Однако рекомендуется также установить следующие пакеты:

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

Запустите следующую команду, чтобы установить эти пакеты в вашу систему. Однако обратите внимание, что процесс установки требует от вас некоторых действий для правильной настройки phpMyAdmin. Вскоре мы рассмотрим эти варианты:

sudo apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl

Вот параметры, которые вам следует выбрать при появлении запроса, чтобы правильно настроить установку:

  • Для выбора сервера выберите apache2.

Внимание! При появлении запроса «apache2» выделен, но не выбран. Если вы не нажмете ПРОБЕЛ, чтобы выбрать Apache, установщик не переместит необходимые файлы во время установки. Нажмите SPACE, TAB, а затем ENTER, чтобы выбрать Apache.

  • Когда вас спросят, использовать ли dbconfig-common для настройки базы данных, выберите Да.
  • Затем вам будет предложено выбрать и подтвердить пароль приложения MySQL для phpMyAdmin.

Примечание. Предполагая, что вы установили MySQL, выполнив шаг 2 предварительного руководства по стеку LAMP, возможно, вы решили включить плагин проверки пароля. На момент написания этой статьи включение этого компонента вызовет ошибку при попытке установить пароль для пользователя phpmyadmin:

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

sudo mysql

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

mysql -u root -p

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

UNINSTALL COMPONENT "file://component_validate_password";

После этого вы можете закрыть клиент MySQL:

exit

Затем попробуйте снова установить пакет phpmyadmin, и он будет работать как положено:

sudo apt install phpmyadmin

После установки phpMyAdmin вы можете еще раз открыть приглашение MySQL с помощью sudo mysql или mysql -u root -p, а затем запустить следующую команду, чтобы повторно включить проверку пароля. компонент:

INSTALL COMPONENT "file://component_validate_password";

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

sudo phpenmod mbstring

После этого перезапустите Apache, чтобы ваши изменения были распознаны:

sudo systemctl restart apache2

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

Шаг 2 — Настройка аутентификации пользователя и привилегий

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

Настройка доступа по паролю для корневой учетной записи MySQL

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

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

sudo mysql

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

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

+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user             | authentication_string                                                  | plugin                | host      |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$I:jOry?]Sy<|qhQRj3fBRQ43i4UJxrpm.IaT6lOHkgveJjmeIjJrRe6         | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| phpmyadmin       | $A$005$?#{Z?`gN!c2az)}V-INCWXSuVdqB9zWteH1IkZfTe/rOLgVhSzEMM9R3G6K9    | caching_sha2_password | localhost |
| root             |                                                                        | auth_socket           | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
6 rows in set (0.00 sec)

Этот пример вывода показывает, что пользователь root действительно проходит аутентификацию с помощью плагина auth_socket. Чтобы настроить учетную запись root для аутентификации с помощью пароля, выполните следующую команду ALTER USER. Обязательно замените пароль на надежный пароль по вашему выбору:

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

Примечание. Предыдущий оператор ALTER USER устанавливает root пользователя MySQL для аутентификации с помощью плагина caching_sha2_password. Согласно официальной документации MySQL, caching_sha2_password является предпочтительным плагином аутентификации MySQL, поскольку он обеспечивает более безопасное шифрование паролей, чем старый, но все еще широко используемый, mysql_native_password.

Однако некоторые версии PHP ненадежно работают с caching_sha2_password. PHP сообщил, что эта проблема была исправлена в 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      |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$I:jOry?]Sy<|qhQRj3fBRQ43i4UJxrpm.IaT6lOHkgveJjmeIjJrRe6         | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| phpmyadmin       | $A$005$?#{Z?`gN!c2az)}V-INCWXSuVdqB9zWteH1IkZfTe/rOLgVhSzEMM9R3G6K9    | caching_sha2_password | localhost |
| root             | $A$005$3y�y|Z?'_[} ZyVHuESVwNmjKWOH/ndETwS.Kty0IH7UfiXjOfVvyWroy4a.   | caching_sha2_password | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
6 rows in set (0.00 sec)

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

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

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

sudo mysql

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

mysql -u root -p

Оттуда создайте нового пользователя и дайте ему надежный пароль:

CREATE USER 'sammy'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

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

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

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

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

После этого выйдите из оболочки MySQL:

exit

Теперь вы можете получить доступ к веб-интерфейсу, посетив доменное имя или общедоступный IP-адрес вашего сервера, а затем /phpmyadmin:

https://your_domain_or_IP/phpmyadmin

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

Когда вы войдете в систему, вы попадете в пользовательский интерфейс phpMyAdmin:

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

Шаг 3 — Защита вашего экземпляра phpMyAdmin

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

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

Используйте предпочитаемый вами текстовый редактор для редактирования файла phpmyadmin.conf, который находится в вашем каталоге конфигурации Apache. Здесь мы будем использовать nano:

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

Добавьте директиву AllowOverride All в раздел файла конфигурации, например:

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

Добавив эту строку, сохраните и закройте файл. Если вы использовали nano для редактирования файла, сделайте это, нажав CTRL + X, Y, а затем ENTER. .

Чтобы применить внесенные изменения, перезапустите Apache:

sudo systemctl restart apache2

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

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

sudo nano /usr/share/phpmyadmin/.htaccess

В этом файле введите следующую информацию:

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

Вот что означает каждая из этих строк:

  • AuthType Basic: эта строка определяет тип аутентификации, который вы реализуете. Этот тип будет реализовывать аутентификацию по паролю с использованием файла паролей.
  • AuthName: устанавливает сообщение для диалогового окна аутентификации. Вам следует сохранить этот общий вариант, чтобы неавторизованные пользователи не получили никакой информации о том, что защищается.
  • AuthUserFile: задает расположение файла паролей, который будет использоваться для аутентификации. Это должно находиться за пределами обслуживаемых каталогов. Мы создадим этот файл в ближайшее время.
  • Требовать допустимого пользователя: указывает, что доступ к этому ресурсу должен быть предоставлен только прошедшим проверку пользователям. Это то, что на самом деле предотвращает вход неавторизованных пользователей.

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

Местоположение, которое вы выбрали для файла паролей: /etc/phpmyadmin/.htpasswd. Теперь вы можете создать этот файл и передать его первому пользователю с помощью утилиты htpasswd:

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

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

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

sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

Затем перезапустите Apache, чтобы включить аутентификацию .htaccess:

sudo systemctl restart apache2

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

https://domain_name_or_IP/phpmyadmin

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

Заключение

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