Вопрос или проблема
Я хотел запустить mysqld
от имени пользователя root.
Я использую Ubuntu 21.04 и установил mysql-server
.
Версия MySQL:
mysql Ver 8.0.25-0ubuntu0.21.04.1 для Linux на x86_64 ((Ubuntu))
Изменение владельца файла на root
chown -R root /var/lib/mysql
/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
user = root
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
datadir = /var/lib/mysql
Когда я запускаю службу MySQL с помощью:
sudo service mysql start
Я получаю ошибку:
mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Tue 2021-05-25 08:29:56 PDT; 23s ago
Process: 2413 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
Process: 2421 ExecStart=/usr/sbin/mysqld (code=exited, status=1/FAILURE)
Main PID: 2421 (code=exited, status=1/FAILURE)
Status: "Запуск сервера в процессе"
Error: 13 (Разрешение отклонено)
Однако если я изменю разрешения файла /var/lib/mysql обратно на пользователя mysql, служба запускается.
Пожалуйста, дайте мне знать, как я могу запустить это от имени root.
Если я что-то делаю не так, пожалуйста, предложите четкие шаги.
Ссылка:
[1]: https://dev.mysql.com/doc/refman/8.0/en/changing-mysql-user.html
Ответ содержится в предоставленной вами ссылке
На Linux, для установок, выполненных с использованием репозитория MySQL или RPM-пакетов, сервер MySQL mysqld должен запускаться локальным пользователем операционной системы mysql. Запуск от имени другого пользователя операционной системы не поддерживается скриптами инициализации, которые входят в состав репозиториев MySQL.
На Unix (или Linux для установок, выполненных с помощью tar.gz пакетов), сервер MySQL mysqld может быть запущен и работать любым пользователем.
Таким образом, чтобы запустить mysqld
от имени root, вам нужно установить его из пакета tar.gz. Затем шаги, которые вы уже попробовали, должны быть достаточными.
https://dev.mysql.com/doc/mysql-installation-excerpt/8.0/en/binary-installation.html содержит инструкции по установке mysql, а https://dev.mysql.com/downloads/mysql/ содержит ссылки для загрузки.
Я должен отметить, что в целом не рекомендуется запускать mysqld
от имени root. Похоже, вы об этом знаете и пытаетесь исследовать возможности эксплуатации этого, но другие читатели могут не быть столь осведомленными о безопасности.
Обычно не рекомендуется запускать mysql от имени root !!
Тем не менее, это ваше решение, ваша ошибка – Разрешение отклонено
, что означает, что вы пытаетесь запустить процесс от имени пользователя/группы mysql. Поскольку вы используете systemd для запуска службы mysql, пожалуйста, проверьте конфигурацию службы systemd:
/lib/systemd/system/mysql.service
Измените User и Group на root:
[Service]
Type=forking
User=mysql
Group=mysql
Не забудьте перезагрузить демон systemd после внесения изменений:
systemctl daemon-reload
Ответ или решение
Запуск сервера MySQL (mysqld
) с правами суперпользователя (root) – это задача, которая требует особого внимания, поскольку она может привести к потенциальным уязвимостям и проблемам с безопасностью. В данном ответе мы подробно рассмотрим, как запустить mysqld
как root на вашей системе Ubuntu 21.04, и какие изменения необходимо внести для успешного выполнения этой задачи.
Почему это может быть проблемой?
Согласно документации MySQL, стандартные методики запуска сервера MySQL (например, через системные службы) рассчитаны на запуск от имени специального пользователя mysql
. Попытка запустить сервер от имени root может вызвать ошибки, связанные с разрешениями. Это связано с тем, что службы, запущенные от имени mysql
, ожидают, что соответствующие файлы и директории будут иметь правильные права доступа.
Шаги для запуска mysqld
от имени root
1. Настройка конфигурации MySQL
Необходимо внести изменения в конфигурационный файл MySQL, чтобы указать пользователя и группу, от имени которых должен быть запущен сервер. Для этого откройте файл /etc/mysql/mysql.conf.d/mysqld.cnf
и измените его следующим образом:
[mysqld]
user = root
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
datadir = /var/lib/mysql
2. Изменение прав на директорию MySQL
Также вам нужно изменить владельца директории данных MySQL:
sudo chown -R root /var/lib/mysql
3. Настройка службы systemd
Поскольку вы используете systemd
, вам нужно изменить конфигурацию службы MySQL, чтобы она могла запускаться от имени root. Для этого откройте файл /lib/systemd/system/mysql.service
и измените строчки User
и Group
:
[Service]
Type=forking
User=root
Group=root
После внесения изменений не забудьте перезагрузить демон systemd, чтобы применить изменения:
sudo systemctl daemon-reload
4. Запуск MySQL
Теперь вы можете попытаться запустить службу MySQL с правами root:
sudo service mysql start
Возможные проблемы
Если после выполнения вышеуказанных шагов вы всё ещё сталкиваетесь с ошибками, важно проверить системные журналы для выявления причин сбоя. Используйте следующую команду для просмотра статуса службы MySQL и соответствующих журналов:
sudo journalctl -u mysql.service
Заключение
Хотя технически возможно запустить mysqld
от имени root, это не рекомендуется и может привести к проблемам с безопасностью. Если вы осуществляете это в целях тестирования или обучения, будьте осторожны и избегайте использования таких конфигураций в производственной среде. Лучше всего придерживаться практики запуска MySQL от имени предназначенного для этого пользователя mysql
и управлять правами доступа к ресурсам базы данных соответствующим образом.