如何限制操作系统用户读取MySQL数据目录

风宇酱_5122

风宇酱_5122

2026-08-15

706人浏览

原创

mysql数据目录安全不靠限制用户组,而是通过属主属组为mysql:mysql、权限750、清理mysql组冗余成员、配置selinux/apparmor上下文及管控tmpdir/socket日志等协同实现。

如何限制操作系统用户读取mysql数据目录

mysql 数据目录(如 /var/lib/mysql)不是靠“限制用户组”实现隔离的,而是靠 Unix 文件权限 + 进程运行身份 + 安全模块协同控制。只要配置稍有偏差,普通用户甚至能直接 cat 出 .ibd 文件或通过 mysqld 崩溃时残留的内存映射访问数据。

datadir 归属和权限必须设为 750

MySQL 服务以 mysql 用户身份运行,默认也属于 mysql 组。目录权限 750 意味着:属主可读写执行、属组可读执行、其他人无任何权限。
若设成 755 或 775,任意本地用户都能 ls /var/lib/mysql 查看库名,甚至用 strings 提取部分明文字段;设成 777 更是直接放弃防线。

  • 先确认真实路径:mysql -e "SELECT @@datadir;" 或查 my.cnf 中 datadir 配置项
  • 递归修正归属:sudo chown -R mysql:mysql /var/lib/mysql
  • 设目录权限(仅顶层目录,子目录继承 umask):sudo chmod 750 /var/lib/mysql
  • 严禁对子目录单独 chmod:MySQL 启动时会校验顶层目录权限,子目录权限宽松不影响启动,但可能被利用绕过(如临时文件写入)

mysql 组里不能有非服务账号

mysql 组成员 ≠ “可读 datadir 的人”,而是“具备组权限”的所有本地账户。只要某人被加进 mysql 组,哪怕没密码、没 shell,也能 su -s /bin/sh -c 'ls /var/lib/mysql' mysql 成功执行——因为组权限生效不依赖登录态。

协同养育操作系统
协同养育操作系统

协同养育操作系统(Co-Parenting OS)— 离异家庭专业协同养育支持系统。12模块覆盖接送管理、成长记忆库、孩子观察站、亲子关系粘合剂、共同挑战中心、情绪冲突观察、父母成长、成长档案馆、成长阶段引擎、风险预警、驾驶舱、被恶意攻击急救包。当用户涉及离异家庭育儿、协同养育、抚养探视、接送安排、孩子成长记录、亲子关系、离异冲突、被恶意攻击、前任矛盾等话题时触发。

下载
  • 检查当前成员:getent group mysql
  • 清理冗余用户:sudo gpasswd -d deploy mysql、sudo gpasswd -d admin mysql 等
  • 理想状态是只含 mysql 用户本身,或为空(mysql:x:27:)
  • 不要用 usermod -aG mysql $USER 给运维账号加组——这是最常见误操作

SELinux 或 AppArmor 必须补上下文

即使文件权限正确,SELinux(RHEL/CentOS)或 AppArmor(Ubuntu/Debian)若未放行,mysqld 进程可能因 denied 权限崩溃;反之,若策略宽松,攻击者可通过提权后的进程绕过文件权限读取数据。

  • CentOS/RHEL:sudo semanage fcontext -a -t mysqld_db_t "/var/lib/mysql(/.*)?",再 sudo restorecon -Rv /var/lib/mysql
  • Ubuntu:sudo nano /etc/apparmor.d/usr.sbin.mysqld,确保含 /var/lib/mysql/** rwk,,然后 sudo systemctl reload apparmor
  • 验证是否生效:ls -Z /var/lib/mysql 应显示 mysqld_db_t 上下文(SELinux)或 aa-status | grep mysqld 显示 enforce 模式(AppArmor)

别忽略 tmpdir 和 socket 文件的连带风险

datadir 安全了,不代表整个 MySQL 数据面就安全。攻击者常从旁路切入:

  • tmpdir(如 /tmp)若被设为全局可写,SELECT ... INTO OUTFILE 可能绕过 secure_file_priv 写出敏感内容——应设为 /var/tmp/mysql-tmp 并 chown mysql:mysql && chmod 700
  • mysql.sock 文件(如 /var/run/mysqld/mysqld.sock)若权限为 666,本地任意用户都能连接并执行 SHOW VARIABLES 获取配置细节——必须 chmod 660 且属主为 mysql:mysql
  • 日志文件(error.log、slow.log)若包含明文 SQL 或路径信息,也应 chmod 640 并归属 mysql:mysql

真正难的是持续性——mysqld 升级、备份脚本重置权限、运维人员手动 chown -R 到错误路径,都会瞬间击穿这层防线。每次变更后,都得跑一遍 ls -ld /var/lib/mysql 和 getent group mysql 确认。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
视频服务器配置参数有哪些
视频服务器配置参数有哪些

视频服务器配置参数有处理器、内存、存储、视频编解码器、网络接口、视频输入输出接口、操作系统、安全性、环境适应性和成本。在搭建视频服务器时,需要根据实际需求和预算,合理选择这些参数,以实现高性能、高稳定性和低成本的目标。

2023.10.17

4580

11

linux的操作系统介绍
linux的操作系统介绍

Linux是一个灵活、稳定、安全的操作系统,适用于各种不同的应用场景,从个人电脑到服务器和嵌入式系统。想了解更多Linux的相关内容,可以阅读本专题下面的文章。

2024.03.20

3586

12

Linux操作系统的主要用途
Linux操作系统的主要用途

Linux操作系统用途广泛,包括:服务器运营,软件开发,科学研究和教育,嵌入式系统,以及个人电脑和笔记本电脑。想了解更多Linux的相关内容,可以阅读本专题下面的文章。

2024.03.21

6259

8

linux操作系统的作用
linux操作系统的作用

linux操作系统在以下领域发挥着关键作用:服务器和云计算;嵌入式系统;个人电脑和笔记本电脑;超级计算;其他领域等等。想了解更多linux操作系统的相关内容,可以阅读本专题下面的文章。

2024.04.12

2915

5

有哪些常见的网络操作系统
有哪些常见的网络操作系统

常见的网络操作系统有windows server、linux、unix、macos server、freebsd、cisco ios、juniper junos和hp-ux等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.09.12

3484

6

32位操作系统怎么改成62位的
32位操作系统怎么改成62位的

要将 32 位操作系统升级到 64 位,需要遵循以下步骤:1. 检查硬件和软件兼容性;2. 备份数据;3. 获取 64 位操作系统;4. 创建可启动安装媒体;5. 从安装媒体启动计算机;6. 选择“升级”选项;7. 完成安装。

2025.04.02

3463

9

mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

2253

6

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.21

1379

5

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

815

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 188人学习