У меня установлен и запущен сервер с MySQL, а также подключен диск iSCSI (с несколькими путями), который работает нормально. Диск iSCSI использует / emc в качестве точки монтирования. Моя проблема заключается в том, что я перемещаю каталог данных MySQL в новый каталог на диске iSCSI, то есть в / emc / lib / mysql.
Миграция в порядке, потому что, если я остановлю selinux (setenforce 0), все будет работать нормально; но когда я перезапускаю selinux (setenforce 1), MySQL не может получить доступ к своим базам данных.
Я установил и запустил setroubleshootd, который дает мне информацию об ошибке: / emc имеет контекст по умолчанию default_t, поэтому все файлы ander / emc, включая мой новый / emc / lib / mysql, имеют этот контекст, а это не разрешается.
Копирование файлов из / var / lib / mysql в / emc / lib / mysql с использованием параметров -p и -Z не работало.
После прочтения отчетов из sealert -l я настроил систему на регенерацию меток:
touch /.autorelabel
reboot
Но это не сработало. Я думаю, что это могло произойти из-за того, что новый диск - это iSCSI, и он автоматически монтируется, когда сеть работает, и, возможно, selinux пытается автоматически переназначить новые диски до того, как сеть будет запущена, поэтому selinux «не видит» новый диск. Строка fstab:
/dev/mapper/DATAp1 /emc ext3 _netdev 0 0
Я попытался смонтировать диск iSCSI, добавив контекст в fstab:
/dev/mapper/DATAp1 /emc ext3 _netdev,context=system_u:object_r:var_t:s0 0 0
Но это не сработало.
Я пробовал различные команды для восстановления и регенерации контекстов, но безуспешно:
restorecon -R -v /emc
fixfiles restore
Как я могу установить новую метку диска / контекст по умолчанию? Или кто я могу сохранить контексты при копировании каталога данных MySQL?
Спасибо большое, ребята!
Вы добавляете политику перед запуском restorecon? Если нет, то restorecon может отменять изменения вашего контекста. Пытаться:
semanage fcontext -a -t mysql_db_t "/emc/lib/mysql(/.*)?"
restorecon -Rv /emc/lib/mysql
Ваше решение для запуска setsebool –P mysqld_disable_trans 1 эффективно отключает selinux для mysql.
Я думаю, что нашел решение, которое подразумевает Логические значения SElinux. Достаточно просто установить (активировать) два логических значения:
# setsebool –P mysqld_disable_trans 1
# setsebool –P httpd_can_network_connect_db 1
После этого просто перезагружаем обе службы и все работает.
Параметр -P устанавливает его навсегда. Вы можете увидеть список логических значений и их статус с помощью:
# getsebool -a
Возможно, это поможет другим решить аналогичную проблему.
Изменить: как вы думаете, это хорошее и безопасное решение? есть ли другие способы сделать трюк? Я оставлю вопрос без ответа, поэтому могу отметить его, если кто-нибудь знает другое лучшее решение