我在我的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留给许可模式吗?
答案 0 :(得分:1)
完整的答案取决于您的服务器配置以及您使用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源代码)。