对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服务会导致以下启动失败。
systemctl启动mysql。mysqld的service Job。服务失败,因为控制进程退出并带有错误代码。参见“systemctl status mysqld”。Service”和“journalctl -xe”。
在本例中,a”否认”消息被记录到/var/log/audit/audit.log
:
$> 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 permissive=0
有关为MySQL目录和文件设置适当的SELinux上下文的信息,请参见第6.7.4节,SELinux文件上下文.
SELinux期望MySQL Server等服务使用特定的端口。修改端口而不更新SELinux策略可能导致业务失败。
的mysqld_port_t
port type定义MySQL监听的端口。如果您将MySQL服务器配置为使用非默认端口,例如3307端口,并且没有更新策略以反映更改,则MySQL服务无法启动:
$> systemctl start mysqld。mysqld的service Job。服务失败,因为控制进程退出并带有错误代码。参见“systemctl status mysqld”。Service”和“journalctl -xe”。
在这种情况下,将记录到拒绝消息/var/log/audit/audit.log
:
$> 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 permissive=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策略模块来处理,请在您的发行版的错误跟踪系统中打开错误报告。