mysql安全加固配置(1)
1. 操作系统级别
1.1. 禁止 MySQL链接历史记录
- 建议理由
- MySQL会把客户端登陆的交互执行记录保存在 .mysql_history 文件中。该记录有可能会暴露登陆过程中的敏感信息。建议删除该记录。
- 检查方法
- 检查.mysql_history 文件是否存在(默认在 /home 下)
- find /home -name ".mysql_history"
- 检查.mysql_history 文件是否存在(默认在 /home 下)
- 修复建议:删除并禁止继续记录
- 如果存在 .mysql_history,则删除
- 创建链接,防止.MySQL_history再次生成
- ln -s /dev/null $HOME/.mysql_history
- 或 set global mysql_history='/dev/null'
1.2. 禁止MySQL_PWD的使用
- 建议理由
- MySQL_PWD是一种用于存储MySQL密码的环境变量。而且是以明文形式存储,带来了非常大的安全隐患。
- 检查方法
- 检查MySQL_PWD环境变量是否存在于某个进程中
- grep MySQL_PWD /proc/*/environ
- 如果有返回行说明那个进程使用了MySQL_PWD环境变量。
- 检查MySQL_PWD环境变量是否存在于某个进程中
- 修复建议:对使用MySQL_PWD环境变量变量的脚本和进程,建议不在使用该环境变量。
1.3. 禁止MySQL操作系统账号登陆
- 建议理由
- MySQL的操作做系统账号在安装完数据库后,不应该有其他用途。建议禁止该账号登陆操作系统。此举在防止黑客利用MySQL数据库漏洞反射shell有极佳效果。
- 检查方法
- 假设MySQL数据库操作系统账号就是 mysql
- getent passwd MySQL | egrep "^.*[ \ /bin\ / false| \ / sbin \ / nologin]$"
- 如果没有返回行则说明存在安全隐患。
- 假设MySQL数据库操作系统账号就是 mysql
- 修复建议:执行下列语句禁止 mysql 登陆
- usermod -s /sbin/nologin mysql
1.4. 禁止MySQL使用默认端口
- 建议理由
- 使用默认端口,会更容易被黑客在网络中发现数据库。改成其他端口有助于隐藏数据库,防止被黑客入侵。
- 检查方法
- show global variables like 'port';
- 如果返回是3306,则说明需要修改端口
- 修复建议
- 修改为非3306端口
2. 文件系统权限安全配置
2.1. 确保数据文件最小权限
- 建议理由
- 限制数据文件的访问权限,有助于阻碍不法分子直接从数据文件中读取数据甚至读取或替换MySQL.user表中的用户和密码信息
- 检查方法
- show variables where variable_name = 'datadir';
- 检查路径权限是否符合最小权限原则
- ls -l /.. | egrep "^d[r|w|x]{3}------\s*.\s*mysql\s*mysql\s*\d*.*mysql"
- 如果没有返回行,则说明存在安全问题
- 修复建议
- chmod 700 <'datadir'>
- chown mysql.mysql <'datadir'>
2.2. 确保log_bin_basename文件最小权限
- 建议理由
- 限制日志文件的权限将有益于保护数据信息不泄露,或被恶意修改。
- 检查方法
- show variables like 'log_bin_basename';
- 检查日志文件的权限是660属于 mysql
- 修复建议:请执行以下语句
- chmod 660 <'log file'>
- chown mysql.mysql <''log file '>
2.3. 确保log_error文件最小权限
- 建议理由
- 限制日志文件的权限将有益于保护数据信息不泄露,或被恶意修改。
- 检查方法
- show global variables like 'log_error';
- 检查日志文件的权限是660属于 mysql
- 修复建议:请执行以下语句
- chmod 660 <'log file'>
- chown mysql.mysql <''log file'>
2.4. 确保slow_query_log文件最小权限
- 建议理由
- 限制日志文件的权限将有益于保护数据信息不泄露,或被恶意修改。
- 检查方法
- show variables like 'slow_query_log_file';
- 检查日志文件的权限是660属于 mysql
- 修复建议:请执行以下语句
- chmod 660 <'log file'>
- chown mysql.mysql <''log file'>
2.5. 确保relay_log_basename文件最小权限
- 建议理由
- 限制日志文件的权限将有益于保护数据信息不泄露,或被恶意修改。
- 检查方法
- show variables like 'relay_log_basename';
- 检查日志文件的权限是660属于 mysql
- 修复建议:请执行以下语句
- chmod 660 <'log file'>
- chown mysql.mysql <''log file'>
2.6. 确保general_log_file文件最小权限
- 建议理由
- 限制日志文件的权限将有益于保护数据信息不泄露,或被恶意修改。
- 检查方法
- show variables like 'general_log_file';
- 检查日志文件的权限是660属于 mysql
- 修复建议:请执行以下语句
- chmod 660 <'log file'>
- chown mysql.mysql <''log file'>
2.7. 确保密钥文件最小权限
- 建议理由
- 限制密钥文件的访问权限,防止密钥文件被盗取,被替换,被破解等情况的发生。
- 检查方法
- show variables where variable_name = 'ssl_key';
- 检查路径权限是否符合最小权限原则
- ls -l | egrep "^-r--------[ \t]*.[ \t]*mysql[ \t]*mysql.*$"
- 如果没有返回行,则说明存在安全问题
- 修复建议:请执行以下语句
- chmod 400 <ssl_key_value>
- chown mysql.mysql < ssl_key_value >
2.8. 确保插件目录最小权限
- 建议理由
- 限制插件目录的权限,防止有人恶意添加插件,这些插件会在MySQL启动时和MySQL同时启动。如果被插入恶意插件,可能会导致MySQL被控制。
- 检查方法
- show variables where variable_name = 'plugin_dir';
- 检查路径权限是否符合最小权限原则
- ls -l /.. | egrep "^drwxr[-w]xr[-w]x[ \t]*[0-9][ \t]*mysql[ \t]*mysql.*plugin.*$"
- 如果没有返回行,则说明存在安全问题
- 修复建议:请执行以下语句
- chmod 755 < plugin_dir Value>
- chown mysql.mysql < plugin_dir Value >
2.9. 将 socket 文件放入 datadir 中,保护 socket 文件
- 建议理由
- 通常 socket 目录权限默认是 644,权限较大,非属主用户也可以使用;datadir 权限为 600,权限小且严格,可以起到权限控制的效果。
- 检查方法
- find <datadir> -name "mysql.sock"
- 如果没有结果
- 修改建议
- socket = /datadir/mysql.sock
- 重启实例生效
3. MySQL 基本安全配置
3.1. 确保样例数据库删除
- 建议理由
- 样例数据库可以被所有数据库用户访问,并且可以用来消耗系统资源删除样例库可以减少黑客攻击面。
- 检查方法
- SHOW DATABASES LIKE 'test';
- 修复建议:如果存在删除样例库
- DROP DATABASE "test";
3.2. 修改root用户名
- 建议理由
- MySQL默认用户root应该修改名称,以减小攻击面。防止黑客针对用户名进行密码猜测攻击。
- 检查方法
- 执行sql检查数据库是否有默认用户root
- SELECT user from MySQL.user where user='root;
- 如果有返回行则需要修改
- 执行sql检查数据库是否有默认用户root
- 修复建议:修改用户名
- update user set name='newname' where name='oldname';
- flush privileges;
3.3. 使用增强的用户密码安全策略(需要启用 SSL连接)
- 建议理由
- MySQL 5.7 版本以前,默认的用户密码安全策略为 mysql_native_password,加密安全性较低,常见密码在网上可以查到字典进行反推;使用增强策略可以防止黑客对密码进行暴破。
- 检查方法
- show global variables like '%default_authentication_plugin%';
- 如果结果是 mysql_native_password,需要修改
- 修改建议
- set global default_authentication_plugin='sha256_password';
3.4. 确保allow-suspicious-udfs设置成false
- 建议理由
- 关闭allow-suspicious-udfs,可以防止通过共享对象文件加载存在威胁的UDFs函数。
- 检查方法
- 检查配置文件确定这个参数被设置成false(没有通过命令检查的方式吗?)
- 检查MySQLd 的启动参数中 没有allow-suspicious-udfs参数
- 修复建议
- 从配置文件中把allow-suspicious-udfs设置成false
- 启动参数中剔除allow-suspicious-udfs
3.5. 禁用local_infile
- 建议理由
- 禁用local_infile可以阻止黑客利用sql注入来读取数据库文件,减小黑客给数据库带来的安全损失。
- 检查方法
- 用sql语句检查参数状态
- SHOW VARIABLES WHERE Variable_name = 'local_infile';
- 如果返回值不是off,则存在安全问题
- 用sql语句检查参数状态
- 修复建议:在配置文件中加入下列内容,然后重启数据库
- local_infile=0
3.6. 确保skip-symbolic-links开启
- 建议理由
- 开启skip-symbolic-links可以禁止数据库用户删除或重名数据文件目录之外的文件。
- 检查方法
- 用sql语句检查参数状态
- SHOW variables LIKE 'have_symlink';
- 修复建议
- 如果没有启动skip-symbolic-links建议把MySQL配置文件中的值设置成yes。
3.7. 确保插件daemon_memcached被禁用
- 建议理由:
- 任何人可以利用daemon_memcached来访问或修改一部分数据,给数据库造成信息泄漏的隐患。
- 检查方法
- SELECT * FROM information_schema.plugins WHERE PLUGIN_NAME='daemon_memcached';
- 如果有返回行数说明有插件,需要删除
- 修复建议:删除插件语句如下
- uninstall plugin daemon_memcached;
3.8. 确保secure_file_priv不是空
- 建议理由
- secure_file_priv限制客户端可以读取数据文件的路径。secure_file_priv设置合理的值可以有效降低sql注入后黑客读取数据库数据的可能性。
- 检查方法
- SHOW GLOBAL VARIABLES WHERE Variable_name = 'secure_file_priv' AND Value<>'';
- 如果有返回内容说明安全,否则需要修复
- 修复建议:在配置文件中添加如下语句,然后重启数据库
- secure_file_priv=<path_to_load_directory>>
3.9. 确保sql_mode是STRICT_ALL_TABLES模式
- 建议理由
- sql_mode模式有三种,STRICT_TRANS_TABLES是其中一种模式。STRICT_TRANS_TABLES模式会检查所有更新的数据,在一定程度可以给入侵者规避检测带来阻碍。
- 检查方法
- SHOW VARIABLES LIKE 'sql_mode';
- 如果有返回的是STRICT_TRANS_TABLES说明安全,否则需要修复
- 修复建议:在配置文件中添加如下语句,然后重启数据库
- sql_mode=STRICT_ALL_TABLES
3.10. 确保disconnect_on_expired_password参数是ON
- 建议理由
- disconnect_on_expired_password是用来控制客户端用失效密码来访问数据库的。关闭这个参数会给数据库带来安全风险。
- 检查方法
- SHOW GLOBAL VARIABLES like 'disconnect_on_expired_password';
- 如果有返回的是ON说明安全,否则需要修复
- 修复建议:在配置文件中添加如下语句,然后重启数据库
- disconnect_on_expired_password =ON
mysql安全加固配置(1)相关推荐
- 数据库安全之Mysql数据库安全加固
转载来源 : 数据库安全之Mysql数据库安全加固 :http://www.safebase.cn/article-260336-1.html 账号加固 以普通帐户安全运行mysqld,禁止mysql ...
- mysql数据库安全加固
Mysql数据库安全加固 一.安装Mysql服务 1.创建mysql文件安装目录 mkdir /opt/mysql 2.进入该目录下载解压安装文件 cd /opt/mysql/ wget http:/ ...
- mysql 5.7 xbackup_CentOS 7 下 MySQL 5.7 配置 Percona Xtrabackup
前言 CentOS 7 下 MySQL 5.7 配置 Percona Xtrabackup ,记录一下大致的安装和配置过程. Percona XtraBackup 的备份工具支持热备份(即不必停止 M ...
- centos7 mysql workbench_centOS下mysql workbench安装配置教程
本文为大家分享了mysql workbench安装配置教程,供大家参考,具体内容如下 step0:安装mysql 在按照workbench之前,先安装mysql.指令是 yum install mys ...
- mysql 5.7 驱动_这些 MySQL 调优配置,你都知道吗?
关注我的头条号,获取更多运维相关知识. 你想了解哪方面的运维知识,请评论区告诉我,我会尽快更新~ MySQL 数据库,基本上运维都会接触到,而对于数据库的性能优化,想必是大家比较关注的,下面分享一些调 ...
- mysql主从库配置ps:mysql5.6
1 Mysql cluster版本主从服务器搭建实践 主从的作用:MySQL的主从服务器可以满足同步数据库,同步表,同步表内容,也可以指定仅同步某个数据库或某个表,还可以排除不同步某个数据库某个表. ...
- RHEL5(CentOS)下nginx+php+mysql+tomcat+memchached配置全过程(转)
RHEL5(CentOS)下nginx+php+mysql+tomcat+memchached配置全过程 一.准备工作:SSH,telnet终端中文显示乱码解决办法vi /etc/sysconfig/ ...
- 架构周报| 浅析MySQL JDBC连接配置上的两个误区
经典案例 \\ 浅析MySQL JDBC连接配置上的两个误区:相信使用MySQL的同学都配置过它的JDBC驱动,多数人会直接从哪里贴一段URL过来,然后稍作修改就上去了,对应的连接池配置也是一样的,很 ...
- Hadoop集群搭建(七:MySQL的安装配置)
实验 目的 要求 目的: 1.掌握MySQL在集群平台中的安装 要求: 完成MySQL的集群版的安装: MySQL集群的相关服务进程能够正常启动: MySQL集群的SQL服务能够作为系统服务开机自动启 ...
最新文章
- nmap扫描局域网存活主机_安全工程师都在用的网络扫描软件,巧用ARP协议发现主机。第二节...
- mysql开启慢查询方法(转)
- BZOJ2759 一个动态树好题
- CAN笔记(2) CAN特点
- UIDatePicker的使用
- python二次开发odoo_odoo二次开发 - 战鹏的Blog - OSCHINA - 中文开源技术交流社区
- kafka逻辑示意图以及命令
- RubikFX:用JavaFX 3D解决魔方难题
- php获取视频大小代码怎么写,利用php获得flv视频长度的实例代码
- 清晨晓叙:matlab中的矩阵拼接
- Linux常用命令总结之(七)mkdir
- css3渐变画斜线 demo
- 709. To Lower Case
- sublime报错信息乱码_Sublime如何解决中文乱码问题
- Mysql命令大全——转自博客园 宁静.致远博客
- Excel高级子列合并
- 微信公众平台官方接口
- iOS 四舍五入保留两位小数
- 这哥们儿的日志让我的心情好得一塌糊涂(ZZ)
- 软件架构发展历程分享