二级等保标准和解决方法(服务器,数据库,应用)

二级等保标准和解决方法(服务器,数据库,应用)

  • 说明
  • 应用后台
    • 1,身份鉴别
    • 2,访问控制
    • 3,安全审计
    • 4,入侵防范
    • 5,恶意代码防范
    • 6,可信验证
    • 7,数据完整性
    • 8,数据备份恢复
    • 9,剩余信息保护
    • 10,个人信息保护
  • 服务器
    • 1,身份鉴别
    • 2,访问控制
    • 3,安全审计
    • 4,入侵防范
    • 5,恶意代码防范
    • 6,可信验证
    • 7,数据完整性
    • 8,数据备份恢复
    • 9,剩余信息保护
  • 数据库(mysql)
    • 1,登录失败的次数及锁定时间
    • 2,开启审计日志
    • 3,设置密码过期期限
    • 4,密码复杂度
    • 5,超时退出
    • 6,查看系统用户
    • 7,关键数据加密
    • 8,备份策略
  • 数据库(dm)
    • 1,修改账户默认口令
    • 2,设置密码复杂度
    • 3,登录失败锁定策略
    • 4,数据库审计
      • 打开审计开关
      • 语句级审计
      • 对象级审计
    • 5,审计日志备份

说明

这段时间一直在做等保要求的修复,这里记录一下要修改的地方

应用后台

1,身份鉴别

a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;
说明:通过账号+口令对登录的用户进行身份标识和鉴别,身份标识具有唯一性,口令长度8-20位,包含字母、数字、特殊字 符,设置密码定期三个月更换
方法:按照上面说明,设置后台用户密码的复杂度和定期更换密码提醒

b)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施;
说明:同一账号连续登录失败5次锁定账号5分钟,设置登录连接超时半小时自动退出
方法:按照上面说明,设置登录失败策略和token登录过期时间

c)当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听;
说明:采用HTTPS协议防止鉴别信息在网络传输过程中被窃听
方法:网站需要配置HTTPS协议来访问

2,访问控制

a)应对登录的用户分配账户和权限;
说明:应用系统提供了访问控制功能,系统管理员在权限管理模块中对不同的用户进行权限分配
方法:管理后台要有权限控制,通过管理员对不同用户和角色进行权限分配

b)应重命名或删除默认账户,修改默认账户的默认口令;
说明:默认账户
方法:删除后台框架自带的用户,创建新用户(这个一般都会过)

c)应及时删除或停用多余的、过期的账户,避免共享账户的存在;
说明:删除、停用多余的、过期的账户,无共享账户存在
方法:这个一般没有多余,过期的账户(测试的时候和测试老师说下就可以过了)

d)应授予管理用户所需的最小权限,实现管理用户的权限分离;
说明:设置管理员、审计员、操作员,授予用户所需的最小权限,实现管理用户的权限分离
方法:后台配置两个用户,审计员(audit),操作员(operator)。审计员要有看系统日志和登录日志的权限,操作员要有操作所有业务功能的权限。(相当于把超管的权限分配给这三个用户,实现权限分离)

3,安全审计

a)应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计;
说明:启用了安全审计功能,覆盖到每个用户,对用户登录、操作进行审计
方法:系统要有用户的登录,操作日志

b)审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息;
说明:审计记录的内容包括:操作时间、操作用户、操作类型、操作内容等
方法:日志里面要有这些字段,字段没有特定要求但是该有的字段还是要有

c)应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等;
说明:审计记录保存在数据库中,每小时全量备份到备份服务器,应用系统用户无权限删除、修改或覆盖审计记录
方法:对操作,登录日志的定期备份。(由于我们日志是存在数据库里面的,我们数据库是每天备份的 所以这个也算过了)

4,入侵防范

a)应遵循最小安装的原则,仅安装需要的组件和应用程序;
说明:测评对象为应用系统,该项不适用
方法:是应用系统的话不用管

b)应关闭不需要的系统服务、默认共享和高危端口;
说明:测评对象为应用系统,该项不适用
方法:是应用系统的话不用管

