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

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


Предыдущая версия этого руководства была написана Бреннаном Бернесом.

Введение

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

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

Предпосылки

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

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

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

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

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

Если у вас нет существующего домена, настроенного с сертификатом SSL/TLS, вы можете следовать этому руководству по настройке виртуального хоста Apache.

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

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

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

  1. sudo apt update

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

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

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

Имейте в виду, что если вы используете версию PHP, отличную от версии по умолчанию, установленной в учебнике по предварительному стеку LAMP, вам нужно будет установить соответствующие версии этих пакетов модулей. Например, если вы используете PHP версии 8.0, вам потребуется установить пакет php8.0-mbstring вместо стандартного php-mbstring пакет.

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

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

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

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

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

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

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

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

  1. sudo mysql

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

  1. mysql -u root -p

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

  1. UNINSTALL COMPONENT "file://component_validate_password";

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

  1. exit

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

  1. sudo apt install phpmyadmin

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

  1. INSTALL COMPONENT "file://component_validate_password";

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

  1. sudo phpenmod mbstring

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

  1. 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 с вашего терминала:

  1. sudo mysql

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

  1. SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | 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. Чтобы настроить учетную запись root для аутентификации с помощью пароля, выполните следующую команду ALTER USER. Обязательно измените пароль на надежный пароль по вашему выбору:

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

Примечание. Предыдущий оператор ALTER USER устанавливает корневого пользователя 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:

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

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

  1. SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | 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 как пользователь root с паролем, который вы установили для него здесь.

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

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

  1. sudo mysql

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

  1. mysql -u root -p

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

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

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

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

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

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

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

  1. exit

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

https://your_domain_or_IP/phpmyadmin

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

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

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

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

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

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

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

  1. 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:

  1. sudo systemctl restart apache2

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

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

  1. sudo nano /usr/share/phpmyadmin/.htaccess

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

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

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

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

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

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

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

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

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

  1. sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

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

  1. sudo systemctl restart apache2

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

https://domain_name_or_IP/phpmyadmin

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

Заключение

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