✏️
安全运维
  • 目录
  • 常用命令速查手册
    • LINUX 命令总结
  • Linux--CentOS
    • 实战案例
      • 进入CentOS 7紧急模式,恢复root密码
      • 创建一个让root都无法删除的文件
      • tar源码包管理及srpm源码包安装方法
      • 找出系统中使用CPU最多的进程
      • 使用screen执行备份命令
      • 扩展Swap分区
      • 解决磁盘有空间但创建不了文件及修复文件系统问题
      • 修复服务器文件系统
      • 自定义ssh服务的日志类型和存储位置
      • 日志切割及搭建远程日志收集服务器
      • 配置公司内网服务器每天定时自动开关机
    • 基础知识
      • Linux的目录结构
      • 系统时间管理
      • 关机、重启命令及7个运行级别
      • passwd、shadow 文件
    • 基础命令
      • 帮助命令
      • ping 命令
      • ls 命令
      • alias 命令
      • history 命令
      • Linux中的快捷键
      • Untitled
      • Untitled
    • 基础配置
      • 安装中文版man手册
      • 网卡配置
      • 关闭防火墙并设置开机不启动防火墙
      • 临时和永久关闭SELinux
      • 配置本地YUM源
    • 文件管理
      • touch 命令
      • VIM 命令
      • cp 命令
      • mv 命令
    • 文件查看
      • cat 命令
      • more 命令
      • less 命令
      • head 命令
      • tail 命令
      • sort 命令
    • 用户和用户组管理
    • 文件权限管理
      • 文件基本权限
      • 文件的特殊权限:SUID、SGID、STicky及文件扩展权限ACL
    • 程序包的管理与安装
      • Yum的使用
    • 文件的压缩和归档
    • 系统进程管理
      • uptime命令查看系统负载
      • top 命令动态管理进程
      • lsof 命令
      • pstree 命令
      • 进程前、后台切换及优先级管理
    • 重定向和文件的查找
      • 文件描述符
      • 重定向的含义及管道、tee命令的使用
      • 查找文件的常用命令及应用
      • 命令判断——3个特殊符号“;”“﹠﹠”“||”
    • 磁盘介绍及管理
      • 磁盘分区工具和挂载
    • 文件系统结构
      • 文件系统结构
      • 文件的硬链接和软链接
      • 使用ln命令创建文件的链接
    • RAID的原理与搭建
      • RAID常用类型搭建和使用,以及注意事项
    • LVM管理和SSM工具的使用
      • 创建LVM的基本步骤
      • SSM工具
    • Linux计划任务与日志的管理
      • 日志的种类和记录的方式
    • 文件共享服务
      • NFS 的安装与使用
      • Samba 的安装与使用
      • CentOS 7.6 安装和配置samba文件共享服务
      • FTP 的安装与使用
      • proftpd
  • 安全加固
    • Windows 安全加固
    • WebLogic 安全加固
    • Apache 安全加固
    • Tomcat 安全加固
    • MySql 安全加固
    • PHP 安全加固
    • SSH 安全加固
    • IIS 安全加固
  • 基线检查
    • DB2数据库基线检查策略
    • MySQL数据库基线检查策略
    • Oracle10g数据库基线检查策略
    • Sybase数据库基线检查策略
    • MSSQL 2008 基线检查策略
    • Jboss7 基线检查策略
    • Apache 基线检查策略
    • Tomcat 基线检查策略
    • 基线检查策略
  • ClamAV
  • iptables
由 GitBook 提供支持
在本页

这有帮助吗?

  1. 基线检查

MySQL数据库基线检查策略

1、禁止mysql以管理员帐号权限运行

1、参考配置
(1)在/etc/my.cnf中设置:
    [mysql.server]
    user=mysql
2、补充操作说明
(1)即使做了上述配置,root用户还是具有启用mysql的权限。为了安全考虑,请尽量不要使用root用户来启用mysql。

2、应删除或锁定与数据库运行、维护等工作无关的账号