c)应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制;
说明:测评对象为应用系统,该项不适用
方法:是应用系统的话不用管

d)应提供数据有效性检验功能,保证通过人机接口输入或通过通信接口输入的内容符合系统设定要求;
说明:提供了数据有效性检验功能,保证通过人机接口输入或通过通信接口输入的数据格式或长度符合系统设定要求,经安全扫描未发现相关安全漏洞
方法:要对应用系统,使用工具进行定期漏洞扫描,如果有高危漏洞要修复掉

e)应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞;
说明:经扫描未发现高危漏洞
方法:要对应用系统,使用工具进行定期漏洞扫描,如果有高危漏洞要修复掉,这个要有漏扫报告给到测试老师

5,恶意代码防范

a)应采用免受恶意代码攻击的技术措施或主动免疫可信验证机制及时识别入侵和病毒行为,并将其有效阻断。
说明: 测评对象为应用系统,该项不适用~~

6,可信验证

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

7,数据完整性

a)应采用校验技术或密码技术保证重要数据在传输过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等;
说明:采用HTTPS协议保证重要数据在传输过程中的完整性
方法:接口调用使用https通信

8,数据备份恢复

a)应提供重要数据的本地数据备份与恢复功能;
说明:对数据库每天增量备份,每周全量备份
方法:对数据库每天增量备份,每周全量备份

b)应提供异地实时备份功能,利用通信网络将重要数据实时备份至备份场地;
说明:提供异地实时备份功能
方法:异地备份,有个有异地服务器的话可以做,没有的话就做不了

9,剩余信息保护

a)应保证鉴别信息所在的存储空间被释放或重新分配前得到完全清除;
说明:退出时清除Session以及Token
方法:退出时清除Session以及Token

10,个人信息保护

a)应仅采集和保存业务必需的用户个人信息;
说明:仅采集和保存业务必需的用户个人信息,包括姓名、身份证号、邮箱、手机号等
方法:用户表里需要有用户的关键信息,对关键信息(邮箱,身份证等)进行数据库加密

b)应禁止未授权访问和非法使用用户个人信息。
说明:仅采集姓名、身份证号、邮箱、手机号等业务必需的用户个人信息,系统需登录后才可访问已授权访问的个人信息,未授权用户无法访问和使用用户个人信息
方法:对用户管理和查看用户详情权限控制。

服务器

1,身份鉴别

a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;
说明:通过堡垒机,使用账号+口令对登录的用户进行身份标识和鉴别,身份标识具有唯一性,口令最小长度8位且包含数字、大、小写字母、特殊字符,口令生命周期90天
方法:访问服务器要通过堡垒机登录,登录服务器要使用账号和密码,密码有复杂度要求和时效要求
命令
password 设置密码复杂度与长度
auth 设置登录失败次数和锁定时间

在配置文件中添加如下内容,如果已经有对应*.so 配置加到后面或者修改对应参数即可
sudo vi /etc/pam.d/system-auth
sudo vi /etc/pam.d/password-auth
--------------------------------------------------------------------------------------------------------------
CentOS 6
password requisite pam_cracklib.so retry=3 difok=3 minlen=8 ucredit=-1 lcredit=-1d credit=-1 ocredit=-1
auth required pam_tally2.so onerr=fail deny=5 unlock_time=1800 root_unlock_time=1800
--------------------------------------------------------------------------------------------------------------
CentOS 7
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=8 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 difok=5 enforce_for_root
auth required pam_faillock.so preauth audit deny=5 even_deny_root unlock_time=1800
auth [default=die] pam_faillock.so authfail audit deny=5 even_deny_root unlock_time=1800

注:如果是等保三级,系统登录和服务器系统都需要双因子认证。系统的双因子认证请看我之前的文章,服务器的双因子认证后面我会单独写一篇,请持续关注。

设置密码有效时间相关配置

vi  /etc/login.defs

PASS_MAX_DAYS	90
PASS_MIN_LEN	5
PASS_WARN_AGE	10

b)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施;
说明:同一账号连续登录失败5次锁定1800秒,设置连接超时600秒后自动退出
方法:登录失败添加完成上面配置即可
命令:
添加超时600秒自动退出

