MySQL—整改

MySQL—整改

注:以MySQL 5.7.44为例

身份鉴别

检测项a

应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;

整改步骤

  1. 口令复杂度策略

    • 安装validate_password插件

      INSTALL PLUGIN validate_password SONAME 'validate_password.so';
    • 修改 MySQL 配置文件(通常是 my.cnfmy.ini):

      [mysqld]
      validate_password_policy=MEDIUM
      validate_password_length=8
      validate_password_number_count=1
      validate_password_mixed_case_count=1
      validate_password_special_char_count=1
  2. 口令有效期策略

    修改 MySQL 配置文件(通常是 my.cnfmy.ini):

    [mysqld]
    default_password_lifetime = 90

整改完成附图

  • 口令复杂度策略

    mysql-rectification-1

  • 口令有效期

    mysql-rectification-2

检测项b

应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施;

整改步骤

  1. 登录失败处理策略

    mysql> show variables like '%connection_control%';
    Empty set (0.00 sec)

    显示为空表示未安装插件,手动安装

    install plugin connection_control soname "connection_control.so";
    install plugin connection_control_failed_login_attempts soname 'connection_control.so';

    修改 MySQL 配置文件(通常是 my.cnfmy.ini):

    [mysqld]
    connection_control_failed_connections_threshold = 10
    connection_control_max_connection_delay = 600000
    connection_control_min_connection_delay = 600000
  2. 登录连接超时自动退出策略

    修改 MySQL 配置文件(通常是 my.cnfmy.ini):

    [mysqld]
    wait_timeout = 1800
    interactive_timeout = 1800
    connect_timeout = 10

整改完成附图

  • 登录失败处理策略

    mysql-rectification-3

  • 登录连接超时自动退出策略

    mysql-rectification-4

检测项c

当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听;

整改步骤

mysql> show variables like "%ssl%";
+-------------------------------------+-----------------+
| Variable_name                       | Value           |
+-------------------------------------+-----------------+
| have_openssl                        | YES             |
| have_ssl                            | YES             |
| performance_schema_show_processlist | OFF             |
| ssl_ca                              | ca.pem          |
| ssl_capath                          |                 |
| ssl_cert                            | server-cert.pem |
| ssl_cipher                          |                 |
| ssl_crl                             |                 |
| ssl_crlpath                         |                 |
| ssl_key                             | server-key.pem  |
+-------------------------------------+-----------------+
10 rows in set (0.00 sec)

have_opensslhave_ssl不为yes则未开启SSL

需调整配置如下

have_openssl yes
have_ssl yes

整改完成附图

mysql-rectification-5

检测项d

应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现

注:MySQL自身一般无法实现,常以限制接入网段地址进行降危修正,具体可参照入侵防范c项

整改步骤

mysql> select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | %         |
| mysql.session    | localhost |
| mysql.sys        | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)

需限制除host为localhost或127.0.0.1等本地回环地址之外的用户host字段为可信地址(这里以192.168.65.0/24为例)

mysql> select user,host from mysql.user;
+------------------+--------------+
| user             | host         |
+------------------+--------------+
| root             | 192.168.65.% |
| mysql.session    | localhost    |
| mysql.sys        | localhost    |
+------------------+--------------+
4 rows in set (0.00 sec)

加固命令如下

UPDATE mysql.user SET host = '192.168.65.%' WHERE user = 'root' AND host = '%';

整改完成附图

mysql-rectification-6

访问控制

检测项a

应对登录的用户分配账户和权限;

整改步骤

  1. 分配账户与对应的权限

    整改操作如下:

    • 新建系统管理员、审计管理员、安全管理员账户

      CREATE USER 'sysadmin'@'localhost' IDENTIFIED BY 'sysadmin@Password123';
      CREATE USER 'secadmin'@'localhost' IDENTIFIED BY 'secadmin@Password123';
      CREATE USER 'auditadmin'@'localhost' IDENTIFIED BY 'auditadmin@Password123';
    • 分配对应的权限

      • 审计管理员
      GRANT SELECT ON mysql.* TO 'auditadmin'@'localhost';
      GRANT SELECT ON performance_schema.* TO 'auditadmin'@'localhost';
    • 安全管理员

      GRANT CREATE USER, RELOAD, PROCESS ON *.* TO 'secadmin'@'localhost';
      GRANT SELECT, INSERT, UPDATE, DELETE ON mysql.user TO 'secadmin'@'localhost';
      • 系统管理员
      GRANT ALL PRIVILEGES ON *.* TO 'sysadmin'@'localhost' WITH GRANT OPTION;
  2. 限制默认账户的访问权限(二选一)

    • 禁用root用户

      SELECT CONCAT('ALTER USER \'', user, '\'@\'', host, '\' ACCOUNT LOCK;') AS unlock_command FROM mysql.user WHERE user = 'root';
      +------------------------------------------------+
      | unlock_command                                 |
      +------------------------------------------------+
      | ALTER USER 'root'@'localhost' ACCOUNT LOCK;  | 
      | ALTER USER 'root'@'127.0.0.1' ACCOUNT LOCK;  |
      +------------------------------------------------+

      执行unlock_command内的所有命令

      ALTER USER 'root'@'localhost' ACCOUNT LOCK;
      ALTER USER 'root'@'127.0.0.1' ACCOUNT LOCK;
    • 重命名root用户

