最近在做mysql数据库加固,主要根据CIS数据库加固规则来写脚本,其中有一个加固项是禁止mysql使用软连接,被同事提问使用软连接为什么不行,一时之间我也不知道该如何回答,所以专门写个文章来分析一下mysql软连接这个功能。
根据mysql官方文档,使用软连接的方法如下:
You can move databases or tables from the database directory to other locations and replace them with symbolic links to the new locations. You might want to do this, for example, to move a database to a file system with more free space or increase the speed of your system by spreading your tables to different disks.
把数据库或者表移动到其他位置,并使用软连接替换原来文件的位置。
比如你的data文件下有一个表文件,现在移动到其他磁盘并使用软连接替换,那再data文件下找到这个表文件的时候,这个文件就会指向其他文件的路径,这样说来系统的其他位置存在数据库文件。
image我先创建了数据库aaa,然后使用root账号进入data文件夹下把数据库文件移动到其他文件夹,并创建软连接,可以看到,软连接文件权限为777,属于root用户root组
image实际文件的权限仍为原来数据库的文件权限,所以即使使用软连接,实际文件仍能保留数据库初始文件属性。
一般在生产环境中,数据库data文件所在分区和系统分区是分开的,而使用软连接的情况下多数是保存在系统分区。而针对数据库加固的重要思想就是将系统分区和数据分区分开,防止数据库写入数据影响系统性能,也防止系统用户修改数据库数据。
当使用软连接,尤其是用root运行mysqld时,攻击者将可以通过数据库获得root权限,又由于数据同时存储在系统分区,将导致攻击者可以修改系统分区的任意文件;当使用mysql命令修改软连接对应的数据库,会修改存储在系统分区的实际文件,可能对系统内的其他文件进行删除和重命名。
同时,在数据库加固中会对整个data文件夹进行权限加固,使用软连接的数据库文件将不会被加固到。
Mysql8已经默认禁用Symbolic links
'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
目前只能搜集到这么多信息,欢迎指正,另外在网上搜到可以通过realpath漏洞对包含软连接的数据库进行攻击,这也是不能使用软连接的一个原因,但原理没搞清楚就没在这里写,希望有大神看到可以指点一下~
发布于 2018-12-05 15:18 原文连接https://zhuanlan.zhihu.com/p/51570114
网友评论