对SELinux的故障排除通常包括将SELinux置于许可模式,重新运行有问题的操作,检查SELinux审计日志中的访问拒绝消息,以及在问题解决后将SELinux重新置于强制模式。
避免将整个系统置于允许模式使用setenforce,你可以只允许MySQL服务运行通过设置它的SELinux域(mysqld_t
)转换为允许模式semanage命令:
语义允许-a mysqld_t
完成故障排除后,使用此命令将mysqld_t
域返回执行模式:
语义允许-d mysqld_t
SELinux将拒绝操作的日志写入/var/log/audit/audit.log
.你可以通过搜索”否认”消息。
Grep "denied" /var/log/audit/audit.log
以下部分描述了可能会遇到与selinux相关的问题的几个常见领域。
如果MySQL目录或文件有错误的SELinux上下文,访问可能会被拒绝。如果将MySQL配置为读取或写入非默认目录或文件,则会出现此问题。例如,如果您将MySQL配置为使用非默认数据目录,则该目录可能没有预期的SELinux上下文。
尝试在非默认数据目录上使用无效的SELinux上下文启动MySQL服务将导致以下启动失败。
Shell > systemctl start mysql。service mysqld的Job。服务失败,控制进程退出,提示错误码。参见“systemctl status mysqld”。Service”和“journalctl -xe”。
在这种情况下,a”否认”消息已记录到/var/log/audit/audit.log
:
shell> grep "denied" /var/log/audit/audit.log type=AVC msg=audit(1587133719.786:194): AVC: denied {write} for pid=7133 comm="mysqld" name="mysql" dev="dm-0" ino=51347078 scontext=system_u:system_r:mysqld_t:s0 tcontext=unconfined_u:object_r:default_t:s0 tclass=dir permit =0
有关为MySQL目录和文件设置合适的SELinux上下文的信息,请参见第6.7.4节,“SELinux文件上下文”.
SELinux希望MySQL Server等服务使用特定的端口。更改端口而不更新SELinux策略可能导致业务失败。
的mysqld_port_t
port type定义MySQL监听的端口。如果您配置MySQL Server使用非默认端口,如3307端口,并且没有更新策略以反映该更改,MySQL服务将无法启动:
Shell > systemctl start mysqld。service mysqld的Job。服务失败,控制进程退出,提示错误码。参见“systemctl status mysqld”。Service”和“journalctl -xe”。
在这种情况下,拒绝消息被记录到/var/log/audit/audit.log
:
shell> grep "denied" /var/log/audit/audit.log type=AVC msg=audit(1587134375.845:198): AVC: denied {name_bind} for pid=7340 comm="mysqld" src=3307 scontext=system_u:system_r:mysqld_t:s0 tcontext=system_u:object_r:unreserved_port_t:s0 tclass=tcp_socket permit =0
有关为MySQL设置适当的SELinux端口上下文的信息,请参见第6.7.5节,“SELinux TCP端口上下文”.在启用MySQL特性时,如果使用了没有使用所需上下文定义的端口,则会出现类似的端口访问问题。有关更多信息,请参见第6.7.5.2节“设置MySQL特性的TCP端口上下文”.
SELinux可能不知道应用程序的更改。例如,新版本、应用程序扩展或新特性可能以SELinux不允许的方式访问系统资源,从而导致访问拒绝。在这种情况下,您可以使用audit2allow实用程序来创建自定义策略,以允许在需要的地方进行访问。创建自定义策略的典型方法是将SELinux模式更改为允许模式,在SELinux审计日志中标识访问拒绝消息,并使用audit2allow实用程序来创建允许访问的自定义策略。
有关使用audit2allow实用工具,请参考发行版的SELinux文档。10bet官方网站
如果你遇到MySQL的访问问题,你认为应该由标准的MySQL SELinux策略模块来处理,请在你的发行版的错误跟踪系统中打开一个错误报告。