Как установить и защитить 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.
Сначала обновите индекс пакетов вашего сервера:
- sudo apt update
Затем используйте apt
, чтобы извлечь файлы и установить их в вашей системе:
- 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
, что вы можете сделать, набрав:
- sudo phpenmod mbstring
После этого перезапустите Apache, чтобы ваши изменения были распознаны:
- 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 с вашего терминала:
- 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
. Обязательно измените пароль
на надежный пароль по вашему выбору:
- 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
Примечание. Если у вас включена аутентификация по паролю, как описано в предыдущем разделе, вам потребуется использовать другую команду для доступа к оболочке 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
Войдите в интерфейс либо как root, либо с новым именем пользователя и паролем, которые вы только что настроили.
Когда вы войдете в систему, вы попадете в пользовательский интерфейс phpMyAdmin:
Теперь, когда вы можете подключаться и взаимодействовать с phpMyAdmin, все, что осталось сделать, это усилить безопасность вашей системы, чтобы защитить ее от злоумышленников.
Шаг 3 — Защита вашего экземпляра phpMyAdmin
Из-за своего повсеместного распространения phpMyAdmin является популярной мишенью для злоумышленников, и вам следует проявлять особую осторожность, чтобы предотвратить несанкционированный доступ. Один из самых простых способов сделать это — разместить шлюз перед всем приложением, используя встроенные в Apache функции аутентификации и авторизации .htaccess
.
Для этого вы должны сначала разрешить использование переопределений файла .htaccess
, отредактировав файл конфигурации Apache.
Используйте свой любимый текстовый редактор, чтобы отредактировать связанный файл, который был помещен в каталог конфигурации Apache. В этом примере используется nano
:
- 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:
- sudo systemctl restart apache2
Теперь, когда вы разрешили использование .htaccess
для своего приложения, вам нужно создать файл .htaccess
, чтобы фактически реализовать некоторую безопасность.
Для того, чтобы это было успешно, файл должен быть создан в каталоге приложения. Вы можете создать необходимый файл и открыть его в текстовом редакторе с правами суперпользователя, набрав:
- 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
:
- sudo htpasswd -c /etc/phpmyadmin/.htpasswd username
Вам будет предложено выбрать и подтвердить пароль для создаваемого пользователя. После этого создается файл с введенным вами хешированным паролем.
Если вы хотите ввести дополнительного пользователя, вам нужно сделать это без флага -c
, например:
- sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser
Теперь при доступе к подкаталогу phpMyAdmin вам будет предложено ввести дополнительное имя учетной записи и пароль, которые вы только что настроили:
https://domain_name_or_IP/phpmyadmin
После входа в систему аутентификации Apache вы попадете на обычную страницу аутентификации phpMyAdmin, чтобы ввести свои учетные данные MySQL. Эта настройка добавляет дополнительный уровень безопасности, что желательно, поскольку в прошлом phpMyAdmin страдал от уязвимостей.
Заключение
Теперь у вас должен быть настроен phpMyAdmin и он готов к использованию на вашем сервере Ubuntu 18.04. Используя этот интерфейс, вы можете легко создавать базы данных, пользователей, таблицы и т. д., а также выполнять обычные операции, такие как удаление и изменение структур и данных.