vi /etc/profile
最下面添加一行
export TMOUT=600

c)当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听;
说明:使用SSH协议连接服务器,防止鉴别信息在网络传输过程中被窃听
方法:使用远程连接云平台的服务器或者进行文件传输都要使用SSH的方式来操作,不能使用其他方式连接

2,访问控制

a)应对登录的用户分配账户和权限;
说明:系统对登录的用户分配的不同的账户和不同的操作权限,分配管理员root、审计员audit、操作员admin等账号
方法:新增审计员audit、操作员admin (ps:你可以不用但是测试的时候必须要有这些账号)
命令

// 新增admin账号
useradd -m -c "Admin User" admin
passwd admin
// 设置权限,不同系统不同操作
#CentOS/RHEL
usermod -aG wheel admin
#Debian/Ubuntu
usermod -aG sudo admin
--------------------------------------------------------------------------------------------------------------
// 设置audit审计账号
sudo adduser -m auditor
sudo passwd auditor
--------------------------------------------------------------------------------------------------------------
// 配置审计权限
vi /etc/sudoers
auditor ALL=(root)NOPASSWD: /usr/bin/cat, /usr/bin/less, /usr/bin/more,
/usr/bin/tail, /usr/bin/head
// 验证
su - auditor
sudo tail /var/log/messages

b)应重命名或删除默认账户,修改默认账户的默认口令;
说明:查看系统的用户列表,未重命名或删除默认账户root,但修改默认账户的默认口令
方法:重命名或删除默认账户root,并且修改root口令(这个建议重命名)

c)应及时删除或停用多余的、过期的账户,避免共享账户的存在;
说明:账户列表中多余的、过期的账户
方法:和测试老师解释下都是有用的就可以,这个一般不处理

d)应授予管理用户所需的最小权限,实现管理用户的权限分离;
说明:分配管理员root、审计员audit、操作员admin等账号,授予管理用户所需的最小权限,能够实现管理用户的权限分离
方法:和a)是一样的,配置完成这个也可以过

3,安全审计

a)应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计;
说明:启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计
方法:安装审计插件服务
命令

// 检查安装组件
sudo yum list audit audit-libs
sudo yum install audit audit-libs
--------------------------------------------------------------------------------------------------------------
// 配置服务
sudo vi /etc/audit/auditd.conf

num_logs = 10
max_log_file = 30
max_log_file_action = ROTATE
--------------------------------------------------------------------------------------------------------------
// 开启服务设置开启自启
sudo systemctl enable auditd
sudo systemctl start auditd

// 查看服务状态
sudo systemctl status auditd
--------------------------------------------------------------------------------------------------------------
// 修改审计规则
vi /etc/audit/rules.d/audit.rules

## This file is automatically generated from /etc/audit/rules.d
-a always,exit -F arch=b32 -S setuid,setgid -k setuid_setgid
-a always,exit -F arch=b64 -S setuid,setgid -k setuid_setgid

// 使用auditctl -l 命令测试配置是否成功

b)审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息;
说明:审计记录包括事件的日期和时间、用户、类型、内容等
方法:这个插件生成的审计日志都有这些字段,不用单独配置 日志路径/var/log/audit

c)应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等;
说明:审计记录记录在服务器上,并且对审计服务器记录定期备份,避免受到未预期的删除、修改或覆盖,日志保存时间能够满足6个月要求
方法:有添加的异地备份,不然就本地备份
命令

// 先修改日志存储期限
vi /etc/logrotate.conf

rotate 26 
--------------------------------------------------------------------------------------------------------------
// 本地脚本备份存储
// 找个位置存放脚本和备份文件(最好选择已经挂载磁盘较多的目录)
vi audit.sh

