首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SELinux 权限问题导致 GreatSQL 运行不了的坑

SELinux 权限问题导致 GreatSQL 运行不了的坑

作者头像
GreatSQL社区
发布于 2023-02-22 02:43:44
发布于 2023-02-22 02:43:44
89700
代码可运行
举报
运行总次数:0
代码可运行

* GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。

系统版本:Linux version 4.18.0-348.el8.x86_64

前言

SELinux 是什么

安全增强型 Linux(SELinux)是一种采用安全架构的 Linux® 系统,它能够让管理员更好地管控哪些人可以访问系统。它最初是作为 Linux 内核的一系列补丁,由美国国家安全局(NSA)利用 Linux 安全模块(LSM)开发而成。

SELinux 工作原理

SELinux 定义了每个人对系统上的应用、进程和文件的访问控制。利用安全策略(一组告知 SELinux 哪些能访问,哪些不能访问的规则)来强制执行策略所允许的访问。

当应用或进程(称为主体)发出访问对象(如文件)的请求时,SELinux 会检查访问向量缓存(AVC),其中缓存有主体和对象的访问权限。

开启 SELinux 可以提升系统的安全性,但同时也会带来一些问题。在特定场景有的人会选择关闭 SELinux 以换取更好的兼容性。

在GreatSQL的安装手册里,就有关闭 SELinux 这一步。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#关闭selinux
$ setenforce 0
$ sed -i '/^SELINUX=/c'SELINUX=disabled /etc/selinux/config

不禁让人好奇,这个 SELinux 安全模块,如果不关闭会产生什么问题,在使用时有哪些需要注意的地方。于是我特意尝试了一下,开启 SELinux 安装 GreatSQL 数据库,看看会出现哪些问题。

问题产生

为了发现问题,我特意选择在用户目录(/root)下载解压 GreatSQL 二进制压缩包,然后再移动到指定目录使用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd /root
wegt https://***.***/greatsql.tar.gz
tar -xvf greatsql.tar.gz
mv /root/greatsql /usr/local/

安装过程一切顺利,数据库正常启动了,但是在配置 systemd 进程守护的时候出现了问题。

greatsql.service文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim /usr/lib/systemd/system/greatsql.service

[Unit]
Description=GreatSQL Server
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=greatsql
Group=greatsql


# Have mysqld write its state to the systemd notify socket
Type=notify

# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0

# Start main service
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf $MYSQLD_OPTS 

# Use this to switch malloc implementation
#EnvironmentFile=-/etc/sysconfig/mysql

# Sets open_files_limit
LimitNOFILE = 10000

Restart=on-failure

RestartPreventExitStatus=1

# Set environment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1

PrivateTmp=false

systemctl start greatsql 启动数据库的时候报以下错误。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@Linux ~]# systemctl restart greatsql
Job for greatsql.service failed because the control process exited with error code.
See "systemctl status greatsql.service" and "journalctl -xe" for details.

直接运行mysqld没问题但是使用systemctl 就启动不了。

根据上面的报错,查看一下 greatsql systemd的状态和相关日志

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@gip Linux]# systemctl status greatsql.service
● greatsql.service
   Loaded: loaded (/usr/lib/systemd/system/greatsql.service; bad; vendor preset: disabled)
   Active: failed (Result: exit-code) since Tue 2023-01-10 16:00:06 CST; 17s ago
  Process: 147226 ExecStart=/usr/local/greatsql/bin/mysqld --defaults-file=/etc/my.cnf $MYSQLD_OPTS (code=exited, status=203/EXEC)
 Main PID: 147226 (code=exited, status=203/EXEC)

Jan 10 16:00:06 gip systemd[1]: greatsql.service: Service RestartSec=100ms expired, scheduling restart.
Jan 10 16:00:06 gip systemd[1]: greatsql.service: Scheduled restart job, restart counter is at 5.
Jan 10 16:00:06 gip systemd[1]: Stopped greatsql.service.
Jan 10 16:00:06 gip systemd[1]: greatsql.service: Start request repeated too quickly.
Jan 10 16:00:06 gip systemd[1]: greatsql.service: Failed with result 'exit-code'.
Jan 10 16:00:06 gip systemd[1]: Failed to start greatsql.service.
Jan 10 16:00:23 gip systemd[1]: /usr/lib/systemd/system/greatsql.service:1: Missing '='.

通过查看上述信息,可以得知 程序启动的时候抛出了报错。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 Main PID: 147226 (code=exited, status=203/EXEC)

