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

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

Вступление

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

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

Предпосылки

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

Во-первых, предположим, что на вашем сервере есть пользователь, отличный отroot, с привилегиямиsudo, а также брандмауэр, настроенный с помощьюufw, как описано вinitial server setup guide for Ubuntu 18.04.

Мы также предполагаем, что вы завершили установку LAMP (Linux, Apache, MySQL и PHP) на свой сервер Ubuntu 18.04. Если это еще не сделано, вы можете следовать этому руководству наinstalling a LAMP stack on Ubuntu 18.04.

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

  • Общается напрямую с вашей установкой MySQL

  • Обрабатывает аутентификацию с использованием учетных данных MySQL

  • Выполняет и возвращает результаты для произвольных запросов SQL

По этим причинам, а также потому, что это широко распространенное PHP-приложение, которое часто предназначено для атак, вы никогда не должны запускать phpMyAdmin в удаленных системах через обычное HTTP-соединение. Если у вас нет существующего домена, настроенного с использованием сертификата SSL / TLS, вы можете следовать этому руководству наsecuring Apache with Let’s Encrypt on Ubuntu 18.04. Это потребует от васregister a domain name,create DNS records for your server иset up an Apache Virtual Host.

Когда вы закончите с этими шагами, вы готовы начать работу с этим руководством.

[[step-1 -—- install-phpmyadmin]] == Шаг 1. Установка phpMyAdmin

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

Это делается путем обновления индекса пакета вашего сервера и последующего использования системы упаковкиapt для извлечения файлов и их установки в вашей системе:

sudo apt update
sudo apt install phpmyadmin php-mbstring php-gettext

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

[.warning] #Warning: Когда появляется подсказка, выделяется «apache2», но выбранnot. Если вы не нажметеSPACE, чтобы выбрать Apache, установщикnot переместит необходимые файлы во время установки. НажмитеSPACE,TAB, а затемENTER, чтобы выбрать Apache.
#

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

  • ВыберитеYes, когда вас спросят, использовать лиdbconfig-common для настройки базы данных.

  • Затем вас попросят выбрать и подтвердить пароль приложения MySQL для phpMyAdmin.

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

sudo phpenmod mbstring

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

sudo systemctl restart apache2

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

[[step-2 -—- adjusting-user-authentication-and-privileges]] == Шаг 2 - Настройка аутентификации и привилегий пользователя

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

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

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

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

sudo mysql

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

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. Обязательно заменитеpassword на надежный пароль по вашему выбору:

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

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

FLUSH PRIVILEGES;

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

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:

sudo mysql

[.Примечание]##

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

mysql -u root -p

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

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

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

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

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

exit

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

http://your_domain_or_IP/phpmyadmin

phpMyAdmin login screen

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

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

phpMyAdmin user interface

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

[[step-3 -—- securing-your-phpmyadmin-instance]] == Шаг 3. Защита вашего экземпляра phpMyAdmin

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

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

Отредактируйте связанный файл, который был помещен в ваш каталог конфигурации Apache:

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

Добавьте директивуAllowOverride All в раздел<Directory /usr/share/phpmyadmin> файла конфигурации, например:

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


    Options FollowSymLinks
    DirectoryIndex index.php
    AllowOverride All
    . . .

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

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

sudo systemctl restart apache2

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

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

sudo nano /usr/share/phpmyadmin/.htaccess

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

/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:

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

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

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

sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

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

https://domain_name_or_IP/phpmyadmin

phpMyAdmin apache password

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

Заключение

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

Related