整改完成附图

  1. 分配账户与对应的权限

    mysql-rectification-7

  2. 限制默认账户的访问权限

    • 禁用root用户

      mysql-rectification-8

    • 重命名root用户

      mysql-rectification-9

检测项b

应重命名或删除默认账户,修改默认账户的默认口令;

整改步骤

整改操作如下(二选一):

  1. 重命名root用户

    注:参照访问控制a项,限制默认账户的访问权限

  2. 修改root密码

整改完成附图

  • 重命名root用户

    mysql-rectification-9

检测项c

应及时删除或停用多余的、过期的账户,避免共享账户的存在;

整改步骤

  1. 禁用或删除多余账户(这里以testuser为例)

    mysql> select user,account_locked from mysql.user;
    +---------------+----------------+
    | user          | account_locked |
    +---------------+----------------+
    | testuser      | N              | -- 多余账户
    | mysql.session | Y              |
    | mysql.sys     | Y              |
    | sysadmin      | N              |
    | secadmin      | N              |
    | auditadmin    | N              |
    | supreme       | N              |
    +---------------+----------------+
    7 rows in set (0.00 sec)

整改操作如下:

  • 删除多余用户(这里为testuser)
  1. 避免共享用户

    注:仅存在一个有效账户的情况,可参照访问控制a项,添加三权分立账户

整改完成附图

mysql-rectification-10

检测项d

应授予管理用户所需的最小权限,实现管理用户的权限分离;

整改步骤

  • 注:参照访问控制a项,添加三权分立账户

检测项e

应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则;

  • 默认符合,暂无整改说明

检测项f

访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级;

  • 默认符合,暂无整改说明

检测项g

应对重要主体和客体设置安全标记,并控制主体对有安全标记信息资源的访问。

  • 默认不符合,暂无整改说明

安全审计

检测项a

应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计;

整改步骤

修改 MySQL 配置文件(通常是 my.cnfmy.ini):

  • general

    [mysqld]
    general_log = 1                                # 启用通用日志
    general_log_file = /var/log/mysql/general.log  # 指定通用日志路径(路径可替换)
  • log_bin

    [mysqld]
    user = mysql                            # 配置启动用户
    server-id = 1                           # 设置一个唯一的正整数
    log_bin = /var/log/mysql/mysql-bin.log  # 启用二进制日志并指定路径(路径可替换)
    binlog_expire_logs_seconds = 15552000   # MySQL 8.0及之后的配置
    expire_logs_days = 180                  # 180天
  • log_error

    [mysqld]
    log_error = /var/log/mysql/mysql-error.log  # 指定错误日志路径(路径可替换)
  • slow_query_log

    [mysqld]
    slow_query_log = 1                                   # 启用慢查询日志
    slow_query_log_file = /var/log/mysql/slow-query.log   # 指定慢查询日志路径
    long_query_time = 2                                   # 记录执行时间超过 2 秒的查询

整改完成附图

  • general

    mysql-rectification-11

  • log_bin

    mysql-rectification-12

  • log_error

    mysql-rectification-13

  • slow_query_log

    mysql-rectification-14

检测项b

审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息;

  • 安全审计a项开启默认符合,暂无整改说明

检测项c

应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等;

整改步骤