通过上网搜索可以得知,status=203/EXEC 报错可能和权限不足有关,记一下这里的PID。

我们继续查看一下相关日志证实一下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@Linux ~]# journalctl _PID=13386

-- Logs begin at Tue 2023-01-10 16:54:11 CST, end at Tue 2023-01-10 17:09:15 CST. --
Jan 10 17:00:36 gip systemd[13386]: greatsqld.service: Failed to execute command: Permission denied
Jan 10 17:00:36 gip systemd[13386]: greatsqld.service: Failed at step EXEC spawning /usr/local/greatsql/bin/mysqld: Permission denied

可以看到确实是权限不足。

但是奇怪的事情来了,通过查看文件权限发现权限并没有问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@GreatSQL bin]# ls -lah |grep mysql
-rwxr-xr-x.   1 root root    6.9M 429 2022 mysql
-rwxr-xr-x.   1 root root    6.8M 429 2022 mysqladmin
-rwxr-xr-x.   1 root root    7.1M 429 2022 mysqlbinlog
-rwxr-xr-x.   1 root root    6.8M 429 2022 mysqlcheck
-rwxr-xr-x.   1 root root    6.3K 429 2022 mysqld_pre_systemd
-rwxr-xr-x.   1 root root     34K 429 2022 mysqld_safe
-rwxr-xr-x.   1 root root    6.9M 429 2022 mysqldump
-rwxr-xr-x.   1 root root    1.7K 429 2022 mysqldumpslow
 ***后省略***

即便把权限改成755,甚至777 也还是会报一样的错误。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
chown -R mysql:mysql /usr/local/mysql
chmod 755 -R /usr/local/mysql

问题原因

后面我有检查了所有相关文件的权限,都没问题,但是程序还是会报权限不足。

在网上翻阅了资料,发现了问题产生原因。

SELinux 的问题, 因为我的二进制文件是先下载到 /root 目录,然后才移到 /usr/local/greatsql目录,从/root目录移动到/usr/local/目录时它们的 SELinux 上下文不会自动变更,依然是用户主目录。所以出现了权限问题。

解决方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#恢复文件的安全上下文
restorecon -rv /usr/local/greatsql

总结

可执行文件是先存放在用户目录,然后移动到别的目录,文件的 SELinux 上下文不会自动变更,依然是用户目录。

这就导致了,能直接运行,但是通过 systemd 启动时仍然报 Permission denied权限不足的问题。

解决方法就是用restorecon命令用来恢复SELinux文件属性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
restorecon -rv 目标目录

相关链接: 解决文件权限正确,但 systemd 服务仍然提示没有权限,启动失败。(https://blog.csdn.net/kunyus/article/details/106592236) 一文带你看懂 SELinux 是什么? (redhat.com(https://www.redhat.com/zh/topics/linux/what-is-selinux)

Enjoy GreatSQL :)


《零基础学习MySQL》视频课程

戳此小程序即可直达B站

https://www.bilibili.com/video/BV1Da411W7Va?spm_id_from=333.999.0.0&vd_source=ae1951b64ea7b9e6ba11f1d0bbcff0e4


文章推荐:

  • GreatSQL社区2023新春有奖调研
  • NL连接一定是小表驱动大表效率高吗
  • MySQL如何快速禁用账户登入 & 如何复制/复用账户密码
  • 联合评测 | GreatSQL 开源数据库在 DapuStor Roealsen5 NVMe SSD 中的应用探索
  • 展会 | GreatSQL社区受邀2022边缘计算产业峰会 共促边缘计算开源规模应用

关于 GreatSQL

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。

GreatSQL社区官网: https://greatsql.cn/

Gitee: https://gitee.com/GreatSQL/GreatSQL

GitHub: https://github.com/GreatSQL/GreatSQL

