selinux开启导致MySQL启动报错 Permission denied

0    54    2

👉 本文共约1173个字,系统预计阅读时间或需5分钟。

背景

OS:centos 7.9

MySQL:5.7

首次使用某海外云,申请云主机自建 MySQL ,service mysqld start 启动报错

诊断

journalctl -xe 查看详细日志。

查看文件权限,属主都是 mysql 。

service mysqld start 尝试好几次都以失败告终,手工执行 mysqld --defaults-file=/etc/my.cnf 能成功启动,说明 MySQL 的配置是正常的,问题应该出现在 OS 系统设置。

采用 strace 跟踪一下,

输出内容

socket 设置出现了 selinux context 相关信息,应该是与 selinux 设置有关。

查看系统日志 /var/log/audit/audit.log 复核,明确记录了 err.log 权限验证失败信息。

确认机器开启了 selinux 。

Linux 提供两种鉴权认证体系,DAC(Discretionary Access control) 自主访问控制和 MAC(Mandatory Access control) 强制性访问控制,平时最常使用的是 DAC 。

DAC 将资源访问者分成三类,分别是 Owner 、Group 、Other ,针对这三类访问者设置访问权限,权限分成 read、write、execute ,访问者通过自己 uid/gid 和文件权限匹配,来确定是否可以访问。

这种策略有2个明显缺陷:

  • 某个OS账号启动的任意进程,都拥有这个账号的所有权限,可以改动/删除这个账号下的所有文件资源。
  • Root 账号拥有最高权限几乎可以做任意事情,一旦入侵者拿到 root 权限,就能完全掌控该机器。

MAC 对权限做了细化,每访问一个文件资源都需要进行验证,并且限制了 Root 账号权限,即使你有 root 权限,如果无法通过 MAC 验证,同样无法执行相关操作。

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

DAC 的权限访问粒度是用户级别,MAC则是文件级别。

SELinux context 是一个冒号分隔的字符串,包含4个部分:user:role:type:range

上面的 avc: denied 报错信息可以做如下解读:

  • denied -> append //缺少什么权限
  • scontext -> mysqld_t //谁缺少权限
  • tcontext -> unlabeled_t //对哪个文件缺少权限
  • tclass -> file //什么类型的文件

这条信息可以解读为 mysqld_t 对 unlabeled_t 的 file 类型文件 err.log 缺少 append 权限。

解决方案

我们的机器初始化时会关闭 selinux ,但是海外新环境没有运行初始化脚本 ,因此该问题最简单的解决方案就是关闭 selinux 。

修改 /etc/selinux/config 文件,设置 SELINUX=disabled ,重启机器,mysqld 可以正常启动。

参考

https://mp.weixin.qq.com/s/_5s2VxYG9SdvOO-5RWvIng

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

2 × 3 =

 

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部