1、参考配置
(1)删除用户
    mysql>DROP USER username;
DROP USER语句用于删除一个或多个MySQL账户。要使用该命令,必须拥有mysql数据库的全局CREATE USER权限或DELETE权限。账户名称的用户和主机部分与用户表记录的User和Host列值相对应。
2、补充操作说明
(1)DROP USER不能自动关闭任何打开的用户对话。而且,如果用户有打开的对话,此时取消用户,则命令不会生效,直到用户对话被关闭后才生效。一旦对话被关闭,用户也被取消,此用户再次试图登录时将会失败。

3、禁止存在空密码用户

参考配置
(1)使用特权用户登录mysql,查看存在空密码的用户:
mysql>  select user,host,password from mysql.user;
+------+----------------------+-------------------------------------------+
| user | host                 | password                                  |
+------+----------------------+-------------------------------------------+
| root | test.com.cn |                                           |
| root | 127.0.0.1            |                                           |
| root | ::1                  |                                           |
+------+----------------------+-------------------------------------------+
3 rows in set (0.00 sec)
(2)根据实际应用情况,删除无用的host对应的user,或者针对user设置密码
     删除方法:
        delete from mysql.user where host='test.com.cn'
    设置密码:
        update mysql.user set password=password('password') where User='root';
  请将password改为实际需要设置的密码
(3)重启mysql

4、禁止存在匿名帐户

参考配置
(1)使用特权用户(root)登录mysql,查询存在匿名用户:
mysql> select user,host from mysql.user where user='';select User from mysql.user where Grant_priv='Y' and User != 'root';   
+------+----------------------+
| user | host                 |
+------+----------------------+
|      | 1414.com.cn |
+------+----------------------+
1 rows in set (0.00 sec)

(2)删除匿名用户
mysql> delete from mysql.user where User = ''
Query OK, 0 rows affected (0.04 sec)
(3)更新数据库权限
mysql> flush privileges;

5、配置日志功能

参考配置
(1)在/etc/my.cnf中设置:
    log=/var/log/mysql.log
    log-bin=mysql-bin
    log-error=/var/log/mysql-error.log
    log_queries_not_using_indexes
    log-bin-trust-function-creators
    log_slave_updates
    log_slow_queries
(2)重启mysql

6、安装最新的安全补丁

参考配置
(1)下载并安装最新mysql安全补丁,参考网址:http://www.mysql.com。

7、存在对所有数据库上的表都具有delete权限的非root用户

参考配置
(1)使用特权用户(root)登录mysql,查询对所有数据库表具有delete权限的用户:
mysql> select User from mysql.user where Delete_priv='Y' and User != 'root'; 
+------+
| User |
+------+
| abc  |
+------+
1 row in set (0.00 sec)
(2)去除此用户的所有数据库所有表的delete权限
mysql> revoke delete on *.* from 'abc'@'%';
Query OK, 0 rows affected (0.04 sec)
(3)重复赋予此用户对应数据库的权限
mysql> grant delete on abc_db.* to 'abc'@'%';
Query OK, 0 rows affected (0.04 sec)
(4)更新数据库权限
mysql> flush privileges;

补充操作说明
(1)abc为具有所有数据库所有表delete权限的用户,请根据实际情况修改
(2)abc_db为数据库名,请根据实际需要设置
(3)请根据实际需要赋予用户的对用数据库的delete权限
 

8、存在对所有数据库上的表都具有create权限的非root用户

参考配置
(1)使用特权用户(root)登录mysql,查询对所有数据库表具有create权限的用户:
mysql> select User from mysql.user where Create_priv='Y' and User != 'root'; 
+------+
| User |
+------+
| abc  |
+------+
1 row in set (0.00 sec)
(2)去除此用户的所有数据库所有表的create权限
mysql> revoke create on *.* from 'abc'@'%';
Query OK, 0 rows affected (0.04 sec)
(3)重复赋予此用户对应数据库的权限
mysql> grant create on abc_db.* to 'abc'@'%';
Query OK, 0 rows affected (0.04 sec)
(4)更新数据库权限
mysql> flush privileges;