配置logrotate,以保存180天

  • 创建或编辑 /etc/logrotate.d/mysql 文件

    # 路径需包含所有日志的路径
    /var/log/mysql/*.log {
      daily
      rotate 180
      missingok
      compress
      delaycompress
      notifempty
      create 640 mysql mysql
      sharedscripts
      postrotate
          /usr/bin/mysqladmin flush-logs
      endscript
    }
  • 创建目录和分配权限

    sudo mkdir -p /var/log/mysql
    sudo chown mysql:mysql /var/log/mysql
    sudo chmod 750 /var/log/mysql
  • 测试 logrotate 配置:

    sudo logrotate -d /etc/logrotate.d/mysql
  • 手动运行 logrotate

    sudo logrotate -f /etc/logrotate.d/mysql

整改完成附图

  • 配置logrotate,以保存180天

    mysql-rectification-15

检测项d

应对审计进程进行保护,防止未经授权的中断。

  • 默认符合,暂无整改说明

入侵防范

检测项a

应遵循最小安装的原则,仅安装需要的组件和应用程序;

  • 默认不适用,暂无整改说明

检测项b

应关闭不需要的系统服务、默认共享和高危端口;

  • 默认不适用,暂无整改说明

检测项c

应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制;

整改步骤

mysql> select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | %         |
| mysql.session    | localhost |
| mysql.sys        | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)

需限制除host为localhost或127.0.0.1等本地回环地址之外的用户host字段为可信地址(这里以192.168.65.0/24为例)

mysql> select user,host from mysql.user;
+------------------+--------------+
| user             | host         |
+------------------+--------------+
| root             | 192.168.65.% |
| mysql.session    | localhost    |
| mysql.sys        | localhost    |
+------------------+--------------+
4 rows in set (0.00 sec)

加固命令如下

UPDATE mysql.user SET host = '192.168.65.%' WHERE user = 'root' AND host = '%';

整改完成附图

mysql-rectification-6

检测项d

应提供数据有效性检验功能,保证通过人机接口输入或通过通信接口输入的内容符合系统设定要求;

  • 默认符合,暂无整改说明

检测项e

应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞;

  • 根据漏扫结果整改,不另作说明

检测项f

应能够检测到对重要节点进行入侵的行为,并在发生严重入侵事件时提供报警;

  • 默认不适用,暂无整改说明

恶意代码防范

检测项a

应采用免受恶意代码攻击的技术措施或主动免疫可信验证机制及时识别入侵和病毒行为,并将其有效阻断;

  • 默认不适用,暂无整改说明

可信验证

检测项a

可基于可信根对计算设备的系统引导程序、系统程序、重要配置参数和应用程序等进行可信验证,并在应用程序的关键执行环节进行动态可信验证,在检测到其可信性受到破坏后进行报警,并将验证结果形成审计记录送至安全管理中心。

  • 默认不适用,暂无整改说明

数据完整性

检测项a

应采用校验技术或密码技术保证重要数据在传输过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等;

整改步骤

  • 注:参照身份鉴别c项,开启SSL

检测项b

应采用校验技术或密码技术保证重要数据在存储过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等。

  • 默认部分符合,暂无整改说明

数据保密性

检测项a

应采用密码技术保证重要数据在传输过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等;

整改步骤

  • 注:参照身份鉴别c项,开启SSL

检测项b

应采用密码技术保证重要数据在存储过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等。

  • 默认部分符合,暂无整改说明

数据备份与恢复

检测项a

应提供重要数据的本地数据备份与恢复功能;

整改步骤

  1. 自动备份脚本

    • 选择一个目录存放备份文件,例如 /backup/mysql

      sudo mkdir -p /backup/mysql
      sudo chown -R mysql:mysql /backup/mysql
    • 创建一个备份脚本,例如 /usr/local/bin/mysql_backup.sh

      sudo vim /usr/local/bin/mysql_backup.sh
    • /usr/local/bin/mysql_backup.sh脚本中添加以下内容

      #!/bin/bash
      
      # 配置
      BACKUP_DIR="/backup/mysql"       #备份路径
      MYSQL_USER="root"                #用户名
      MYSQL_PASSWORD="your_password"   #密码
      DATABASE_NAME="your_database"    #数据库名
      DATE=$(date +%Y%m%d%H%M%S)       #日期
      
      # 创建备份文件
      BACKUP_FILE="$BACKUP_DIR/$DATABASE_NAME-$DATE.sql"
      
      # 使用 mysqldump 备份数据库
      mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD $DATABASE_NAME > $BACKUP_FILE
      
      # 检查备份是否成功
      if [ $? -eq 0 ]; then
       echo "Backup successful: $BACKUP_FILE"
      else
       echo "Backup failed"
       exit 1
      fi
      
      # 删除超过 7 天的旧备份文件
      find $BACKUP_DIR -type f -name "*.sql" -mtime +7 -exec rm -f {} \;
      
      echo "Old backups older than 7 days have been deleted."
    • 设置脚本权限

      sudo chmod +x /usr/local/bin/mysql_backup.sh
    • 配置定时任务

      sudo crontab -e
    • cron 配置文件中添加以下内容

      0 2 * * * /usr/local/bin/mysql_backup.sh
  2. 虚拟宿主机配置宿主机快照策略

整改完成附图

  1. 自动备份脚本

    mysql-rectification-16

检测项b

应提供异地数据备份功能,利用通信网络将重要数据定/实时传送至备用场地。

整改步骤

  • 虚拟资产配置异地备份策略

检测项c

应提供重要数据处理系统的热冗余,保证系统的高可用性;

整改步骤

  • 虚拟资产配置冗余策略

  • 集群部署配置集群策略

剩余信息保护

检测项a

应保证鉴别信息所在的存储空间被释放或重新分配前得到完全清除;

  • 默认符合,暂无整改说明

检测项b

应保证存有敏感数据的存储空间被释放或重新分配前得到完全清除。

  • 默认符合,暂无整改说明

个人信息保护

检测项a

应仅采集和保存业务必需的用户个人信息;

  • 注:多数情况为缺少个人信息保护相关的管理制度文件,对应补充即可

检测项b

应禁止未授权访问和非法使用用户个人信息。

  • 注:多数情况为缺少个人信息保护相关的管理制度文件,对应补充即可
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