目录
一、知识小结
1.MySQL配置文件
- Windows 操作系统中 MySQL 的配置文件 my.ini。Linux 操作系统中 MySQL 的配置文件是my.cnf,一般会放在 /etc/my.cnf 或 /etc/mysql/my.cnf 目录下。Linux 下安装的 mysql,配置文件位置 /etc/my.cnf
- cat /etc/my.cnf
- port=12345是我自己加的,默认没有。
2.修改端口
(1))编辑
vi /etc/my.cnf
在[mysqld]选项下增加 port=12345,然后:wq保存退出。
(2)
setenforce 0
关闭 selinuc(3)
service mysqld restart
重新启动 mysql 服务(4)
netstat -ano|grep 12345
查看修改端口
也可以用
mysqladmin -uroot -p variables |grep 'port'
查看修改端口
(5)防火墙
firewall-cmd --zone=public --add-port=12345/tcp --permanent
放行12345端口firewall-cmd --zone=public --remove-port=3306/tcp --permanent
关闭3306端口systemctl restart firewalld
重启防火墙使配置生效firewall-cmd --list-all
查看防火墙列表
二、赋权练习与总结
1、symbolic-links 配置项具体解释及安全的相关性
symbolic-links
软链接,所在位置位置/etc/my.cnf
,软链接可以看作是Windows中的快捷方式,可以让你快速链接到目标档案或目录。symbolic-links=0
禁止软连接,MySQL官方帮助文档介绍如下- 一般在生产环境中,数据库data文件所在分区和系统分区是分开的,而使用软连接的情况下多数是保存在系统分区。而针对数据库加固的重要思想就是将系统分区和数据分区分开,防止数据库写入数据影响系统性能,也防止系统用户修改数据库数据。当使用软连接,尤其是用root运行mysqld时,攻击者将可以通过数据库获得root权限,又由于数据同时存储在系统分区,将导致攻击者可以修改系统分区的任意文件;当使用mysql命令修改软连接对应的数据库,会修改存储在系统分区的实际文件,可能对系统内的其他文件进行删除和重命名。同时,在数据库加固中会对整个data文件夹进行权限加固,使用软连接的数据库文件将不会被加固到。
2、创建2个用户1,用户2,可对demo数据库aaa(cmd text)表和bbb(cmd text)表有所有权限
create user zyh1@‘%’ identified by ‘root’;
create user zyh2@‘%’ identified by ‘root’;
create database demo
创建数据库demo
use demo;
使用库,对demo数据库创建aaa(cmd text)表和bbb(cmd text)表create table aaa(cmd text);
create table bbb(cmd text);
grant all privileges on demo.aaa to 'zyh1'@'%' identified by 'root' with grant option;
为用户zyh1单表赋权,使其拥有表aaa的所有权限flush privileges;
刷新权限grant all privileges on demo.bbb to 'zyh1'@'%' identified by 'root' with grant option;
flush privileges;
为用户zyh1单表赋权,使其拥有表bbb的所有权限
show grants for 'zyh1'@'%';
查看用户zyh1的权限
grant all privileges on demo.* to 'zyh2'@'%' identified by 'root' with grant option;
我给zyh2赋予单数据库权限,因为我demo数据库下只有这两个表,依据题意也可以这样赋权,但是注意单数据库赋权要比单表赋权权限高
3、zyh1 用户 读取外部的 /etc/passwd 文件,读到aaa表 select user()
- 首先修改配置文件
my.cnf
在其中添加以下命令 secure_file_priv=
local-infile=1
[mysql]
local-infile=1
setenforce 0
关闭 selinu修改完后重启MySQL服务!!!
use demo;
记得先使用demo数据库!!!insert into aaa(cmd) values (load_file('/etc/passwd'));
出现问题我这里zyh1赋予的是单表权限,但是导入不进去/etc/passwd文件里的内容,然后重新给zyh1赋予root权限后成功导入了命令如下
grant all privileges on *.* to 'zyh1'@'%' identified by 'root' with grant option;
给zyh1赋予root权限flush privileges;
刷新权限,然后从aaa表中读到passwd内容
4、zyh2用户读取外部的/etc/my.cnf 文件 ,读到bbb表中
同上一步先修改配置文件
my.cnf
在其中添加以下命令secure_file_priv=
local-infile=1
[mysql]
local-infile=1
setenforce 0
关闭 selinu修改完后重启MySQL服务!!!use demo;
记得先使用demo数据库!!!出现问题,然后我将配置文件
my.cnf
中的skip-grant-tables=1
加上,使用无密码登录就可写入bbb
5、安全相关的配置
grant all privileges on *.* to 'zyh1'@'%' identified by 'root' with grant option;
这条命令就是赋予用户root权限,避免root权限的完全开放,应给将重要的权限赋给指定的主机- 禁止以root账号运行mysqld,检查进程属主和运行参数是否包含–user=mysql类似语句
- 按照用户分配权限,避免不同用户共享账号
- 创建用户 设定指定ip地址登陆mysql数据库
- 定期检查必要账户,删除无用户或过期账户
- 在数据库权限配置能力内,根据用户的需要,配置其所需的最小权限。
- 定期用show grants 来查看用户权限例如:
show grants for 'zyh1'@'%';
- 修改管理员root用户的用户名
- 禁止远程连接,禁止使用软连接
symbolic-links
- 禁止读取本地文件比如读linux中的/etc/passwd。先在配置文件my.cnf或my.ini中找到[mysqld],再往下一行添加一句
set-variable=local-infile=0
,然后重启mysql服务即可。(所有修改配置的操作都需要重启服务)