补充操作说明
(1)abc为具有所有数据库所有表create权限的用户,请根据实际情况修改
(2)abc_db为数据库名,请根据实际需要设置
(3)请根据实际需要赋予用户的对用数据库的create权限
 

9、存在对所有数据库上的表都具有drop权限的非root用户

参考配置
(1)使用特权用户(root)登录mysql,查询对所有数据库表具有drop权限的用户:
mysql> select User from mysql.user where Drop_priv='Y' and User != 'root';
+------+
| User |
+------+
| abc  |
+------+
1 row in set (0.00 sec)
(2)去除此用户的所有数据库所有表的drop权限
mysql> revoke drop on *.* from 'abc'@'%';
Query OK, 0 rows affected (0.04 sec)
(3)重复赋予此用户对应数据库的权限
mysql> grant drop on abc_db.* to 'abc'@'%';
Query OK, 0 rows affected (0.04 sec)
(4)更新数据库权限
mysql> flush privileges;

补充操作说明
(1)abc为具有所有数据库所有表drop权限的用户,请根据实际情况修改
(2)abc_db为数据库名,请根据实际需要设置
(3)请根据实际需要赋予用户的对用数据库的drop权限

10、存在对指定的数据库上的所有表具有select权限的非root用户

参考配置
(1)使用特权用户(root)登录mysql,查询对非root用户与数据库所有表具有select权限的数据库对应关系:
mysql> select User,db from mysql.db where Select_priv='Y' and User != 'root' ; 
+------+---------+
| User | db      |
+------+---------+
| abc  | aaa     |
+------+---------+
1 rows in set (0.00 sec)

(2)去除具有指定数据库所有表的select权限的用户
mysql> revoke select on aaa.* from 'abc'@'%';
Query OK, 0 rows affected (0.04 sec)
(3)更新数据库权限
mysql> flush privileges;

11、存在对指定的数据库上的所有表具有insert权限的非root用户

参考配置
(1)使用特权用户(root)登录mysql,查询对非root用户与数据库所有表具有insert权限的数据库对应关系:
mysql> select User,db from mysql.db where Insert_priv='Y' and User != 'root';  
+------+---------+
| User | db      |
+------+---------+
| abc  | aaa     |
+------+---------+
1 rows in set (0.00 sec)

(2)去除具有指定数据库所有表的insert权限的用户
mysql> revoke insert on aaa.* from 'abc'@'%';
Query OK, 0 rows affected (0.04 sec)
(3)更新数据库权限
mysql> flush privileges;

12、存在对指定的数据库上的所有表具有 update 权限的非root用户

参考配置
(1)使用特权用户(root)登录mysql,查询对非root用户与数据库所有表具有update权限的数据库对应关系:
mysql> select User,db from mysql.db where Update_priv='Y' and User != 'root';  
+------+---------+
| User | db      |
+------+---------+
| abc  | aaa     |
+------+---------+
1 rows in set (0.00 sec)

(2)去除具有指定数据库所有表的update权限的用户
mysql> revoke update on aaa.* from 'abc'@'%';
Query OK, 0 rows affected (0.04 sec)
(3)更新数据库权限
mysql> flush privileges;

13、存在对指定的数据库上的所有表具有delete权限的非root用户

参考配置
(1)使用特权用户(root)登录mysql,查询对非root用户与数据库所有表具有delete权限的数据库对应关系:
mysql> select User,db from mysql.db where Delete_priv='Y' and User != 'root';  
+------+---------+
| User | db      |
+------+---------+
| abc  | aaa     |
+------+---------+
1 rows in set (0.00 sec)

(2)去除具有指定数据库所有表的delete权限的用户
mysql> revoke delete on aaa.* from 'abc'@'%';
Query OK, 0 rows affected (0.04 sec)
(3)更新数据库权限
mysql> flush privileges;

14、存在对指定的数据库上所有表具有create权限的非root用户

