完整的答案取决于您的服务器配置以及您使用 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 文件。编译这个文件只是稍微多一点工作——你需要 Makefile/usr/share/selinux/devel/Makefile
来把它转换成一个 .pp 文件。
了解更多信息:
如果您是更图形化的类型,RedHat 杂志也有一篇关于编译策略的精彩文章。还有一篇很棒的博客文章将带您了解如何在此处创建策略。注意使用 /usr/share/selinux/devel/Makefile 来编译您自己的 .te、.fc 和 .if 文件(用 M4 编写的 selinux 源代码)的重点。