#!/bin/bash
#在 多个目录下查找所有扩展名为 .log 或者 .txt 的文件,并且文件修改时间超过 180 天(即 6 个月)的文件会被删除
find  "/var/log/audit" -type f \( -name "*.log" -o -name "*.txt" \) -mtime +180 -exec rm {} \;
bak_dir='/data/audit'             # 定义备份目录
bak_file="${bak_dir}/audit_$(date +%Y%m%d%H%M).tar.gz"   # 定义备份文件名
log_files=(                              # 定义要备份的日志文件和目录
    "/var/log/audit/audit.log"
    "/var/log/messages"
    "/var/log/secure"
)

if [ ! -d "${bak_dir}" ]; then          # 如果备份目录不存在则创建
    mkdir -p "${bak_dir}"
fi

tar czf "${bak_file}" "${log_files[@]}"  # 打包备份文件
ls -tp "${bak_dir}" | grep -v "/$" | tail -n +6 | xargs -I {} rm "${bak_dir}/{}"
--------------------------------------------------------------------------------------------------------------
// 配置权限
chmod +x audit.sh
// 配置定时任务,每天晚上两点执行脚本备份审计文件
crontab -e

00 02 * * * /data/audit/audit.sh

4,入侵防范

a)应遵循最小安装的原则,仅安装需要的组件和应用程序;
说明:遵循最小安装的原则,仅安装需要的组件和应用程序
方法:删除已经下载但是不使用的组件和程序

b)应关闭不需要的系统服务、默认共享和高危端口;
说明:关闭不需要的系统服务、默认共享和高危端口,例如8699
方法:这个建议使用web扫描来漏扫一遍后台系统,因为后面可以要系统漏扫报告,最好扫一遍。
我这里用的是AWVS来扫描的,这个工具可以在windows下载使用扫描。

c)应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制;
说明:仅允许在内网特定网段对服务器进行管理
方法:这个应该是堡垒机和服务器需要内网才能访问和管理,不能开放互联网。

d)应提供数据有效性检验功能,保证通过人机接口输入或通过通信接口输入的内容符合系统设定要求;
说明:测评对象为服务器,此项不适用
方法:测评对象为服务器,此项不适用

e)应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞;
说明:由开发方每周开展漏扫,并针对漏洞进行及时评估与修复
方法:有开发定期进行主机漏扫,并给出最近一次主机漏扫报告。(ps:如果测试的人问起多久扫一次,就说一个月扫一次就够了)

注:关于前面系统扫描和主机扫描后面我会出一遍文章来教大家怎么搞,还是有点麻烦的。

5,恶意代码防范

a)应采用免受恶意代码攻击的技术措施或主动免疫可信验证机制及时识别入侵和病毒行为,并将其有效阻断。
说明:要在服务器安装杀毒软件,定期杀毒。要提供最近一次杀毒的日志和病毒库更新时间
方法:我这里使用的是clamav开源杀毒软件,后面我会单独出一篇文章来演示

6,可信验证

可基于可信根对计算设备的系统引导程序、系统程序、重要配置参数和应用程序等进行可信验证,并在应用程序的关键执行环节进行动态可信验证,在检测到其可信性受到破坏后进行报警,并将验证 结果形成审计记录送至安全管理中心。
说明:这个暂时没有好办法整改,一般不做操作
方法:这个暂时没有好办法整改,一般不做操作

7,数据完整性

a)应采用校验技术或密码技术保证重要数据在传输过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等;
说明:通过SSH协议对服务器进行远程管理,保证重要数据在传输过程中的完整性
方法:这个和前面一样,服务器都要用SSH来操作

8,数据备份恢复

a)应提供重要数据的本地数据备份与恢复功能;
说明:服务器每日快照备份
方法:虚拟机云服务器应该都有快照备份的操作,建议问下服务器管理员或者其他相关人员

b)应提供异地实时备份功能,利用通信网络将重要数据实时备份至备份场地;
说明:提供异地备份功能
方法:日志和数据库的异地备份

9,剩余信息保护

a)应保证鉴别信息所在的存储空间被释放或重新分配前得到完全清除;
说明:操作系统鉴别信息(用户名和密码)存储在/etc/shadow文件中,采用SHA512算法计算密码哈希值,操作系统每次登录时需输入账户名和口令,已在上次退出登录时清除鉴别信息
方法:运服务器都自带这些功能,不用特别配置。 cat /etc/shadow 看看用户信息