参考配置
(1)使用特权用户(root)登录mysql,查询对非root用户与数据库所有表具有create权限的数据库对应关系:
mysql> select User,db from mysql.db where Create_priv='Y' and User != 'root';  
+------+---------+
| User | db      |
+------+---------+
| abc  | aaa     |
+------+---------+
1 rows in set (0.00 sec)

(2)去除具有指定数据库所有表的create权限的用户
mysql> revoke create on aaa.* from 'abc'@'%';
Query OK, 0 rows affected (0.04 sec)
(3)更新数据库权限
mysql> flush privileges;

15、存在对指定数据库上的所有表具有drop 权限的非root用户

参考配置
(1)使用特权用户(root)登录mysql,查询对非root用户与数据库所有表具有drop权限的数据库对应关系:
mysql> select User,db from mysql.db where Drop_priv='Y' and User != 'root' ;  
+------+---------+
| User | db      |
+------+---------+
| abc  | aaa     |
+------+---------+
1 rows in set (0.00 sec)

(2)去除具有指定数据库所有表的drop权限的用户
mysql> revoke drop on aaa.* from 'abc'@'%';
Query OK, 0 rows affected (0.04 sec)
(3)更新数据库权限
mysql> flush privileges;

16、存在有shutdown权限的非root用户

参考配置
(1)使用特权用户(root)登录mysql,查询存在shutdown权限的非root用户:
mysql> select User from mysql.user where Shutdown_priv='Y' and User != 'root';   
+------+
| User |
+------+
| abc  |
+------+
1 rows in set (0.00 sec)

(2)去除非root用户的shutdown权限
mysql> revoke shutdown on *.* from  'abc'@'%';
Query OK, 0 rows affected (0.04 sec)
(3)更新数据库权限
mysql> flush privileges;

17、禁止网络连接

参考配置
(1)在/etc/my.cnf中设置:
    [mysqld]]
    skip-networking
(2)重启mysql
注:用户可选择执行此条基线,它可以禁止网络连接,防止猜解密码攻击,溢出攻击和嗅探攻击。(仅限于应用和数据库在同一台主机的情况)

18、存在有create user权限的非root用户

参考配置
(1)使用特权用户(root)登录mysql,查询存在create user权限的非root用户:
mysql> select User from mysql.user where Create_user_priv='Y' and User != 'root';    
+------+
| User |
+------+
| abc  |
+------+
1 rows in set (0.00 sec)

(2)去除非root用户的create user权限
mysql> revoke create user on *.* from  'abc'@'%';
Query OK, 0 rows affected (0.04 sec)
(3)更新数据库权限
mysql> flush privileges;

19、存在有reload权限的非root用户

参考配置
(1)使用特权用户(root)登录mysql,查询存在reload权限的非root用户:
mysql> select User from mysql.user where Reload_priv='Y' and User != 'root';   
+------+
| User |
+------+
| abc  |
+------+
1 rows in set (0.00 sec)

(2)去除非root用户的reload权限
mysql> revoke reload on *.* from  'abc'@'%';
Query OK, 0 rows affected (0.04 sec)
(3)更新数据库权限
mysql> flush privileges;

20、存在有grant权限的非root用户

参考配置
(1)使用特权用户(root)登录mysql,查询存在grant权限的非root用户:
mysql> select User from mysql.user where Grant_priv='Y' and User != 'root';   
+------+
| User |
+------+
| abc  |
+------+
1 rows in set (0.00 sec)

(2)去除非root用户的grant权限
mysql> revoke grant option on *.* from  'abc'@'%';
Query OK, 0 rows affected (0.04 sec)
(3)更新数据库权限
mysql> flush privileges;

21、禁止have_merge_engine参数设置为enable

参考配置
(1)在/etc/my.cnf中设置(如不存在手动添加):
    [mysqld]]
    have_merge_engine = disable
(2)重启mysql

22、建议启用ssl安全链接

