0

我已经在我的 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 进入许可模式?

4

1 回答 1

1

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

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

命令

    # 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 文件。编译这个文件只是稍微多一点工作——你需要 Makefile/usr/share/selinux/devel/Makefile来把它转换成一个 .pp 文件。

了解更多信息:

如果您是更图形化的类型,RedHat 杂志也有一篇关于编译策略的精彩文章。还有一篇很棒的博客文章将带您了解如何在此处创建策略。注意使用 /usr/share/selinux/devel/Makefile 来编译您自己的 .te、.fc 和 .if 文件(用 M4 编写的 selinux 源代码)的重点。

于 2013-09-17T00:19:24.817 回答