数据库(mysql)

数据库就不按照等保要求一步一步做了,他们测试主要使用了几个命令查看数据库安全和日志方面的配置

1,登录失败的次数及锁定时间

用来控制登录失败的次数及锁定时间,要配置这些需要检查mysql是否已经安装对应插件

mysql>show variables like '%connection_control%';
+-------------------------------------------------+------------+
| Variable_name                                   | Value      |
+-------------------------------------------------+------------+
| connection_control_failed_connections_threshold | 5          |
| connection_control_max_connection_delay         | 2147483647 |
| connection_control_min_connection_delay         | 300000     |
+-------------------------------------------------+------------+
mysql>
mysql>set global connection_control_failed_connections_threshold=5;
mysql>set global connection_control_min_connection_delay=300000;
mysql>
mysql> SHOW PLUGINS;
+------------------------------------------+----------+--------------------+-----------------------+---------+
| Name                                     | Status   | Type               | Library               | License |
+------------------------------------------+----------+--------------------+-----------------------+---------+
| binlog                                   | ACTIVE   | STORAGE ENGINE     | NULL                  | GPL     |
| mysql_native_password                    | ACTIVE   | AUTHENTICATION     | NULL                  | GPL     |
| sha256_password                          | ACTIVE   | AUTHENTICATION     | NULL                  | GPL     |
| caching_sha2_password                    | ACTIVE   | AUTHENTICATION     | NULL                  | GPL     |
| sha2_cache_cleaner                       | ACTIVE   | AUDIT              | NULL                  | GPL     |
| daemon_keyring_proxy_plugin              | ACTIVE   | DAEMON             | NULL                  | GPL     |
| CSV                                      | ACTIVE   | STORAGE ENGINE     | NULL                  | GPL     |
| MEMORY                                   | ACTIVE   | STORAGE ENGINE     | NULL                  | GPL     |
| InnoDB                                   | ACTIVE   | STORAGE ENGINE     | NULL                  | GPL     |
| INNODB_TRX                               | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_CMP                               | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_CMP_RESET                         | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_CMPMEM                            | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_CMPMEM_RESET                      | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_CMP_PER_INDEX                     | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_CMP_PER_INDEX_RESET               | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_BUFFER_PAGE                       | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_BUFFER_PAGE_LRU                   | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_BUFFER_POOL_STATS                 | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_TEMP_TABLE_INFO                   | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_METRICS                           | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_FT_DEFAULT_STOPWORD               | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_FT_DELETED                        | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_FT_BEING_DELETED                  | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_FT_CONFIG                         | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_FT_INDEX_CACHE                    | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_FT_INDEX_TABLE                    | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_TABLES                            | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_TABLESTATS                        | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_INDEXES                           | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_TABLESPACES                       | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_COLUMNS                           | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_VIRTUAL                           | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_CACHED_INDEXES                    | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| INNODB_SESSION_TEMP_TABLESPACES          | ACTIVE   | INFORMATION SCHEMA | NULL                  | GPL     |
| MyISAM                                   | ACTIVE   | STORAGE ENGINE     | NULL                  | GPL     |
| MRG_MYISAM                               | ACTIVE   | STORAGE ENGINE     | NULL                  | GPL     |
| PERFORMANCE_SCHEMA                       | ACTIVE   | STORAGE ENGINE     | NULL                  | GPL     |
| TempTable                                | ACTIVE   | STORAGE ENGINE     | NULL                  | GPL     |
| ARCHIVE                                  | ACTIVE   | STORAGE ENGINE     | NULL                  | GPL     |
| BLACKHOLE                                | ACTIVE   | STORAGE ENGINE     | NULL                  | GPL     |
| FEDERATED                                | ACTIVE   | STORAGE ENGINE     | NULL                  | GPL     |
| ndbcluster                               | DISABLED | STORAGE ENGINE     | NULL                  | GPL     |
| ndbinfo                                  | DISABLED | STORAGE ENGINE     | NULL                  | GPL     |
| ndb_transid_mysql_connection_map         | DISABLED | INFORMATION SCHEMA | NULL                  | GPL     |
| ngram                                    | ACTIVE   | FTPARSER           | NULL                  | GPL     |
| mysqlx_cache_cleaner                     | ACTIVE   | AUDIT              | NULL                  | GPL     |
| mysqlx                                   | ACTIVE   | DAEMON             | NULL                  | GPL     |
| CONNECTION_CONTROL                       | ACTIVE   | AUDIT              | connection_control.so | GPL     |
| CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS | ACTIVE   | INFORMATION SCHEMA | connection_control.so | GPL     |
| validate_password                        | ACTIVE   | VALIDATE PASSWORD  | validate_password.so  | GPL     |
+------------------------------------------+----------+--------------------+-----------------------+---------+

