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

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


Введение

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

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

Предпосылки

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

  • Сервер под управлением Ubuntu 18.04. На этом сервере должен быть администратор без полномочий root с привилегиями sudo, а также брандмауэр, настроенный с помощью UFW. Чтобы настроить это, следуйте нашему руководству по первоначальной настройке сервера для Ubuntu 18.04.
  • Стек LAMP, установленный на вашем сервере. Вы можете следовать этому руководству по установке стека LAMP в Ubuntu 18.04, чтобы настроить его.

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

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

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

Выполнив эти шаги, вы готовы приступить к работе с этим руководством.

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

Для начала мы установим phpMyAdmin из стандартных репозиториев Ubuntu.

Сначала обновите индекс пакетов вашего сервера:

  1. sudo apt update

Затем используйте apt, чтобы извлечь файлы и установить их в вашей системе:

  1. sudo apt install phpmyadmin php-mbstring php-gettext

Это задаст вам несколько вопросов, чтобы правильно настроить вашу установку.

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

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

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

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

  1. sudo phpenmod mbstring

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

  1. sudo systemctl restart apache2

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

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

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

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

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

Чтобы войти в phpMyAdmin в качестве корневого пользователя MySQL, вам потребуется переключить его метод аутентификации с auth_socket на mysql_native_password, если вы еще этого не сделали. Для этого откройте командную строку 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 | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | mysql_native_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)

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

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

Затем запустите FLUSH PRIVILEGES, который сообщает серверу перезагрузить таблицы разрешений и применить ваши новые изменения:

  1. FLUSH PRIVILEGES;

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

  1. SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *DE06E242B88EFB1FE4B5083587C260BACB2A6158 | mysql_native_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | mysql_native_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)

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

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

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

  1. sudo mysql

Примечание. Если у вас включена аутентификация по паролю, как описано в предыдущем разделе, вам потребуется использовать другую команду для доступа к оболочке MySQL. Следующее запустит ваш клиент MySQL с правами обычного пользователя, и вы получите права администратора в базе данных только после аутентификации:

  1. mysql -u root -p

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

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

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

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

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

  1. exit

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

http://your_domain_or_IP/phpmyadmin

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

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

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

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

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

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

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

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

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

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

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

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

  1. sudo systemctl restart apache2

Теперь, когда вы разрешили использование .htaccess для своего приложения, вам нужно создать файл .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

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

https://domain_name_or_IP/phpmyadmin

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

Заключение

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