如何将 MySQL 从 SELinux 目标列表中豁免?

如何将 MySQL 从 SELinux 目标列表中豁免?

我正在运行 CentOS 5.5,并试图将 MySQL 放在非标准端口上……SELinux 对此表示不满。在 SELinux 关闭的情况下,MySQL 启动正常,而在 SELinux 打开的情况下,MySQL 拒绝启动。SELinux 当前正在运行“目标”类型的

我不想完全禁用 SELinux,我想将 MySQL 从目标守护进程列表中排除。有人能告诉我如何为这项服务禁用 SELinux 吗?

答案1

您根本不需要禁用 SELinux。您需要做的就是标记要使用的端口。

要检查策略中 MySQL 的标记端口:


 # semanage port -l | grep mysql
mysqld_port_t                  tcp      1186, 3306, 63132-63163
mysqlmanagerd_port_t           tcp      2273

要标记 $custom 端口:


 # semanage port -a -t mysqld_port_t -p tcp $custom

主要参考资料是semanage(8)手册页。

答案2

如果您使用布尔值关闭 MySQL 的域转换mysqld_disable_trans,MySQL 就不再受 SELinux 的保护。

更详细地说:设置此布尔值将使 mysqld 以 的身份运行initrc_t,这与 大致相同unconfined_t。这意味着 SELinux 对 MySQL 可以使用和不能使用哪些端口的限制被取消了。

使用以下方法翻转布尔值:

setsebool mysqld_disable_trans 1

或者直接使用

setsebool -P mysqld_disable_trans 1

更详细地说:在引导期间 init 守护进程启动 mysqld 时,布尔值禁用从initrc_t域到域的转换,或者在引导后手动启动时禁用从到 的转换。因此,mysqld 根本不在 SELinux 之外运行,而是在一个限制比限制少得多的域中运行。mysqld_tunconfined_tmysqld_tmysqld_t

原生 RHEL5 / CentOS 5 策略中存在的许多服务都有 *_disable_trans 布尔值来关闭该服务的域转换。在较新的发行版和较新的策略中,例如在 Fedora 和 RHEL6 上,您只需卸载 mysqld 的完整模块即可防止 SELinux 阻止您的应用程序执行操作。

相关内容