Phpmyadmin как настроить привилегии

Установка и защита 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

Читайте также:  Ноутбук не работает клавиша enter

Когда установка 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 на логин, который был указан при создании пользователя.

  • Если вы хотите назначить несколько видов прав доступа, разделите их запятыми, как в команде:

Источник

Оцените статью