Bilibili:https://space.bilibili.com/1363850082

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GreatSQL社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
技术分享 | 将GreatSQL添加到系统systemd服务
systemd 是Linux系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程,systemd被设计用来改进原来sysvinit中的多个缺点。
老叶茶馆
2021/07/09
1.9K0
ansible一键安装GreatSQL并构建MGR集群
修改 /etc/ansible/hosts 文件,把要安装GreatSQL的服务器IP加进去,例如:
老叶茶馆
2021/07/30
6360
RPM方式安装GreatSQL 8.0.25-16
部署前提:准备一个干净的系统,确认先前没有安装过MySQL、Mariadb等相关服务,造成不必要的冲突。
GreatSQL社区
2022/05/18
5730
GreatSQL配置到系统systemd服务
我们单机版安装用的是mysql.server start启动的数据库,但从标准化管理的角度,使用systemd更加合适,我们参考《技术分享 | 将GreatSQL添加到系统systemd服务》,进行下配置。
bisal
2022/04/11
2970
GreatSQL配置到系统systemd服务
Linux学习13-CentOS安装mysql5.6环境
安装完成后重启mysql服务,查看状态是 Active: active (running) ,说明启动成功
上海-悠悠
2019/05/06
1.1K0
Linux学习13-CentOS安装mysql5.6环境
MySQL-CentOS7通过YUM安装MySQL5.7.29
http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/doc/refman/5.7/en/index.com.coder114.cn.html
小小工匠
2021/08/17
8560
GreatSQL登陆Arch Linux:成功的数据库安装之旅
Arch Linux是一个轻量、灵活、基于x86-64架构的Linux发行版,遵循K.I.S.S.原则。注重代码正确、优雅和极简主义,期待用户能够愿意去理解系统的操作。
GreatSQL社区
2023/12/14
2780
GreatSQL登陆Arch Linux:成功的数据库安装之旅
麒麟OS+龙芯环境编译GreatSQL
本次介绍如何在麒麟OS + 龙芯CPU的环境下将GreatSQL源码编译成二进制文件及RPM包等。
GreatSQL社区
2023/02/24
9180
Linux MySQL 常见无法启动或启动异常的解决方案
  在 Linux 上自建 MySQL 服务器,经常遇到各种无法启动或启动后异常的问题,本文列举一些常见问题的解决办法。