主要是下面三个插件的安装和配置
点这里做参考

2,开启审计日志

mysql>show variables like '%general_log%';
+------------------+-------------------------------------------------------+
| Variable_name    | Value                                                 |
+------------------+-------------------------------------------------------+
| general_log      | OFF                                                    |
| general_log_file | /data/mysql/test.log |
+------------------+-------------------------------------------------------+
mysql> set global general_log=on // 开启日志规则

注:等保要求数据库审计日志也要定时备份180天,请参考上面的备份脚本和定时任务来做。

3,设置密码过期期限

mysql>show variables like '%password_lifetime%';
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| default_password_lifetime | 90    |
+---------------------------+-------+
1 row in set (0.00 sec)
mysql>
mysql>set global default_password_lifetime=90;

4,密码复杂度

mysql>show variables like 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | ON     |
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+

实现安装validate_password插件配置安装
配置最好和我的一样

5,超时退出

mysql>show variables like '%timeout';
+-----------------------------------+----------+
| Variable_name                     | Value    |
+-----------------------------------+----------+
| connect_timeout                   | 10       |
| delayed_insert_timeout            | 300      |
| have_statement_timeout            | YES      |
| innodb_flush_log_at_timeout       | 1        |
| innodb_lock_wait_timeout          | 50       |
| innodb_rollback_on_timeout        | OFF      |
| interactive_timeout               | 28800    |
| lock_wait_timeout                 | 31536000 |
| mysqlx_connect_timeout            | 30       |
| mysqlx_idle_worker_thread_timeout | 60       |
| mysqlx_interactive_timeout        | 28800    |
| mysqlx_port_open_timeout          | 0        |
| mysqlx_read_timeout               | 30       |
| mysqlx_wait_timeout               | 28800    |
| mysqlx_write_timeout              | 60       |
| net_read_timeout                  | 30       |
| net_write_timeout                 | 60       |
| replica_net_timeout               | 60       |
| rpl_stop_replica_timeout          | 31536000 |
| rpl_stop_slave_timeout            | 31536000 |
| slave_net_timeout                 | 60       |
| ssl_session_cache_timeout         | 300      |
| wait_timeout                      | 28800    |
+-----------------------------------+----------+

重点是以下字段:
connect_timeout
interactive_timeout
wait_timeout。

6,查看系统用户

mysql> select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| audit            | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| secure           | localhost |
+------------------+-----------+

主要查看用户是否名称是否相同,系统是否有audit审计员账号,没有的话创建一个

7,关键数据加密

如果系统用户表有关键信息比如身份证,邮箱,手机号等在数据库需要加密存储
ps:要和测试老师说明有哪些关键字段是加密过的,使用的什么加密算法

8,备份策略

对数据库进行定期备份,要有备份周期、备份文件存储位置、备份文件保留期限
参考脚本

