讲师中心 微信公众号
AI工具推荐 视频效率加速

MySQL如何对MySQL配置文件进行权限保护_设置my.cnf只读属性

夏萱大大_3383

夏萱大大_3383

发布时间:2026-04-10 11:35:42

|

695人浏览过

|

来源于php中文网

原创

直接 chmod 400 /etc/my.cnf 不够安全,因 mysqld 以 mysql 用户运行且无 root 权限,将无法读取配置导致启动失败;正确做法是 chown root:mysql /etc/my.cnf && chmod 640 /etc/my.cnf,确保 mysql 组可读不可写。

mysql如何对mysql配置文件进行权限保护_设置my.cnf只读属性

为什么直接 chmod 400 /etc/my.cnf 不够安全

MySQL 启动时会以 mysqld 进程身份读取 my.cnf,但这个进程通常由 mysql 用户运行,而该用户往往没有 root 权限。如果配置文件被设为 400(仅 root 可读),mysqld 就会因权限不足报错退出,典型错误是:Can't read from file '/etc/my.cnf' 或启动日志里出现 Failed to open config file。

真正要防的是「非授权修改」,不是「非授权读取」——MySQL 自身并不加密或校验配置文件内容,所以重点应放在:谁可以写、谁可以删、谁可以替换。

  • chmod 600 /etc/my.cnf 是底线:确保只有 root 可读写,mysql 用户仍能读(因为进程继承了 root 启动时的权限?不,实际是靠文件系统读权限;600 下 root 可读写,其他用户包括 mysql 用户完全不可读——所以这也不行)
  • 正确做法是:chown root:mysql /etc/my.cnf && chmod 640 /etc/my.cnf,让 mysql 组可读,但不可写
  • 更进一步:用 chattr +i /etc/my.cnf 设为不可修改(需 root 解除),但要注意——mysqld 升级或某些自动化工具(如 mysql_secure_installation)可能尝试覆盖它,导致失败

哪些路径的 my.cnf 会被 MySQL 实际加载

MySQL 按固定顺序查找多个 my.cnf,常见路径有:/etc/my.cnf、/etc/mysql/my.cnf、/usr/etc/my.cnf、~/.my.cnf。只要其中任一文件存在且可读,就会被合并解析。只保护 /etc/my.cnf 而忽略 /etc/mysql/my.cnf,等于留了个后门。

Pandas 配置文件报告生成器
Pandas 配置文件报告生成器

使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。

下载
  • 运行 mysqld --help --verbose | grep "Default options" 可看到实际搜索路径列表
  • 生产环境建议统一使用 /etc/my.cnf,并确保其他路径不存在或为空文件(避免被误读)
  • ~/.my.cnf 特别危险:如果 MySQL 服务以普通用户启动(比如开发机),它可能从用户家目录加载配置,而该文件常含密码明文([client] 段里的 password=xxx)

my.cnf 里哪些配置项本身构成安全隐患

权限保护不只是文件系统层面的事。即使 my.cnf 本身只读,里面写死的敏感配置仍可能泄露风险。

  • password = xxx 出现在 [client] 或 [mysqld] 段:MySQL 8.0+ 已弃用,且极不安全;应改用 mysql_config_editor 存储加密登录路径
  • socket = /tmp/mysql.sock:若 socket 文件路径在世界可写目录(如 /tmp),攻击者可伪造 socket 接入本地连接
  • bind-address = 0.0.0.0 配合空密码或弱密码,等于把数据库裸奔暴露在公网——文件只读解决不了这个问题

systemd 环境下如何防止配置被意外覆盖

现代 Linux 发行版多用 systemd 托管 mysqld,而某些包管理器(如 apt、yum)升级时会重写 /etc/my.cnf,尤其当它被标记为“配置文件”且用户修改过。这时 chattr +i 会直接导致升级失败或服务无法启动。

  • 推荐做法:把自定义配置拆到 /etc/my.cnf.d/ 下的独立文件(如 /etc/my.cnf.d/production.cnf),主 my.cnf 保持最小化,并设为 644;再对整个 /etc/my.cnf.d/ 目录执行 chown -R root:mysql /etc/my.cnf.d/ && chmod -R 750 /etc/my.cnf.d/
  • 检查 mysqld.service 是否通过 EnvironmentFile= 加载额外变量,这类文件也要同步保护
  • 备份前先 lsattr /etc/my.cnf*,确认没漏掉带 i 属性的文件——这个属性不会随 cp 或 rsync 复制,但容易让人误以为“已备份好”,结果恢复时发现根本改不了

最易被忽略的一点:MySQL 客户端工具(如 mysql、mysqldump)默认也会读 ~/.my.cnf,而这个文件常被运维忽略权限设置。哪怕服务端配置天衣无缝,一个开发机上残留的 ~/.my.cnf 也可能让某次误操作连上生产库。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

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

2393

2023.06.20

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

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

1439

2023.06.21

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

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

855

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3352

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

5748

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

1239

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6011

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

5222

2023.08.14

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

20

2026.10.28

热门下载

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

精品课程

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

共1课时 | 193人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn