我已经在F19上成功安装了MySQL 5.6。尽管安装成功,但是我无法启动mysql服务。

我跑的时候

service mysql start


它返回以下错误:

Starting MySQL..The server quit without updating PID file (/var/lib/mysql/sandboxlabs.pid).


我禁用了SELinux(许可模式),该服务顺利启动。但是我做了一些关于禁用SELinux的研究,发现禁用SELinux是一个坏主意。那么,有什么方法可以添加自定义MySQL策略?还是应该让SELinux进入许可模式?

最佳答案

完整的答案取决于您的服务器配置以及MySQL的使用方式。但是,修改SELinux策略以允许MySQL运行是完全可行的。在大多数情况下,可以使用少量的Shell命令来执行这种操作。

首先查看/var/log/audit/audit.log。您可以使用audit2allow围绕日志消息本身生成权限授予策略。在Fedora 19上,该实用程序位于policycoreutils yum软件包中。

命令

    # grep mysql /var/log/audit/audit.log | audit2allow


...将输出为了允许被阻止并登录到audit.log中的mysql操作而需要编译的策略代码。您可以查看此输出,以确定是否要将此类权限合并到系统的策略中。它可能有点深奥,但通常可以确定mysql运行该文件所需的一些文件权限。

要启用这些更改,您需要将策略模块创建为已编译模块:

    # grep mysql /var/log/audit/audit.log | audit2allow -M mysql


...将保存的明文代码输出到mysql.te,将编译后的策略代码输出到mysql.pp。然后,您可以使用semodule工具将其导入到系统的策略中。

    # semodule -i mysql.pp


完成此操作后,尝试再次启动mysqld。您可能需要重复此过程几次,因为mysqld可能仍旧无法获得以前运行时未记录的某些新访问权限。这是因为服务器守护程序会依次遇到这些权限检查,并且如果它在一个守护程序上被触发,则在您允许访问初始守护程序之前不会遇到其他权限。有耐心-有时您将需要创建mysql1.pp mysql2.pp mysql3.pp ...等。

如果您真的有兴趣将它们组合到统一策略中,则可以将.te文件并“粘”在一起以创建统一的.te文件。编译该文件仅需要更多的工作-您需要/usr/share/selinux/devel/Makefile中的Makefile才能将其转换为.pp文件。

了解更多信息:

如果您是更图形化的类型,那么RedHat杂志也有一篇很棒的文章,介绍了编译策略here。还有一篇很棒的博客文章,它引导您完成策略here的创建。请注意使用/ usr / share / selinux / devel / Makefile来编译自己的.te,.fc和.if文件(M4编写的selinux源代码)的重点。

07-27 13:30