参考配置
(1)在/etc/my.cnf中设置(如不存在手动添加):
    [mysqld]]
    ssl
    [mysqldump]
    ssl
   即开启ssl连接,请根据实际情况配置
(2)重启mysql

23、设置数据库连接数的上限

参考配置
根据机器性能和业务需求,设置连接数上限。
(1)在/etc/my.cnf中设置:
    [mysqld]]
    max_connections = 2000
(2)重启mysql

24、默认端口检查

参考配置
(1)在/etc/my.cnf中设置:
    [client]
    port = 8806
    [mysqld]
    prot = 8806
 请将端口改为实际需要配置的值,保持mysqld与client下的port对应值需一致,如不一致会出现连接错误
(2)重启mysql

25、禁止存在test数据库

参考配置
(1)使用特权用户登录mysql,如test数据库为无用数据库请删除test数据库:
mysql> drop database test;
   Query OK, 0 rows affected (0.00 sec)
(2)test数据库为实际使用数据库,请将test数据库数据导出,重新创建新数据库,将test数据内数据导入新数据库

26、存在对所有数据库上的表都具有select权限的非root用户

参考配置
(1)使用特权用户(root)登录mysql,查询对所有数据库表具有select权限的用户:
mysql> select User from mysql.user where Select_priv='Y' and User != 'root'; 
+------+
| User |
+------+
| abc  |
+------+
1 row in set (0.00 sec)
(2)去除此用户的所有数据库所有表的select权限
mysql> revoke select on *.* from 'abc'@'%';
Query OK, 0 rows affected (0.04 sec)
(3)重复赋予此用户对应数据库的权限
mysql> grant select on abc_db.* to 'abc'@'%';
Query OK, 0 rows affected (0.04 sec)
(4)更新数据库权限
mysql> flush privileges;

补充操作说明
(1)abc为具有所有数据库所有表select权限的用户,请根据实际情况修改
(2)abc_db为数据库名,请根据实际需要设置
(3)请根据实际需要赋予用户的对用数据库的select权限

27、存在对所有数据库上的表都具有insert权限的非root用户

参考配置
(1)使用特权用户(root)登录mysql,查询对所有数据库表具有insert权限的用户:
mysql> select User from mysql.user where Insert_priv='Y' and User != 'root'; 
+------+
| User |
+------+
| abc  |
+------+
1 row in set (0.00 sec)
(2)去除此用户的所有数据库所有表的insert权限
mysql> revoke insert on *.* from 'abc'@'%';
Query OK, 0 rows affected (0.04 sec)
(3)重复赋予此用户对应数据库的权限
mysql> grant insert on abc_db.* to 'abc'@'%';
Query OK, 0 rows affected (0.04 sec)
(4)更新数据库权限
mysql> flush privileges;

补充操作说明
(1)abc为具有所有数据库所有表insert权限的用户,请根据实际情况修改
(2)abc_db为数据库名,请根据实际需要设置
(3)请根据实际需要赋予用户的对用数据库的insert权限

28、存在对所有数据库上的表都具有update权限的非root用户

参考配置
(1)使用特权用户(root)登录mysql,查询对所有数据库表具有update权限的用户:
mysql> select User from mysql.user where Update_priv='Y' and User != 'root'; 
+------+
| User |
+------+
| abc  |
+------+
1 row in set (0.00 sec)
(2)去除此用户的所有数据库所有表的update权限
mysql> revoke update on *.* from 'abc'@'%';
Query OK, 0 rows affected (0.04 sec)
(3)重复赋予此用户对应数据库的权限
mysql> grant update on abc_db.* to 'abc'@'%';
Query OK, 0 rows affected (0.04 sec)
(4)更新数据库权限
mysql> flush privileges;

补充操作说明
(1)abc为具有所有数据库所有表update权限的用户,请根据实际情况修改
(2)abc_db为数据库名,请根据实际需要设置
(3)请根据实际需要赋予用户的对用数据库的update权限
上一页DB2数据库基线检查策略下一页Oracle10g数据库基线检查策略

最后更新于3年前

这有帮助吗?