kirin
2020/11/04
10.5K0
Linux MySQL 常见无法启动或启动异常的解决方案
Linux系统安装MySQL的详细步骤
(图片来自:https://www.cnblogs.com/gpdm/p/7170521.html)
问问计算机
2021/05/08
5.4K0
Linux系统安装MySQL的详细步骤
Mysql报错:InnoDB: Operating system error number 13 in a fil..的解决方法
查看日志后可以看到日志中的ERROR信息,不懂的地方可以翻译一下,方便理解,寻找有用的信息。
非著名运维
2022/06/22
1.6K0
技术分享 | MySQL 如何适配 AppArmor
资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相关技术支持、MySQL 相关课程培训等工作。
爱可生开源社区
2021/11/19
1.5K0
MySQL 8 手动安装后无法启动的问题解决
首先的自我检讨与自我批评,最近有点懒,知识的更新慢,最近在更换系统到ubuntu 22.04 ,废弃centos ,同时MYSQL 都在8 以上,之前MySQL都是在CENTOS 7.5 上安装,并且也都自动化安装,基本上没有问题,但到了ubuntu 22.04 基于对于系统的不熟悉, 产生很多的问题。
AustinDatabases
2023/11/24
7650
MySQL 8  手动安装后无法启动的问题解决
Install MediaWiki
前言 MediaWiki 是一款用 php 实现的开源 wiki 软件 MediaWiki is a free software open source wiki package written in PHP, originally for use on Wikipedia. It is now also used by several other projects of the non-profit Wikimedia Foundation and by many other wikis, includi
franket
2021/08/11
1.1K0
SELinux的基本使用
从进入了 CentOS 5.x 之后的 CentOS 版本中 (当然包括 CentOS 7),SELinux 已经是个非常完备的核心模块了!尤其 CentOS 提供了很多管理 SELinux 的指令与机制,因此在整体架构上面是单纯且容易操作管理的!所以,在没有自行开发网络服务软件以及使用其他第三方协力软件的情况下,也就是全部使用 CentOS 官方提供的软件来使用我们服务器的情况下,建议大家不要关闭 SELinux ! 让我们来仔细的玩玩这家伙吧!
小柒吃地瓜
2020/04/23
3.1K0
官答丨操作系统升级 Openssl 导致 GreatSQL 无法启动
本问题来自讨论区群,用户使用数据库环境大概介绍如下: 名称版本操作系统CentOS 7系统内核版本3.10.0-1160.118.1.el7.x86_64openssl升级之前版本1.0.2kopenssl升级之后版本1.1.1w数据库版本GreatSQL-8.0.32-25 用户问题 用户提供的问题信息内容如下: 1、Openssl 版本升级之后 GreatSQL 无法启动报错如下: -- Unit mysqld.service has begun starting up. Jun 07 14:03:21 m-node1 mysqld[34078]: /usr/local/GreatSQL/bin/mysqld: /usr/local/openssl/lib/libcrypto.so: version `OPENSSL_1.0.1_EC' not found (required by /usr/local/GreatSQL/bin/../lib/private/libssl.so.10) Jun 07 14:03:21 m-node1 mysqld[34078]: /usr/local/GreatSQL/bin/mysqld: /usr/local/openssl/lib/libcrypto.so: version `libcrypto.so.10' not found (required by /usr/local/GreatSQL/bin/../lib/private/libssl.so.10) Jun 07 14:03:21 m-node1 systemd[1]: mysqld.service: control process exited, code=exited status=1 Jun 07 14:03:21 m-node1 systemd[1]: Failed to start MySQL Server. 2、用户经过检查,再次安装了 GreatSQL 的 rpm 依赖包,依然报错 so 动态库文件问题 $ yum install -y pkg-config perl libaio-devel numactl-devel numactl-libs net-tools openssl openssl-devel jemalloc jemalloc-devel perl-Data-Dumper perl-Digest-MD5 python2 perl-JSON perl-Test-Simple 3、将 GreatSQL 命令配置到环境变量 PATH 中,依然报错 so 动态库文件问题 $ ln -s /usr/local/GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64 /usr/local/greatsql $ vim /etc/profile export PATH=$PATH:/usr/local/greatsql/bin $ source /etc/profile $ mysql -V mysql: /usr/local/openssl/lib/libcrypto.so: version `libcrypto.so.10' not found (required by mysql) mysql: /usr/local/openssl/lib/libssl.so: version `libssl.so.10' not found (required by mysql) 解答用户疑问 根据现象及报错内容分析,推测极可能是在 /usr/local 目录下安装了更高版本的 Openssl,导致动态库链接失败。 这种情况可以把 Openssl 下的 lib 库加载到 LD_LIBRARY_PATH 环境变量中。 解决用户问题 将 Openssl 下的 lib 库加载到 LD_LIBRARY_PATH 环境变量中。 意思也是为了,不将 /usr/local/openssl/lib 加载到 LD_LIBRARY_PATH 中了。 $ vim /etc/profile export LD_LIBRARY_PATH=/usr/lib64 $ source /etc/profile 使用ldd命令检查mysqld是否缺失依赖so库文件 $ ldd mysqld | grep ssl libssl.so.10 => /usr/local/GreatSQL-8.0.32-25-Linux-glibc2.17- x86_64/bin/./../lib/private/libssl.so.10 (0x00007f292ed72000) $ ldd mysql | grep ssl libssl.so => /lib64/libssl.so (0x000
GreatSQL社区
2024/07/06
2000
官答丨操作系统升级 Openssl 导致 GreatSQL 无法启动
CentOS Stream 9 安装MySQL5.7和MySQL8.4
好多人都因为“CentOS 已死”觉得自CentOS 8.5以后再没必要使用CentOS了,可是我看过一篇《CentOS Stream 是稳定的 | 观点》,觉得很有道理,于是用了一段时间CentOS Stream9。就我个人而言,它是强大且稳定的,至少我觉得比8.4要好。
IvanM
2024/10/23
1.2K0
采用『Prometheus+Grafana』安装部署方式实现对Linux系统主机监控管理
文章目录 〇、参考链接 一、前期准备 1、安装CentOS系统 2、准备部署环境 (1)修改主机名 (2)查看CentOS版本号 (3)配置网络参数信息 (4)关闭防火墙 (5)关闭SELINUX安全模式 3、测试网络连通性 4、备份并缓存YUM源 5、重新加载YUM源镜像 6、更新YUM源仓库 二、环境部署规划表 三、操作步骤 Ⅰ、Prometheus服务端安装部署 1.1、安装Go环境 1.2、将Go压缩包解压 1.3、配置环境变量 1.4、测试Go环境是否安装成功 2.1、下载 Prometheus
宝耶需努力
2022/12/13
3.6K0
采用『Prometheus+Grafana』安装部署方式实现对Linux系统主机监控管理
故障分析 | MySQL 启动遭遇 Permission denied 失败案例一则
首次使用某海外云,申请云主机自建 mysql ,service mysqld start 启动报错
爱可生开源社区
2022/10/31
2.1K0
图文结合丨Prometheus+Grafana+GreatSQL性能监控系统搭建指南(上)
官网下载最新二进制安装包➥ https://prometheus.io/download/
GreatSQL社区
2023/10/09
7880
图文结合丨Prometheus+Grafana+GreatSQL性能监控系统搭建指南(上)
相关推荐
技术分享 | 将GreatSQL添加到系统systemd服务
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档