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
решение1
Вам необходимо изменить контекст безопасности нового каталога так, чтобы он был таким же, как у /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
решение2
Вы также можете попробовать что-то вроде этого:
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
.