我已经安装并运行了MySQL的服务器,并连接了一个iSCSI磁盘(带有多path)并运行正常。 iSCSI磁盘使用/ emc作为安装点。 我的问题是,当我将MySQL的datadir移动到iSCSI磁盘上的一个新目录时,也就是/ emc / lib / mysql。
迁移是好的,因为如果我停止selinux(setenforce 0)一切正常, 但是,当我重新启动selinux(setenforce 1)时,MySQL无法访问其数据库。
我已经安装并运行了setroubleshootd,它给了我有关错误的信息:/ emc有一个默认上下文default_t,所以ander / emc文件,包括我的新/ emc / lib / mysql,都有这个上下文,允许。
使用-p和-Z选项将文件从/ var / lib / mysql复制到/ emc / lib / mysql不起作用。
从sealert读取报告后,我将系统设置为重新生成标签:
touch /.autorelabel reboot
但是这不起作用。 我认为它可能失败了,因为新磁盘是iSCSI,并且在networking运行时会自动挂载,而selinux可能在networking启动和运行之前试图自动标记新磁盘,所以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 datadir时保留上下文吗?
非常感谢你们!
你是否在运行restorecon之前添加策略? 如果没有,restorecon可能会恢复您的上下文更改。 尝试:
semanage fcontext -a -t mysql_db_t "/emc/lib/mysql(/.*)?" restorecon -Rv /emc/lib/mysql
运行setsebool -P mysqld_disable_trans 1的解决scheme可以有效地禁用针对mysql的selinux。
我想我已经find了意味着SElinux布尔的解决scheme。 只是设置(激活)两个布尔人做的诀窍:
# setsebool –P mysqld_disable_trans 1 # setsebool –P httpd_can_network_connect_db 1
之后,只需重新启动这两个服务,所有工作。
-P选项将其永久设置。 你可以看到一个布尔值列表及其状态:
# getsebool -a
也许这可以帮助其他类似的问题。
编辑:你认为这是一个好的和安全的解决scheme? 有没有其他方法可以做到这一点? 我会保持这个问题没有答案,所以可以标记,以防有人知道另一个更好的解决scheme