MySQL представляет собой свободно распространяемую реляционную систему управления базами данных с открытым исходным кодом. Чаще всего ее устанавливают в рамках популярного стека LAMP (Linux, Apache, MySQL, PHP/Python/Perl). С помощью языка структурированных запросов SQL система управляет данными, которые находятся в базе.
В статье мы рассмотрим этапы установки и настройки безопасности MySQL на Ubuntu Server 24.04, а также процесс создания пользователей.
Версия MySQL 8.0 доступна для релизов Ubuntu Server 20.04 и выше.
Следуя приведенным ниже инструкциям, Вы сможете настроить работающую реляционную систему управления базами данных, которая подойдет для разработки веб-сайтов, приложений или хранения различных данных.
Если вы устанавливаете MySQL на виртуальную машину, рекомендуем использовать приложение Putty для подключения. В противном случае Вы можете столкнуться с проблемами кодировки при чтении информации из базы данных.
Мы подробно разбирали подключение к удаленному серверу по SSH в статье Подключение к серверу с помощью SSH-ключей.
Установка MySQL
В сервере Ubuntu 24.04 для установки MySQL мы воспользуемся репозиторием пакетов APT. На данный момент версия MySQL, доступная в репозитории Ubuntu по умолчанию, – это версия 8.0.41.
Для корректной установки MySQL последней версии обновим список пакетов с помощью указанной утилиты, запущенной от прав суперпользователя:
Запуск всех команд идет от имени суперпользователя.
sudo apt update
При необходимости проведем обновление старых версий пакетов на новые:
sudo apt upgrade
После успешного обновления переходим к процедуре установки:
sudo apt-get install mysql-server
После завершения установки запуск сервиса MySQL произойдет автоматически. Проверим,
что установка прошла успешно и сервис MySQL запущен:
sudo systemctl start mysql.service
Дополнительно можно проверить статус сервиса MySQL с помощью команды:
sudo systemctl status mysql
Если есть необходимость в проверке сетевого статуса сервиса, то его можно провести с помощью команды:
sudo ss -tap | grep mysql
Также дополнительно можно убедиться, что мы установили последнюю версию MySQL:
mysql --version
Если по каким-либо причинам сервис не запустился автоматически или статус отображается как неактивный, то необходимо перезапустить его:
sudo service mysql restart
Для того чтобы MySQL запускался автоматически при загрузке операционной системы выполним команду:
sudo systemctl enable mysql
Убедиться, что MySQL запускается вместе с операционной системой монжо с помощью команды:
sudo systemctl is-enabled mysql.service
На этом установка завершена, переходим к настройкам установленного сервера MyQSL.
Настройка MySQL
После успешной установки сервера MySQL создается основной каталог конфигурации /etc/mysql/. В данном каталоге содержится файл конфигурации сервера баз данных MySQL – my.cnf. Для того, чтобы провести установку пользовательских параметров отредактируйте файл .my.cnf из директории $HOME/.my.cnf.
Вы можете самостоятельно провести дополнительные настройки сервера MySQL, такие как ведение log-файла, номер порта, IP-адрес и другие, путем редактирования файлов mysql.cnf и mysqld.cnf с помощью текстового редактора nano или vim, находящиеся в директориях /etc/mysql/conf.d/ и /etc/mysql/mysql.conf.d/ соответственно.
После внесения изменений в конфигурационные файлы, необходимо провести перезапуск сервиса MySQL:
sudo systemctl restart mysql.service
У сервера MySQL есть журнал службы, просмотреть который можно с помощью:
sudo journalctl -u mysql.service
Если необходимо посмотреть журнал службы более подробно воспользуйтесь командой:
sudo journalctl -u mysql.service -xe
Файл журнала ошибок MySQL сервера по умолчанию расположен в /var/log/mysql/error.log. Посмотреть последние записи можно с помощью:
sudotail -f /var/log/mysql/error.log
Выход из логов: CTRL+Z.
После первой установки MySQL необходимо провести улучшение безопасности. Для этого служит mysql_secure_installation – интерактивный скрипт безопасности, включенный в систему управления базами данных. Данный скрипт проводит изменение некоторых параметров безопасности по умолчанию, например, запрещает удаленный вход в систему с правами суперпользователя и удаляет выборочных пользователей.
sudo mysql_secure_installation
После запуска скрипта начинается диалог, в процессе которого мы внесем изменения в параметры безопасности установленного MySQL. Первым будет задан вопрос о необходимости настройки плагина проверки паролей, который можно использовать для проверки надежности паролей новых пользователей MySQL, до того, как они будут приняты системой. Если плагин будет включен, то все созданные пользователи будут проходить процедуру аутентификации с помощью пароля, соответствующего выбранной политике.
Выберем уровень сложности пароля для работы плагина проверки паролей. Уровня три: 0 Низкий, 1 Средний и 2 Высокий. Какой уровень выбрать решать Вам, а мы выберем максимальный уровень.
На текущем этапе настройки должна произойти установка пароля пользователю root, но поскольку по умолчанию используется аутентификация с помощью auth_socket, установка будет пропущена. Если для пользователя root уже была выполнена настройка аутентификации по паролю, то установите пароль в соответствии с уровнем сложности выбранном на предыдущем этапе.
На следующем шаге будет предложено удалить анонимных пользователей, которые были созданы самим сервисом автоматически, выбираем согласиться:
Теперь запрос на отключение удалённого входа root пользователя, также соглашаемся:
Аналогично поступаем с удалением созданных тестовых баз данных:
Соглашаемся с перезагрузкой привилегий:
Настройка завершена, MySQL немедленно учел внесенные изменения и готов к работе.
Следующим шагом проведем настройку аутентификации для учетной записи root.
Настройка аутентификации для root
Входим в консоль MySQL:
sudo mysql
Перед настройкой аутентификации проверим версию, статус и параметры нашего сервера:
STATUS;
Так как все настройки будут проходит путем отправки SQL-запросов к базе данных, каждая команда должна оканчиваться ;
По умолчанию в установках Ubuntu учетная запись root не настроена для подключения к службам с использованием пароля. Для того, чтобы установить доступ к службе MySQL по паролю для данной учетной записи, необходимо провести изменение плагина авторизации с auth_socket на caching_sha2_password.
Далее нам необходимо выполнить запрос пользователей с типом их авторизации:
SELECTuser,authentication_string,plugin,host FROM mysql.user;
В результате запроса в списке пользователей видно, что у пользователя root в значении plugin стоит auth_socket, а значение authentication_string пусто. Проведем обновление плагина авторизации и установим пароль (в качестве примера установлен пароль ~MysqlU24, помните, что создаваемый пароль должен удовлетворять требованиям, установленным Вами в плагине проверки паролей):
ALTERUSER'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY' ~MysqlU24';
Применим проведенные изменения:
FLUSH PRIVILEGES;
Не все приложения, которые работают с севером MySQL, поддерживают надежную работу с плагином безопасности caching_sha2_password. При необходимости установите плагин mysql_native_password для повышения надежности. Настройка аутентификации завершена, выходим с помощью exit.
Теперь для подключения к базе данных потребуется ввести:
mysql -u root -p
При попытке подключения с помощью команды sudo mysql будет выведена ошибка доступа.
Если вам требуется вернуться в методу аутентификации по умолчанию и выполнять подключение к MySQL как суперпользователь root с помощью команды sudo mysql необходимо выполнить подключение к MySQL с помощью имени пользователя и пароля. Далее возвращаем настройки аутентификации по умолчанию с помощью команды:
```
ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket;
```
Создание пользователя и предоставление привилегий в MySQL
После создания и настройки MySQL сервера может возникнуть необходимость в создании пользователя с набором определенных прав и привилегий. Создадим пользователя sysadmin с помощью команды:
Обратите свое внимание, что предоставление прав пользователю выполнено с использованием параметра WITH GRANT. Это позволит вашему пользователю MySQL предоставлять любые разрешения, которые у него есть, другим пользователям в системе.
Если есть необходимость в предоставлении всех привилегий созданному пользователю, то стоит воспользоваться командой:
Будьте внимательны при предоставлении привилегий пользователю. Параметр ALL PRIVILEGES предоставит пользователю широкие привилегии, как у суперпользователя. Такие широкие привилегии позволят ему иметь полный контроль над каждой базой данных на сервере. Для просмотра назначенных прав и привилегий пользователю используем команду:
SHOW GRANTS FOR 'sysadmin'@'localhost';
Для того, чтобы изменения вступили в силу, рекомендуется выполнить команду по обновлению привилегий и прав пользователей:
FLUSH PRIVILEGES;
Если возникнет необходимость отозвать предоставленные пользователю права и привилегии, воспользуйтесь командой:
Создание и настройка пользователя на этом завершена. Можно проверить его работу и подключиться с использованием его имени и пароля.
Если в процессе работы потребуется удаление созданного пользователя, то воспользуйтесь командой:
DROPUSER'sysadmin'@'localhost';
Пользователь удален, теперь не отображается в таблице пользователей MySQL.
Возможно потребуется удаление установленного сервера MySQL.
Чтобы удаление произошло корректно и не было выполнения службы, выполним:
sudo systemctl stop mysql
Для того чтобы провести удаление сервера также необходимо воспользоваться репозиторием APT. При выполнении команды будет произведено удаление всех баз данных и самого сервера:
sudo apt-get remove mysql-server
Были удалены основные пакеты MySQL, но не конфигурационные файлы, логи и каталоги.
Удалим конфигурационные каталоги с файлами и логами:
rm -rf /etc/mysql /var/lib/mysql /var/log/mysql
Проведем удаление всех пакетов, установленных как зависимости MySQL:
apt autoremove
Если у вас были создан специальный пользователь для MySQL, нужно удалить
и его, выполнив последовательно команды:
deluser mysql
rm -rf /home/mysql
Проведем проверку полного удаления сервера MySQL с использованием команды проверки процесса:
Если были выведены данные о неполной остановке демона MySQL, выполните:
sudo systemctl daemon-reload
Сервер MySQL со всеми пакетами был успешно удален из системы.
Краткие итоги
На сегодняшний день MySQL сервер является распространенной системой управления базами данных, используемой в операционных системах Linux.
Для установки MySQL в ручном режиме предпочтительней пользоваться репозиторием APT.
После установки сервера необходимо в обязательном порядке провести улучшение безопасности.
Суперпользователю root доступно подключение к серверу как в парольном, так и беспарольном варианте.