Как разрешить MySQL (mysqld) создавать и писать в & ldquo; / var / run / mysqld & rdquo; каталог?

Я действительно не понимаю, как работают все эти привилегии в Linux.

Для запуска сервера MySQL mysqld программа должна записать свои файлы .pid в каталог /var/run/mysqld/. Но мы знаем из FHS (Стандарт иерархии файловой системы) , что:

Файлы в этом каталоге должны быть очищены (удалены или усечены соответствующим образом) в начале процесса загрузки.

Таким образом, mysqld должен создавать каталог /mysqld в каталоге /var/run/ каждый раз ] MySQL сервер запущен.

Владельцем и группой /var является root, а /var:

drwxr-xr-x  13 root root  4096 may 20 23:41 var.

И мы также знаем из FHS (Стандарт иерархии файловой системы), что:

[ 1129] / var / run должен быть недоступен для записи непривилегированным пользователям (root или пользователям, работающим с демонами); это большая проблема безопасности, если любой пользователь может писать в этот каталог.

Таким образом, mysqld не может писать в каталог. Действительно, когда я запускаю mysqld для запуска сервера MySQL, я всегда получаю сообщение об ошибке:

user@user-desktop:~$ sudo mysqld --console
130720 23:43:02 [ERROR] Can't start server : Bind on unix socket: Permission denied
130720 23:43:02 [ERROR] Do you already have another mysqld server running on socket: /var/run/mysqld/mysqld.sock ?
130720 23:43:02 [ERROR] Aborting

Вопрос: как mysqld может записывать файлы .pid в /var/run/mysqld/, если стандарт запрещает открывать это каталог для записи? Это явное противоречие, не так ли?

Мой вопрос: как разрешить mysqld создавать и записывать свои файлы в /var/run/mysqld/, не изменяя разрешения для каталога /var/run? Пока я вижу единственный путь:

user@user-desktop:$ sudo chmod a+w /var

Но это запрещено Стандартом.

3
задан 21 July 2013 в 01:17

2 ответа

/ var / run должен быть недоступен для записи непривилегированным пользователям означает, что учетные записи root и sudo (поскольку это привилегированные пользователи) могут писать в него.

Сценарий запуска для MySQL запускается от имени пользователя root, а затем ему разрешается создавать файл или каталог в /var/run. И этот файл создается с разрешением, установленным в конфигурации. Это должно быть /etc/my.cnf, и у него будет что-то вроде этого :

[mysqld]
user   = mysql
socket = /var/lib/mysql/mysql.sock

У вас должно быть что-то, связанное с mysql в /etc/init.d. После установки MySQL Server я получаю this:

enter image description here

Вы уверены, что не установили MySQL Client?

0
ответ дан 21 July 2013 в 01:17

(Версия сервера: 5.7.28-0ubuntu0.18.04.4 (Ubuntu) в WSL2)

Apparmor содержит системные двоичные файлы, управляющие разрешениями для других файлов. Перед первым успешным подключением к серверу mysqld я добавил эту строку в "Разрешить доступ к файлу pid, socket, socket lock", я удалил его после и мог еще подключаюсь второй раз.

~$ sudo nano /etc/apparmor.d/usr.sbin.mysqld
/run/mysqld/*, rwx
~$ sudo service apparmor reload

До этого у меня были другие ошибки ... мне пришлось изменить владельца и права доступа к папке / mysqld-files /, которая была автоматически создана при установке. Затем добавьте эту опцию в конфигурационный файл, для которого по умолчанию установлено значение null, что означает, что сервер отключает операции импорта и экспорта. :

~$ sudo chown <username> /var/lib/mysql-files/ && chmod 750 /var/lib/mysql-files/
~$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
secure_file_priv = /var/lib/mysql-files

Также мне пришлось добавить это, потому что ошибка сообщила мне:

explicit_defaults_for_timestamp = ON

В WSL вы этого не сделаете. нужно инициализировать mysql. Происходит при установке (содержимое инициализации в / var / lib / mysql /). Таким образом, мы можем войти в систему напрямую. «ОШИБКА 1698 (28000): доступ запрещен для пользователя 'root' @ 'localhost'», если я не напишу sudo в начале команды входа в систему:

~$ sudo service mysql start
~$ sudo mysql -u root -p
Enter Password: [just ENTER]

Затем, наконец, исправление «Нет каталога, вход в систему с HOME = /»:

~$ sudo service mysql stop
~$ sudo usermod -d /var/lib/mysql/ mysql

пс Всегда делайте копию перед редактированием файла конфигурации и меняйте стандартный порт 3306, и выполните поиск в руководстве .

2
ответ дан 6 December 2019 в 07:27

Другие вопросы по тегам:

Похожие вопросы: