新 iSCSI 磁盘中的 Selinux/MySQL 权限问题:不允许 default_t 上下文

新 iSCSI 磁盘中的 Selinux/MySQL 权限问题:不允许 default_t 上下文

我有一台安装并运行 MySQL 的服务器,以及一个已连接并运行正常的 iSCSI 磁盘(具有多路径)。iSCSI 磁盘使用 /emc 作为挂载点。我的问题是当我将 MySQL 数据目录移动到 iSCSI 磁盘上的新目录(即 /emc/lib/mysql)时。

迁移正常,因为如果我停止 selinux(setenforce 0),一切都正常;但是,当我重新启动 selinux(setenforce 1)时,MySQL 无法访问其数据库。

我已经安装并运行 setroubleshootd,它向我提供了有关错误的信息:/emc 具有默认上下文 default_t,因此 /emc 下的所有文件(包括我的新 /emc/lib/mysql)都具有该上下文,但这是不允许的。

使用 -p 和 -Z 选项将文件从 /var/lib/mysql 复制到 /emc/lib/mysql 不起作用。

读取 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 datadir 时我可以保留哪些上下文?

非常感谢你们!

答案1

您是否在运行 restorecon 之前添加了策略?如果没有,restorecon 可能会恢复您的上下文更改。尝试:

semanage fcontext -a -t mysql_db_t "/emc/lib/mysql(/.*)?"
restorecon -Rv /emc/lib/mysql

您的解决方案是运行 setsebool –P mysqld_disable_trans 1,从而有效地禁用 mysql 的 selinux。

答案2

我认为我已经找到了一个解决方案,这意味着SElinux 布尔值。只需设置(激活)两个布尔值即可达到目的:

# setsebool –P mysqld_disable_trans 1
# setsebool –P httpd_can_network_connect_db 1

此后,只需重新启动两个服务,一切即可正常运行。

-P 选项永久设置它。你可以使用以下命令查看布尔值列表及其状态:

# getsebool -a

也许这可以帮助其他有类似问题的人。

编辑:您认为这是一个好的、安全的解决方案吗?还有其他方法可以解决这个问题吗?我将保留这个问题的未回答部分,以便标记它,以防有人知道其他更好的解决方案

相关内容