Назад | Перейти на главную страницу

MySQL 5.6 и SELinux спорят

CentOS 6.4 (x64) / MySQL 5.6.10

Установил MySQL из исходных файлов и отлично запустил его в исходном месте (/ var / lib / mysql). Я переместил все на другой том (/ u0 / mysql) и прошел несколько раундов, освобождая его от SELinux (cat /var/log/audit/audit.log | audit2allow -M mysql-* с последующим semodule -i mysql-*.pp). После каждого раунда я пытаюсь перезапустить службу и вижу эту ошибку:

Starting MySQL..The server quit without updating PID file (/u0/mysql/server.pid).
 [FAILED]

После 3-4 раундов добавления исключений я заметил, что файлы больше не меняются. IE все, что можно было добавить таким образом, уже было добавлено. Из любопытства я сбежал audit2why -a и получил множество:

type=AVC msg=audit(1387207317.009:666): avc:  <some permission> for  pid=20640 
  comm="mysqld" dev=sdc1 ino=36831373 scontext=unconfined_u:system_r:mysqld_t:s0 
  tcontext=system_u:object_r:default_t:s0 tclass=file
 Was caused by:
     Unknown - would be allowed by active policy
     Possible mismatch between this policy and the one under which the audit message was generated.
     Possible mismatch between current in-memory boolean settings vs. permanent ones.

Это заставляет меня поверить, что это должен работать. Если я отключу SELinux: setenforce 0 тогда mysql запустится нормально, так что он (SE) все еще мешает.

Поиск через SF повернулся этот вверх - попробовали, результат не изменился.

ТАК: как мне узнать, где находится завал?

РЕДАКТИРОВАТЬ:

[root@server u0]# ls -ldZ /var/lib/mysql
drwxr-xr-x. mysql mysql unconfined_u:object_r:mysqld_db_t:s0 /var/lib/mysql

[root@server u0]# ls -ldZ /u0/mysql
drwxr-xr-x. mysql mysql unconfined_u:object_r:mysqld_db_t:s0 /u0/mysql

Вам необходимо изменить контекст безопасности нового каталога, чтобы он был таким же, как / var / lib / mysql.

Например:

ls -ldZ /var/lib/mysql/
drwxr-x--x. mysql mysql system_u:object_r:mysqld_db_t:s0 /var/lib/mysql/

Затем измените новый каталог на те же настройки с помощью chcon

chcon -R -u system_u -r object_r -t mysqld_db_t /u0/mysql

Вы также можете попробовать что-то вроде этого:

chcon --reference=/path/to/existing/file /path/to/new/file

Кстати, вот отличное введение в SELinux: http://www.youtube.com/watch?v=MxjenQ31b70 с саммита Redhat 2012. Кроме того, поищите в файлах журнала сообщения об ошибках в /var/log/audit/audit.log или /var/log/messages.