Проблема с правами доступа в Linux

версия для печати

Сталивались с проблемой "права есть, но прав нет"? Я вот сегодня опять на тех же граблях.

Линуха KUbuntu 16.01. Пытаюсь подсунуть старые базы новому MySQL-серверу. Полдня убиты, сервер побеждает.

Для эксперимента создал отдельный каталог с базами, определил владельца и права доступа. Запускаю сервер - ошибка доступа. Отлично.. Задал полные права всем - ошибка доступа. Привет, Когнитивный Диссонанс.

Не вдаваясь в подробности (коих я кстати и не знаю), в Линухе кроме прав доступа есть еще некий демон AppArmor. Он тоже контроллирует доступ! Его запреты внешне в приложении будут выглядеть точно так же, как-будто я просто права на файл/каталог не описал. Для примера, вот лог MySQL-сервера:

2016-07-11T11:01:50.043344Z 0 [Warning] Can't create test file /home/all/mysql_5.7_clear/Z710.lower-test
2016-07-11T11:01:50.043384Z 0 [Note] /usr/sbin/mysqld (mysqld 5.7.12-0ubuntu1.1-log) starting as process 3631 ...
2016-07-11T11:01:50.044811Z 0 [Warning] Can't create test file /home/all/mysql_5.7_clear/Z710.lower-test
2016-07-11T11:01:50.044827Z 0 [Warning] Can't create test file /home/all/mysql_5.7_clear/Z710.lower-test

2016-07-11T11:01:50.048348Z 0 [Note] InnoDB: PUNCH HOLE support available
...
2016-07-11T11:01:50.062726Z 0 [Note] InnoDB: Completed initialization of buffer pool
2016-07-11T11:01:50.064034Z 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
2016-07-11T11:01:50.074127Z 0 [ERROR] InnoDB: The innodb_system data file 'ibdata1' must be writable
2016-07-11T11:01:50.074167Z 0 [ERROR] InnoDB: The innodb_system data file 'ibdata1' must be writable

2016-07-11T11:01:50.074173Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
...

Зато dmesg выдал такое:

12.07.16 10:10 Z710 kernel [14103.419486] audit: type=1400 audit(1468293048.819:21): apparmor="DENIED" operation="mknod" profile="/usr/sbin/mysqld" name="/home/all/mysql_5.7_bugs/Z710.lower-test" pid=7252 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=122 ouid=122
Лечение

Правим профиль AppArmor. Идем в файл /etc/apparmor.d/usr.sbin.mysqld, находим в нем строки про каталог с базами и добавляем свое:

# Allow data dir access
# было
/var/lib/mysql/ r,
/var/lib/mysql/** rwk,

# добавил
/home/all/mysql_5.7_bugs/ r,
/home/all/mysql_5.7_bugs/** rwk,

Перегружаем профиль и рестартуем MySQL-сервер:

sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
sudo systemctl restart mysql
[1oo%, EoF]

Понравилась статья? Расскажите о ней друзьям:


Комментарии
Для работы модуля комментариев включите javaScript


Показать/скрыть правила
Имя
[i] [b] [u] [s] [url]
:-) ;-) :D *lol* 8-) :-* :-| :-( *cry* :o :-? *unsure* *oops* :-x *shocked* *zzz* :P *evil*

Осталось 1000 символов.
Код защиты от спама Обновить код
Каждый комментарий проходит ручную модерацию. 100% фильтрация спама.
Продвижение
Время
Метки