「作者简介」:冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。
这一章节我们需要知道 MySQL「文件权限」存在哪些安全问题,如何针对这些问题做安全加固。
MySQL文件权限
- 1、数据库配置文件
- 2、数据存储文件
- 3、历史操作文件
在实际生产环境中,应按照软件安全设计的「最小特权原则」设置MySQL的文件权限。
- MySQL「安装目录」的属主和属组需要设置成mysql用户;
- MySQL的「历史操作文件」、「历史命令文件」、「数据物理存储文件」只给属主用户读写权限;
- MySQL的「配置文件」只给属主用户读写权限,属组和其他用户给只读权限。
依次执行下列命令,检查权限是否符合要求:
ll ~/.mysql_history ~/.bash_history
权限600ll /etc/my.cnf
权限644find / -name *.ibd | xargs ls -al
权限600find / -name *.MYD | xargs ls -al
权限600find / -name *.MYI| xargs ls -al
权限600find / -name *.frm| xargs ls -al
权限600
接下来给大家解释一下这些文件都是干嘛的。
1、数据库配置文件
/etc/my.cnf
是MySQL数据库「配置文件」,为了防止未授权篡改,应设置权限为 644。
ll /etc/my.cnf
检查配置文件权限:
/etc/my.cnf
默认有以下字段:
- datadir:数据库目录
- socket:MySQL客户端程序与服务端通信的套接字文件
- log-error:日志位置
- pid-file:存放MySQL进程id的文件
2、数据存储文件
MySQL每创建一个「表」,都会在数据库目录下创建一个「二进制文件」,用来存储表中的「数据」。
下图中可以看到,除了information_schema 和 performance_schema ,每个数据库都对应一个目录,目录下存放这个数据库的表文件。
MySQL8.0以前,数据存储文件统一用 .frm
扩展名。
MySQL8.0以后,不同的数据库引擎,保存文件的扩展名不一样。
- InnoDB:独享表空间用
.idb
,一个表对应一个文件;共享表空间用.ibdata
,多个表公用一个文件。 - MyISAM:表的数据用
.MYD
;表的索引用.MYI
。 - Archive:
.arc
- CSV:
.csv
查看支持的引擎 show engines;
,default表示默认,正在使用的引擎。
为了防止未授权访问和篡改,数据存储文件的权限应配置为 600。
检查数据库文件的权限:
find / -name *.ibd | xargs ls -al
find / -name *.MYD | xargs ls -al
find / -name *.MYI| xargs ls -al
find / -name *.frm| xargs ls -al
3、历史操作文件
~/.mysql_history
和 ~/.bash_history
分别存储MySQL「历史操作命令」和「系统历史命令」。
为了防止未授权访问和篡改,应将文件权限配置为 600。
ll ~/.mysql_history ~/.bash_history