#!/bin/bash 
echo 'Start backup' 
DIR=/data/backup/db/                               // 数据库备份存放位置
USER=test                                 		   // 账号
PASSWORD=123456								   	   // 密码
DATABASE=cloud_test								   // 备份库名称
DATE=`date +%Y%m%d%H%M`							   // 定于备份时间
SQLFILE="${DATABASE}_${DATE}.sql"				   // 定义sql文件名
TARFILE="${DATABASE}_${DATE}.tar.gz"			   // 定义压缩文件名
SEARCHFILE="${DATABASE}_*.tar.gz"				   // 定于模糊压缩文件名
mysqldump -h localhost -u$USER -p$PASSWORD --databases $DATABASE > $DIR/$SQLFILE // 备份命令
echo 'Backup completed' 
echo 'Start compression' 
cd $DIR
tar -czvf $TARFILE $SQLFILE
rm -rf $SQLFILE										// 到备份位置打包后删除文件夹
scp $TARFILE [email protected]:/data/backup/db		    // 可选,同步备份到其他机器保存
echo "File: $TARFILE" 
echo 'Compression completed' 
echo 'Start clearance ' 
echo "Searching $SEARCHFILE" 
find $DIR -mtime +30 -name "$SEARCHFILE" -exec rm -f {} \;		// 只保留30天的备份文件
echo 'Clearance completed'

使用crontab或者其他定时任务 周期性备份。
ps:我这里是本地备份,有条件最好是异地备份,等保要求里面有要求要异地备份。

数据库(dm)

1,修改账户默认口令

alter user SYSDBA identified by "<密码>";
alter user SYSAUDITOR identified by "<密码>";

2,设置密码复杂度

单独设置复杂策略31位

SP_SET_PARA_VALUE(1, 'PWD_POLICY', 31);

给所有用户设置复杂策略

alter user SYSDBA PASSWORD_POLICY 31;

3,登录失败锁定策略

ALTER USER SYSDBA LIMIT FAILED_LOGIN_ATTEMPS 3, PASSWORD_LOCK_TIME 5,
PASSWORD_GRACE_TIME 30, PASSWORD_LIFE_TIME 30, connect_idle_time 60;
配置项 参数 说明
FAILED_LOGIN_ATTEMPS 3 用户失败登录次数限制
PASSWORD_LOCK_TIME 5 用户口令锁定期限制
PASSWORD_GRACE_TIME 30 口令过期宽限时间
PASSWORD_LIFE_TIME 30 用户口令过期时间限制
CONNECT_IDLE_TIME 60 空闲连接时间60分钟

4,数据库审计

打开审计开关

SP_SET_ENABLE_AUDIT(1)

语句级审计

设置所有语句都审计

SP_AUDIT_STMT('ALL', 'NULL', 'ALL');

表结构

VOID SP_AUDIT_STMT(
	TYPE VARCHAR(30),
	USERNAME VARCHAR (128),
	WHENEVER VARCHAR (20)
)

说明

字段 参数 说明
TYPE ALL 语句级审计选项
USERNAME NULL 用户名,NULL 表示不限制
WHENEVER ALL 审计时机

ALL:所有的
SUCCESSFUL:操作成功时
FAIL:操作失败时

对象级审计

SP_AUDIT_OBJECT('ALL','test','test','SYS_USER','ALL');

表结构

VOID SP_AUDIT_OBJECT(
	TYPE VARCHAR(30),
	USERNAME VARCHAR (128),
	SCHNAME VARCHAR (128),
	TVNAME VARCHAR (128),
	WHENEVER VARCHAR (20)
)
VOID SP_AUDIT_OBJECT(
	TYPE VARCHAR(30),
	USERNAME VARCHAR (128),
	SCHNAME VARCHAR (128),
	TVNAME VARCHAR (128),
	COLNAME VARCHAR (128),
	WHENEVER VARCHAR (20)
)

说明

字段 参数 说明
TYPE ALL 语句级审计选项
USERNAME test 用户名
SCHNAME test 模式名,为空时置‘null’
TVNAME SYS_USER 表、视图、存储过程名不能为
COLNAME username 列名
WHENEVER ALL 审计时机

ALL:所有的
SUCCESSFUL:操作成功时
FAIL:操作失败时

5,审计日志备份

开启审计开关和配置好审计条件 审计日志在/data/dm8/data/DAMENG下
要求备份保留3个月的审计日志,请参考上面备份日志的脚本改造下。

你可能感兴趣的:(卑微码农之路,数据库,服务器,网络,安全,linux,mysql)