- Установка и защита phpMyAdmin в Ubuntu 20.04
- Требования
- 1: Установка phpMyAdmin
- 2: Настройка аутентификации и привилегий
- Настройка парольного доступа для root-пользователя MySQL
- Настройка парольной аутентификации для выделенного пользователя MySQL
- 3: Защита phpMyAdmin
- Заключение
- Как создать нового пользователя и настроить права доступа в MySQL
- Как создать нового пользователя в MySQL
- Как настроить права доступа для пользователя в MySQL
Установка и защита phpMyAdmin в Ubuntu 20.04
Для корректной работы многих веб-проектов нужна система управления базами данных (СУБД), например, MySQL. Однако взаимодействовать с системой исключительно с помощью командной строки MySQL не всегда удобно.
Благодаря phpMyAdmin пользователи могут управлять MySQL через веб-интерфейс. Данный мануал содержит пошаговые инструкции по установке и защите веб-интерфейса phpMyAdmin в системе Ubuntu 20.04.
Требования
- Сервер Ubuntu 20.04, настроенный по этому мануалу (с пользователем sudo и настроенным ufw).
- Стек LAMP (его можно установить с помощью этого мануала).
При использовании программ вроде phpMyAdmin следует учитывать, что она:
- Взаимодействует с MySQL напрямую;
- Проходит аутентификацию при помощи учётных данных MySQL;
- Обрабатывает и возвращает результаты для произвольных запросов SQL.
По этим причинам (а также из-за своей популярности и распространённости) это приложение PHP часто подвергается атакам злоумышленников. Потому ни при каких обстоятельствах его нельзя запускать в удалённой системе по HTTP-соединению. Без SSL/TLS-сертификата для веб-сервера Apache использовать phpMyAdmin очень опасно.
Читайте также:
1: Установка phpMyAdmin
Пакеты phpMyAdmin доступны в стандартном репозитории Ubuntu.
Войдите в систему как пользователь sudo и обновите индекс пакетов
sudo apt update
Теперь можно начинать установку phpmyadmin. Также официальная документация рекомендует установить пару расширений PHP, чтобы получить доступ к дополнительным функциям и улучшить производительность.
Если вы установили стек LAMP по этому руководству, ряд необходимых модулей уже есть у вас на сервере (их мы устанавливали вместе с php). Сейчас рекомендуется установить эти пакеты:
- php-mbstring: модуль для обработки строк, которые не поддерживают ASCII, и преобразования их в другие кодировки
- php-zip: включает загрузку.zip файлов в phpMyAdmin
- php-gd: обеспечивает поддержку библиотеки GD Graphics
- php-json: обеспечивает поддержку сериализации JSON для PHP
- php-curl: обеспечивает взаимодействие PHP с разными типами серверов по разным протоколам.
Чтобы установить эти пакеты, введите следующую команду. Чтобы настроить экземпляр phpMyAdmin, во время установки нужно ответить на ряд вопросов.
- Выберите apache2 как веб-сервер (обратите внимание: в первом окне ответ apache2 выделен, но по факту не выбран. Если вы не нажмёте пробел, инсталлятор не сможет переместить нужные файлы во время установки. Чтобы выбрать Apache, нажмите пробел, Tab и Enter).
- Ответьте yes на вопрос, нужно ли использовать dbconfig-common для настройки БД.
- После чего программа предложит выбрать и подтвердить пароль phpMyAdmin.
Примечание: Если при установке MySQL вы включили плагин Validate Password, это может вызвать ошибку при попытке установить пароль для пользователя phpmyadmin:
mysql said: ERROR 1819 (HY000) at line 1: your password does not satisfy the current policy requirements. Your options are: […]
Чтобы устранить ошибку, выберите в списке предложенных ответов опцию abort, чобы остановить установку. Затем откройте консоль MySQL:
Если у вас включена парольная аутентификация для пользователя root MySQL, запустите эту команду и затем введите пароль:
В командной строке MySQL запустите следующую команду, чтобы отключить плагин Validate Password. Обратите внимание: эта команда не удалит этот компонент, а просто остановит его загрузку на сервер MySQL:
UNINSTALL COMPONENT «file://component_validate_password»;
Теперь можно закрыть клиент MySQL:
Снова попробуйте установить phpmyadmin. На этот раз ошибки быть не должно:
sudo apt install phpmyadmin
Когда установка phpMyAdmin будет завершена, снова откройте командную строку MySQL (с помощью команды sudo mysql or mysql -u root –p) и включите плагин Validate Password.
INSTALL COMPONENT «file://component_validate_password»;
Во время установки в каталог /etc/apache2/conf-enabled/ добавляется конфигурационный файл phpMyAdmin. В этом каталоге файл читается автоматически. Чтобы завершить настройку Apache и PHP для поддержки phpMyAdmin, нужно только явно включить PHP-расширение mbstring.
sudo phpenmod mbstring
Перезапустите Apache, чтобы обновить настройки:
sudo systemctl restart apache2
Теперь phpMyAdmin установлен и может взаимодействовать с Apache. Но прежде чем вы сможете начать работу с MySQL при помощи phpMyAdmin, вам нужно настроить привилегии пользователей MySQL.
2: Настройка аутентификации и привилегий
После установки phpMyAdmin автоматически генерирует пользователя базы данных phpmyadmin, который выполняет базовые процессы программы. Однако для входа в phpMyAdmin рекомендуется использовать другую учетную запись, не phpmyadmin. Вместо него вы можете использовать либо root-аккаунт MySQL, либо специальный аккаунт для phpMyAdmin.
Настройка парольного доступа для root-пользователя MySQL
В установках Ubuntu, которые используют MySQL 5.7+, root-пользователь по умолчанию поддерживает аутентификацию с помощью плагина auth_socket, а не с помощью пароля. Это позволяет во многих случаях обеспечить большую безопасность и удобство, но это также может усложнить работу, например, когда вам необходимо с помощью этого пользователя дать внешней программе (как phpMyAdmin) права администратора.
Чтобы подключаться к phpMyAdmin как root-пользователь MySQL, измените метод аутентификации. Вместо auth_socket настройте парольную аутентификацию. Для начала откройте командную строку MySQL:
Затем проверьте, какой метод аутентификации использует ваш пользователь MySQL:
SELECT user,authentication_string,plugin,host FROM mysql.user;
+——————+——————————————-+————————+————+
| 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. Чтобы настроить его для поддержки парольной аутентификации, запустите команду ALTER USER (вместо password укажите надежный пароль):
ALTER USER ‘root’@’localhost’ IDENTIFIED WITH caching_sha2_password BY ‘password’;
Примечание: Эта команда ALTER USER настроит пользователя root MySQL для аутентификации с помощью плагина caching_sha2_password. Этот плагин рекомендуется использовать в официальной документации MySQL, поскольку он обеспечивает более надежное шифрование, чем старый, но широко используемый mysql_native_password. Однако некоторые версии PHP плохо поддерживают caching_sha2_password. Эта проблема была устранена в 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 |
+——————+——————————————-+————————+————+
| 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 как этот пользователь.
Настройка парольной аутентификации для выделенного пользователя MySQL
В некоторых случаях для подключения к phpMyAdmin лучше использовать специально выделенного пользователя. Чтобы настроить такой доступ, откройте командную строку MySQL:
Если вы включили парольную аутентификацию для пользователя root, вам нужно будет запустить следующую команду и ввести пароль:
Создайте нового пользователя:
CREATE USER ‘8host’@’localhost’ IDENTIFIED WITH caching_sha2_password BY ‘password’;
Примечание: Опять же, в зависимости от установленной версии PHP вам может потребоваться настроить аутентификацию по плагину mysql_native_password вместо caching_sha2_password:
ALTER USER ‘8host’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘password’;
Затем предоставьте новому пользователю соответствующие права. Например, вы можете предоставить ему права на все таблицы в БД, а также возможность добавлять, изменять и удалять пользовательские привилегии с помощью этой команды:
GRANT ALL PRIVILEGES ON *.* TO ‘8host’@’localhost’ WITH GRANT OPTION;
Закройте оболочку MySQL:
Чтобы открыть интерфейс, посетите в браузере следующую ссылку:
Чтобы получить доступ к интерфейсу, используйте имя и пароль вашего нового пользователя.
3: Защита phpMyAdmin
Из-за своей распространённости PhpMyAdmin часто подвергается атакам злоумышленников. Теперь нам необходимо обеспечить интерфейсу достаточный уровень защиты для предотвращения неавторизованного доступа.
Один из самых простых способ защиты phpMyAdmin – размещение шлюза безопасности. Это делается при помощи специальных файлов Apache под названием .htaccess.
Сначала нужно включить поддержку файлов .htaccess, отредактировав конфигурационный файл phpmyadmin.conf.
sudo nano /etc/apache2/conf-available/phpmyadmin.conf
В раздел нужно добавить параметр AllowOverride All:
Options FollowSymLinks
DirectoryIndex index.php
AllowOverride All
. . .
Сохраните и закройте файл.
Перезапустите Apache, чтобы обновить настройки:
sudo systemctl restart apache2
Теперь приложение поддерживает файлы .htaccess; осталось создать такой файл.
Для корректной работы необходимо создать этот файл в каталоге приложения. Для этого введите:
sudo nano /usr/share/phpmyadmin/.htaccess
Вставьте в файл такие строки:
AuthType Basic
AuthName «Restricted Files»
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user
Рассмотрим эти строки подробнее:
- AuthType Basic задает тип авторизации; в данном случае используется аутентификация по паролю с помощью файла паролей .htpasswd.
- AuthName содержит текст сообщения диалогового окна аутентификации. Чтобы неавторизованные пользователи не могли получить дополнительной информации о закрытом приложении, это сообщение не должно содержать подробностей, а только общие данные.
- AuthUserFile задает расположение файла паролей htpasswd, который будет использоваться для авторизации. Он должен находиться вне обслуживаемых каталогов. Такой файл будет создан позже.
- Require valid-user указывает, что доступ к этому ресурсу могут получить только авторизованные пользователи. Именно этот параметр защищает ресурс от неавторизованных пользователей.
Сохраните и закройте файл.
Файл с паролями нужно создать в каталоге, заданном в директиве AuthUserFile, в данном случае это /etc/phpmyadmin/.htpasswd.
sudo htpasswd -c /etc/phpmyadmin/.htpasswd username
Будет предложено выбрать и подтвердить пароль нового пользователя. После этого файл .htpasswd будет создан, а только что введённый пароль будет помещен в него в хэшированном виде.
Чтобы добавить в файл еще одного пользователя, используйте вышеприведенную команду без флага –с:
sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser
Теперь при входе в подкаталог phpMyAdmin будут запрашиваться учетные данные пользователя:
https://domain_name_or_IP/phpmyadmin
The server http://111.111.11.111:22 requires a username and password. The server says: Restricted Files.
User Name:
Password:
Только после аутентификации пользователь сможет получить доступ к странице авторизации phpMyAdmin. Это установит дополнительный уровень безопасности, который защитит веб-интерфейс phpMyAdmin от атак методом подбора паролей.
Заключение
Теперь phpMyAdmin установлен, запущен и надежно защищен от злоумышленников. При помощи этого интерфейса можно быстро и легко создавать базы данных, пользователей, таблицы и т.п., а также выполнять такие рутинные задачи как удаление и редактирование структур и данных.
Источник
Как создать нового пользователя и настроить права доступа в MySQL
Чтобы начать работу в MySQL, установите LEMP или LAMP по соответствующей инструкции в разделе: Установка программного обеспечения.
После установки MySQL/MariaDB автоматически будет создан MySQL пользователь root. Работать с базой данных под root небезопасно, поэтому необходимо создать нового пользователя, а затем назначить ему специальные права доступа. Сделать это можно через консоль или через phpMyAdmin.
Как создать нового пользователя в MySQL
Чтобы добавить нового пользователя, установите приложение phpMyAdmin. Как установить phpMyAdmin, описано в инструкции. После установки проверьте, что ваш сервер включен. Для входа в phpMyAdmin используйте root-логин и root-пароль сервера.
Откройте приложение и перейдите на вкладку Учетные записи пользователей. Кликните по строке Добавить учетную запись пользователя:
На открывшейся странице укажите имя пользователя, хост и пароль. Подтвердите пароль. Также вы можете сгенерировать пароль, нажав на кнопку Генерировать.
Выберите привилегии для нового пользователя. Для этого поставьте галочки напротив нужных типов привилегий. Чтобы подробнее узнать о каждой привилегии, наведите на неё курсор и прочитайте справочную информацию.
Если вы хотите дать новому пользователю доступ только к конкретным базам данных, на этом этапе можно не назначать никаких привилегий.
Если вы хотите выбрать все привилегии и предоставить новому пользователю неограниченный доступ, кликните Отметить все.
Нажмите кнопку Вперёд внизу страницы:
Готово, вы добавили учётную запись:
Если вы хотите, чтобы пользователь имел доступ к конкретным базам данных, вам потребуется настройка прав доступа.
Прежде чем создать нового пользователя через консоль, подключитесь к VPS-серверу по SSH. После этого:
Запустите сервер базы данных с помощью команды:
Создайте пользователя с помощью команды:
Замените значения внутри кавычек:
- вместо user-name укажите логин пользователя базы данных;
- вместо password укажите пароль нового пользователя.
На этом этапе новый пользователь не имеет никаких разрешений на работу с базами данных. Он не может войти в систему и добраться до оболочки MySQL, поэтому нужно предоставить ему неограниченные права доступа.
Для этого введите команду:
Не забудьте изменить user-name на логин, который был указан при создании пользователя.
Чтобы изменения вступили в силу, введите команду:
Готово, наш новый пользователь получил те же права доступа в базе данных, что и пользователь MySQL root.
Как настроить права доступа для пользователя в MySQL
Откройте phpMyAdmin и перейдите на вкладку Учетные записи пользователей. Выберите нужную учетную запись и нажмите Редактировать привилегии:
На открывшейся странице перейдите на вкладку База данных. Выберите из списка базу данных, к которой хотите дать доступ пользователю, и нажмите Вперёд:
Выберите привилегии. Для этого поставьте галочки напротив нужных типов привилегий. Чтобы подробнее узнать о каждой привилегии, наведите на неё курсор и прочитайте справочную информацию. Если вы хотите выбрать все привилегии и предоставить новому пользователю неограниченный доступ, кликните Отметить все.
Затем нажмите Вперёд:
Готово, вы настроили привилегии для пользователя.
Важно: обязательно выполняйте команду FLUSH PRIVILEGES после любого изменения в правах доступа. Для выполнения каждой из команд нужно иметь права доступа root.
В примере выше мы создали нового пользователя с неограниченными правами доступа. Если вам нужно предоставить другой уровень доступа к базам данных для пользователя, выполните команду:
Замените значения внутри кавычек:
вместо имя базы данных укажите нужную базу данных;
вместо имя таблицы укажите имена таблиц, к которым хотите дать доступ или укажите .*, чтобы дать права на конкретную базу и все таблицы;
вместо тип прав — тот тип, который вы хотите предоставить пользователю.
В MySQL права доступа бывают нескольких типов:
- ALL PRIVILEGES – даёт пользователю MySQL полный доступ к заданной базе данных (если база данных не указана, то ко всем);
- CREATE – позволяет пользователю создавать базы данных/таблицы;
- SELECT – позволяет пользователю делать выборку данных;
- INSERT – позволяет пользователю добавлять новые записи в таблицы;
- UPDATE – позволяет пользователю изменять существующие записи в таблицах;
- DELETE – позволяет пользователю удалять записи из таблиц;
- DROP – позволяет пользователю удалять записи в базе данных/таблицах.
Не забудьте изменить user-name на логин, который был указан при создании пользователя.
- Если вы хотите назначить несколько видов прав доступа, разделите их запятыми, как в команде:
Источник