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