Я переместил свой каталог / var / lib / mysql в общий ресурс nfs, обновил все файлы конфигурации и создал символические ссылки там, где это необходимо. Это работает, когда у меня выключен selinux, но mysqld не запускается, когда selinux включен. Я искал решение в Google, но не нашел работающего. Я подозреваю, что упускаю что-то простое.
Вот что я пробовал:
yum install policycoreutils-python
semanage fcontext -a -t mysqld_db_t "/nfs/data0/mysql(/.*)?"
restorecon -Rv /nfs/data0/mysql
Я подозреваю, что могу использовать здесь неправильный контекст, но не уверен, какой будет правильный. Какие-либо предложения?
ОБНОВИТЬ:
После просмотра /var/log/audit/audit.log, как было предложено, я вижу следующие ошибки:
type=AVC msg=audit(1398346018.436:3455): avc: denied { write } for pid=10980
comm="httpd" name="mysql.sock" dev=0:13 ino=18438
scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:nfs_t:s0
tclass=sock_file
type=AVC msg=audit(1398346018.439:3456): avc: denied { search } for pid=12395
comm="mysqld" name="mysql" dev=0:13 ino=14805
scontext=unconfined_u:system_r:mysqld_t:s0 tcontext=system_u:object_r:nfs_t:s0
tclass=dir
type=AVC msg=audit(1398346019.657:3457): avc: denied { open } for pid=12395
comm="mysqld" name="cache_admin_menu.frm" dev=0:13 ino=23322
scontext=unconfined_u:system_r:mysqld_t:s0 tcontext=system_u:object_r:nfs_t:s0
tclass=file
Не уверен, что мне нужно сделать, чтобы решить эту проблему. У меня включены следующие sebools:
mysql_connect_any
httpd_can_network_connect_db
httpd_can_network_connect
httpd_can_network_memcache
httpd_can_sendmail
httpd_use_nfs
httpd_builtin_scripting
Спасибо.
Этот вопрос немного устарел, но не вижу ни одного с правильным ответом.
Итак, я столкнулся с этой проблемой с AWS и EFS, используя centos AMI для запуска mysql.
Здесь возникают две проблемы. Разрешения для обычных файлов mysql и разрешения для сокета mysql и его файла блокировки.
Похоже, что сокет mysql создается с контекстом mysqld_var_run_t и файл блокировки с контекстом mysqld_db_t, как и обычные файлы mysql.
Теперь для монтирования NFS обычно предоставляется контекст nsf_t.
Похоже, что монтирование nfs может иметь только контекст on se при монтировании. Итак, что мне пришлось сделать при монтировании через nfs, было следующее:
Итак, в fstab mount выглядит так:
nfs-share-url:/ /data nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noatime,context="system_u:object_r:mysqld_db_t:s0" 0 0
my.cnf выглядит так:
datadir=/data
socket=/var/lib/mysql-files/mysql.sock
Таким образом, разрешения верны для всех файлов, и mysql теперь хранит данные в общей папке EFS NFS.
Я бы заставил auditd запускать новый файл журнала (kill -USR1 pidofauditd
), затем переведите SELinux в разрешающий режим (setenforce 0
), а затем сделайте то, что обычно делаете. Это создаст подходящие сообщения аудита. затем
cat audit.log | audit2allow -M myLocalPolicy
******************** IMPORTANT ***********************
To make this policy package active, execute:
semodule -i MyLocalPolicy.pp
Проверьте файл MyLocalPolicy.te, чтобы узнать, что делает политика, и если вы довольны, установите ее с помощью предоставленной команды semodule.
Ошибка «открытия» указывает на то, что он не может найти «mysql.sock». Вы пытались изменить имя, указав полный путь к тому месту, где оно находится в вашей системе?
fyi - я предлагаю только, поскольку обнаружил вашу проблему при поиске в Google моей аналогичной ошибки, которая является httpd, но "пишет" на name = '/ tmp / mysql.sock', которое я определил в разделе "socket" в MySQL my.cnf и php.ini .