等保测评
等保测评
1. MySQL
MySQL测评:https://zhuanlan.zhihu.com/p/567340352
https://blog.51cto.com/mvp2008/6763862
https://juejin.cn/post/6934987533512081421
1.1MySQL审计日志
1.1.1 通过
- 审计日志(通用日志general log)
show variables like '%log%';

通过修改配置文件
/etc/my.conf修改后重启
systemctl restart mysqld;
- systemctl stop mysqld; ## 关闭
- systemctl start mysqld # 启动
# 开启
general_log = ON
general_log_file = /path/to/your/logfile ## 可不填写
# 设置时区
default-time-zone=Asia/Shanghai
log_timestamps = SYSTEM
- general日志轮换脚本
linux-脚本
- 脚本
脚本说明:
mysql -u root -pYourPassword -e "FLUSH LOGS;"
-e "FLUSH LOGS;" 表示执行FLUSH LOGS;这条SQL命令。
FLUSH LOGS;这条SQL命令的作用是关闭并重新打开MySQL服务器的所有日志文件。当你执行这条命令后,MySQL会将所有未写入磁盘的日志数据写入日志文件,并关闭当前的日志文件,然后打开新的日志文件进行写入。这就是为什么在我们的脚本中,我们在移动日志文件后需要执行这条命令,以确保MySQL开始写入新的日志文件。
- crontab任务
打开crontab编辑器:
crontab -e
然后,添加以下行到crontab文件:
0 1 * * * /path/to/your/mysql_general_log_bak.sh
cron状态检查
sudo service crond status
sudo service crond start
查看 Cron日志 可以确定脚本执行失败情况
cat /var/log/cron
## grep 命令来过滤出与你的脚本相关的日志
grep mysql_general_log_bak.sh /var/log/cron
脚本直接执行成功,但是调度中执行失败,大概率是权限问题
chmod +x /path/to/your/mysql_general_log_bak.sh
windows脚本
- 设置定时任务
1.2 MySQL 数据库的密码策略
https://blog.51cto.com/u_16213606/7447081
需求:口令的复杂度(8位以上、至少字母、数字、符号等混合组成)并更换周期进行合理设置(90天以内),不允许新设定的口令与前次旧口令相同
确保
validate_password插件已启用。检查插件状态:执行
SHOW PLUGINS;命令。如果插件未启用,在 MySQL 配置文件中添加或修改以下行:
plugin-load=validate_password。配置文件通常位于
/etc/my.cnf或/etc/mysql/my.cnf如果是windows下的MySQL数据库,则需要执行
install plugin validate_password soname 'validate_password.dll';(运行时注册插件。无需重启mysql)
在这里插入图片描述
重启 MySQL 服务器:执行
sudo service mysql restart或者systemctl restart mysqld(这里不要着急重启,后面还有需要涉及到配置文件的修改)
检查和配置密码策略:
- 检查密码策略变量配置:执行
SHOW VARIABLES LIKE 'validate_password%';命令。 - 根据需求进行配置修改,例如:
- 修改密码长度要求:
validate_password_length默认为 8。 - 修改大小写字母要求:
validate_password_mixed_case_count默认为 1。 - 修改数字要求:
validate_password_number_count默认为 1。 - 修改特殊字符要求:
validate_password_special_char_count默认为 1。
- 修改密码长度要求:
默认如下配置
说明 validate_password_check_user_name OFF "OFF",表示不会检查密码是否与用户名相同 validate_password_dictionary_file validate_password_length 8 表示密码的最小长度要求为 8 个字符 validate_password_mixed_case_count 1 表示密码中至少需要包含一个大小写字母 validate_password_number_count 1 表示密码中至少需要包含一个数字 validate_password_policy MEDIUM 表示密码策略,默认为MEDIUM,有三个取值范围
0 or LOW 表示只需要符合密码长度即可
1 or MEDIUM 表示在满足LOW策略的同时,还需要满足至少有一个数字,一个大小写字母和特殊字符
2 or STRONG 表示满足MEDIUM策略的同时,密码不能存放在字典文件中validate_password_special_char_count 1 表示密码中至少需要包含一个特殊字符 - 检查密码策略变量配置:执行
设置密码过期时间:
- 检查默认密码过期时间:执行
SHOW VARIABLES LIKE 'default_password_lifetime';命令。 - 在 MySQL 配置文件中添加以下行设置密码过期时间(以天为单位):
default_password_lifetime = 90。
- 检查默认密码过期时间:执行
创建用户和密码(目前测试遇到过在navicat中设置成功后,无法连接上,需要重启navicat)
- 创建用户:执行
CREATE USER 'username'@'host' IDENTIFIED BY 'password';命令。 - 修改已有用户密码:执行
ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';命令。
创建一个test用户,默认密码是 123
SELECT User, Host FROM mysql.user; CREATE USER 'test'@'%' IDENTIFIED BY 'Ah@2022_222'; DROP USER 'test'@'%'; # 删除 ALTER USER 'root'@'%' IDENTIFIED BY 'Ah@2022_222'; ## 修改已有用户的密码- 创建用户:执行
创建的时候可能出现下面的错误,执行 ` flush privileges`
CREATE USER 'test'@'%' IDENTIFIED BY '123'
1290 - The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement 时间: 0s
也有可能出现下面的错误,是因为 'root'@'%' 和 'root'@'localhost' 的缘故
mysql> ALTER USER 'root'@'%' IDENTIFIED BY 'Ah@2022_222';
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
-- 正确
mysql> ALTER user 'root'@'localhost' IDENTIFIED BY 'Ah@2022_222';
Query OK, 0 rows affected (0.01 sec)
mysql>
汇总
#=================================设置数据库的密码策略:口令的复杂度(8位以上、至少字母、数字、符号等混合组成)并更换周期进行合理设置(90天以内),不允许新设定的口令与前次旧口令相同
# 启用 validate_password 插件
plugin-load-add=validate_password.so
# 最小长度 (默认就是8,如果没有特需求,这里可以不要)
validate_password_length = 8
# 数字 (默认就是1,如果没有特需求,这里可以不要)
validate_password_number_count = 1
# 特殊字符(默认就是1,如果没有特需求,这里可以不要)
validate_password_special_char_count = 1
# 用户密码的有效期限,以天为单位
default_password_lifetime = 90
flush privileges #刷新权限
CREATE USER 'yjydxj'@'%' IDENTIFIED BY 'Ahsbd@2022_222'; # 创建用户
-- DROP USER 'yjydxj'@'%'; # 删除用户
1.3 MySQL 设置登录失败处理功能和登录超时断开连接
应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施
描述:系统处于登录状态而管理员离开时未主动断开连接可能会存在他人操作系统的情况,可能导致系统数据丢失甚至被破坏;不设置登录失败处理功能可能存在被暴力破解的情况。
https://www.cnblogs.com/jichi/p/14243431.html
https://blog.csdn.net/xtaypyvi123456/article/details/125274821
主要看这两个参数有没有设置:max_connect_errors、 Wait_timeout 。
命令:
mysql> SHOW VARIABLES LIKE 'max_connect_errors';
mysql> SHOW VARIABLES LIKE '%timeout%';
验证插件安装:使用
SHOW PLUGINS;命令来检查插件是否成功安装,并确保插件状态为 "ACTIVE"。SHOW PLUGINS;安装插件:使用 MySQL 提供的
INSTALL PLUGIN语句来安装插件 ,或者配置文件中plugin-load-add = connection_control.soINSTALL PLUGIN CONNECTION_CONTROL SONAME 'connection_control.so'; INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME 'connection_control.so';windows下的安装
root账号登录mysql mysql>mysql -h localhost -uroot -pmysql -P13306 mysql>install plugin connection_control soname 'connection_control.dll'; mysql>install plugin connection_control_failed_login_attempts soname 'connection_control.dll';修改配置文件:根据你的需求,修改 MySQL 配置文件(
my.cnf)并添加相关的配置项,如你提供的示例中所示。这些配置项可以用于设置连接失败次数阈值、连接延迟时间和连接超时时间。[mysqld] #登陆失败次数限制 connection-control-failed-connections-threshold = 5 # 限制重试时间,此处为毫秒,注意按需求换算,此处为5分钟 connection-control-min-connection-delay = 300000 ##服务器关闭交互式连接超时时长(单位秒) interactive_timeout=60 #服务器关闭非交互连接之前等待活动的秒数(单位秒) wait_timeout=60重启 MySQL 服务:保存配置文件并重启 MySQL 服务,使更改生效。
systemctl restart mysqld验证:输入密码错误5次后,将不可以再输入密码
**注:**目前如果5次输入错误,无法登录数据库,这时只能等或者重启数据库)

img
注: 这里可能会出现密码失效,随便输入密码都能登录数据库的情况,需要通过 flush privileges 来刷新权限
2. Oracle数据库
Oralce数据库策略
需求:口令的复杂度(8位以上、至少字母、数字、符号等混合组成)并更换周期进行合理设置(90天以内),不允许新设定的口令与前次旧口令相同
1. 查询oralce数据库密码策略
SELECT * FROM DBA_PROFILES WHERE PROFILE = 'DEFAULT' -- AND RESOURCE_TYPE = 'PASSWORD';
这是 Oracle 数据库中 PROFILE 的默认配置的信息。PROFILE 是用于设置用户的资源限制和密码管理策略的工具。
- COMPOSITE_LIMIT:它是 KERNEL 类型的,用于设置用户的复合资源限制。默认值是无限制。
- SESSIONS_PER_USER:它是 KERNEL 类型的,用于设置每个用户可以有多少个会话。默认值是无限制。
- CPU_PER_SESSION:它是 KERNEL 类型的,用于设置每个会话可以使用的 CPU 时间。默认值是无限制。
- CPU_PER_CALL:它是 KERNEL 类型的,用于设置每个调用可以使用的 CPU 时间。默认值是无限制。
- LOGICAL_READS_PER_SESSION:它是 KERNEL 类型的,用于设置每个会话可以进行的逻辑读取的数量。默认值是无限制。
- LOGICAL_READS_PER_CALL:它是 KERNEL 类型的,用于设置每个调用可以进行的逻辑读取的数量。默认值是无限制。
- IDLE_TIME:它是 KERNEL 类型的,用于设置会话的空闲时间,单位是分钟。默认值是无限制。( 空闲超时时间)
- CONNECT_TIME:它是 KERNEL 类型的,用于设置会话的连接时间。默认值是无限制。
- PRIVATE_SGA:它是 KERNEL 类型的,用于设置用户的私有系统全局区(SGA)的大小。默认值是无限制。
- FAILED_LOGIN_ATTEMPTS:它是 PASSWORD 类型的,用于设置用户可以尝试登录的次数。默认值是10。
- PASSWORD_LIFE_TIME:它是 PASSWORD 类型的,用于设置密码的有效期。默认值是180天。密码有效期
- PASSWORD_REUSE_TIME:它是 PASSWORD 类型的,用于设置密码可以重复使用的时间。默认值是无限制。开启后控制新老密码不能相同
- PASSWORD_REUSE_MAX:它是 PASSWORD 类型的,用于设置密码可以重复使用的次数。默认值是无限制。
- PASSWORD_VERIFY_FUNCTION:它是 PASSWORD 类型的,用于设置密码验证函数。默认值是 null。
- PASSWORD_LOCK_TIME:它是 PASSWORD 类型的,用于设置用户被锁定的时间。默认值是1天。
- PASSWORD_GRACE_TIME:它是 PASSWORD 类型的,用于设置密码过期后的宽限期。默认值是7天。
以上是 PROFILE 默认配置的每个参数的含义。你可以根据实际需求,使用ALTER PROFILE命令来调整这些配置的值。
2. 开启密码复杂性校验
通过
sqlplus /nolog和conn /as sysdba登录dba 然后执行@?/rdbms/admin/utlpwdmg.sql创建oracle 预制的管理密码验证规则SQL 脚本文件(位置)默认的
utlpwdmg.sql里面有些需要修改 ,可以直接使用 utlpwdmg_custom.sql 脚本,已经修改过的, (@?/rdbms/admin/utlpwdmg_custom.sql)C:\Users\lihuan>sqlplus /nolog SQL*Plus: Release 11.2.0.1.0 Production on 星期二 5月 21 18:08:24 2024 Copyright (c) 1982, 2010, Oracle. All rights reserved. SQL> conn /as sysdba 已连接。 SQL> @?/rdbms/admin/utlpwdmg.sql 函数已创建。 配置文件已更改 函数已创建。 SQL>执行过后查询
SELECT * FROM DBA_PROFILES WHERE PROFILE = 'DEFAULT' -- AND RESOURCE_TYPE = 'PASSWORD';
image-20240521181929631 参数说明
- FAILED_LOGIN_ATTEMPTS: 这是一个用户在被锁定之前可以尝试登录的次数。默认值为10。
- PASSWORD_LIFE_TIME: 这是密码的有效期,单位是天。默认值为180天。
- PASSWORD_REUSE_TIME: 这是在多少天后可以重复使用密码。默认值是无限制。
- PASSWORD_REUSE_MAX: 这是可以重复使用密码的最大次数。默认值是无限制。
- PASSWORD_VERIFY_FUNCTION: 这是用于验证密码复杂性的函数。在11g版本中,默认的函数名为 VERIFY_FUNCTION_11G。
- PASSWORD_LOCK_TIME: 这是在连续尝试登录失败后,用户被锁定的时间,单位是天。默认值为1天。 (搭配 FAILED_LOGIN_ATTEMPTS使用 )
- PASSWORD_GRACE_TIME: 这是在密码过期后,用户仍然可以登录的宽限期,单位是天。默认值为7天。
使用
ALTER PROFILE语句来修改这些配置ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 90; -- 设置密码有效期 90天 -- PASSWORD_REUSE_MAX 的值是 1,控制新密码不能同老密码,主要是设置后,会在 select * from SYS.USER_HISTORY$; 中记录用户的密码,用于比对新来密码,,这个设置后,不用再函数中再额外补充 这条判读逻辑 ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_MAX 1;该脚本默认设置
- 密码的最小长度8
- 用户名和密码不能想同
- 包含至少一个字母,一个数字、检查字符
- 180天过期
3. 关闭密码复杂性校验:
alter profile default limit PASSWORD_VERIFY_FUNCTION null;
alter profile default limit PASSWORD_REUSE_TIME unlimited;
alter profile default limit PASSWORD_REUSE_MAX unlimited;
Oralce 设置登录失败处理功能和登录超时断开连接
检查
SELECT * FROM DBA_PROFILES WHERE PROFILE = 'DEFAULT'
SELECT LIMIT FROM DBA_PROFILES WHERE PROFILE='DEFAULT' AND RESOURCE_NAME='FAILED_LOGIN_ATTEMPTS'; -- 登录失败次数 允许的最大失败登录尝试次数,超出锁定(默认是10 ,除非有特别需求否则可以不用修改)
select limit from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_LOCK_TIME'; -- 登录失败锁定时间,默认值是1(单位是天)
SELECT LIMIT FROM DBA_PROFILES WHERE PROFILE='DEFAULT' AND RESOURCE_NAME='IDLE_TIME'; -- 登录超时限制
在utlpwdmg_custom.sql 脚本中已经设置过,无需修改,如果对上面的配置需要设置,可通过 ALTER 语句进行修改
例如:
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS 10; -- 设置 登录失败次数10次,超过则锁定
ALTER PROFILE DEFAULT LIMIT PASSWORD_LOCK_TIME 1; -- 设置 连续登录失败锁定 ,单位是天。默认值为1天。 (搭配 FAILED_LOGIN_ATTEMPTS使用 )
ALTER PROFILE DEFAULT LIMIT IDLE_TIME 10; -- 设置 登录超时限制 单位分钟
服务器设置
1. 密码策略
1.1 Windows服务器中配置用户口令、设置复杂度限制以及更换周期
https://juejin.cn/post/6939754832982966279
需求:口令的复杂度(8位以上、至少字母、数字、符号等混合组成)并更换周期进行合理设置(90天以内),不允许新设定的口令与前次旧口令相同。
打开->本地安全策略->账户策略->密码策略

- 打开“组策略编辑器”。你可以按下Win+R键,然后在弹出的运行对话框中输入
gpedit.msc,按回车键即可打开组策略编辑器。 - 在组策略编辑器中,依次展开“计算机配置”->“Windows设置”->“安全设置”->“账户策略”->“密码策略”。
- 在右侧面板中,你可以看到以下几个设置选项:
- 密码必须符合复杂性要求:你可以设置为“启用”,这样系统就会要求新密码必须包含至少三种字符类型(大写字母、小写字母、数字和非字母数字字符)。
- 最小密码长度:你可以设置为8,这样系统就会要求新密码的长度至少为8个字符。
- 密码最短使用期限:你可以设置为0,这样用户在设置新密码后就可以马上更改它。
- 密码最长使用期限:你可以设置为90,这样系统就会在90天后提示用户更改密码。
- 强制密码历史:你可以设置为1,这样系统就会记住用户的最后一个密码,并且不允许新密码与旧密码相同。
- 修改好这些设置后,点击“确定”按钮保存更改。
**注:**有些电脑没有 gpedit.msc 文件
Win+R键,对话框中输入gpedit.msc 检查,如果没有则可以手动创建
手动创建一个bat文件,然后管理员运行,在重新Win+R输入gpedit.msc
@echo off
pushd "%~dp0"
dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txt
dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum >>List.txt
for /f %%i in ('findstr /i . List.txt 2^>nul') do dism /online /norestart /add-package:"C:\Windows\servicing\Packages\%%i"
1.2 linux 服务器中配置用户口令、设置复杂度限制以及更换周期
https://blog.csdn.net/weixin_44950652/article/details/135103456
以 root 用户身份登录到 CentOS 服务器。
运行以下命令打开密码策略配置文件
/etc/login.defs:sudo vi /etc/login.defs在文件中找到以下行并进行相应的更改:
PASS_MAX_DAYS 90 # 将密码有效期设置为90天以内 # PASS_MIN_DAYS 1# 两次修改密码的最小间隔时间 PASS_MIN_LEN 8 # 将密码最小长度设置为8位 PASS_WARN_AGE 7 # 在密码过期前7天开始提醒用户更改密码通过
more /etc/shadow这里的配置只对后面创建的生效需要通过
sudo chage -M 90 username(username:用户名)# 例如:更新root sudo chage -M 90 root保存并关闭文件。
运行以下命令打开密码复杂度策略配置文件
/etc/pam.d/system-auth:sudo vi /etc/pam.d/system-auth在文件中找到
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 enforce_for_rootpassword requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=8 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root # remember=1 1次内密码不重复 # retry=3 表示如果密码不符合要求,将提供3次重试机会 # difok=3 至少有3个字符与上一个口令不同 # minlen= #密码最小长度为8个字符。 # ucredit=-1 #密码应包含的大写字母至少一个 # lcredit=-1 #密码应包含的小写字母的至少一个 # dcredit=-1 #将密码包含的数字至少为一个 # ocredit=-1 #设置其他符号的最小数量,例如@,#、! $%等,至少要有一个 # enforce_for_root #即使是root用户设置密码,也应强制执行复杂性策略。保存并关闭文件,无需重启即可生效
more /etc/shadow中检查
image-20240527185518548
修改密码:
# passwd 用户名,例如:修改root的用户名
passwd root
# 查询账号
cat /etc/passwd |grep bash
# 创建账
sudo useradd xxx
2. 登录连接超时自动退出&登录失败处理
2.1 Linux登录连接超时自动退出&登录失败处理
https://blog.csdn.net/shangdi1988/article/details/135145246
https://juejin.cn/post/6976518399299944485?searchId=20240524120327D9BDEFC6C967B49592FF#heading-1
2.1.1 Linux登录连接超时自动退出
直观的体现是xshell 连接超过3分钟不操作,就会断开连接
修改:在
/etc/profile中添加TMOUT=180
vim /etc/profile
# 单位秒,三分钟不活动断开连接
TMOUT=180
使用以下命令生效: source /etc/profile
2.1.2Linux登录失败处理 设置
- 本地登录的失败处理:
- /etc/pam.d/system-auth
- /etc/pam.d/login
- 使用SSH远程登录的失败处理 修改
/etc/pam.d/sshd目前应该只要修改SSH远程登录 也即是 修改
/etc/pam.d/sshd文件即可
远程SSH文件(sshd文件)
命令: vi /etc/pam.d/sshd
# 如果不想限制 root 帐户,可以把 even_deny_root 和root_unlock_time这两个参数去掉。
auth required pam_tally2.so deny=3 unlock_time=600
# 3次锁定,时长 600 秒(10 分钟) ,同时root 用户也限定锁定时长 1200 秒(20 分钟)。
# auth required pam_tally2.so deny=3 unlock_time=600 even_deny_root root_unlock_time=1200
deny=3:当连续登录失败次数达到 3 次时,此选项将触发账户锁定机制,禁止进一步的登录尝试。unlock_time=600:如果账户被锁定,该选项指定了账户锁定的持续时间,单位为秒。在此示例中,账户锁定时间为 600 秒(10 分钟)。even_deny_root:即使是 root 用户登录也会被计入登录失败计数。这表示登录失败计数策略适用于 root 用户。root_unlock_time=1200:如果 root 用户的账户被锁定,该选项指定了 root 账户锁定的持续时间,单位为秒。在此示例中,root 账户锁定时间为 1200 秒(20 分钟)。
本地登录(system-auth文件)
命令:vi /etc/pam.d/system-auth
注意添加的位置,要写在第一行

本地登录(login文件)
命令:vi /etc/pam.d/login

验证
连续输入错误3次,账号被锁,直观体现:输入正确密码也无法连接
ssh -p 22 admin@192.168.110.130
[root@localhost ~]# ssh dell@192.168.110.130
del@192.168.110.130's password: # 故意输入错误密码
Permission denied, please try again.
del@192.168.110.130's password: # 故意输入错误密码
Permission denied, please try again.
del@192.168.110.130's password: # 故意输入错误密码
Permission denied (publickey,password).
解除锁定
# 查看用户登录错误次数
pam_tally2 --user 用户名
# 清空指定用户user的错误登录次数
pam_tally2 --user 用户名 --reset
2.2 Windows 登录连接超时自动退出&登录失败处理
建议启用登录失败处理功能,登录失败5次,账户锁定30分钟,登录连接超时30分钟自动退出。
- win+R 输入【gpedit.msc】进入本地组策略:计算机配置—安全设置—账户锁定策略,设置如下

- 设置屏幕保护程序,可以实现本地登录和远程登录的超时退出。将值设为30分钟

远程登录自动退出策略
win+R 输入【gpedit.msc】进入本地组策略:计算机配置—管理模板—windows组件---远程桌面服务---远程桌面会话主机---会话时间限制中设置:设置超时时间为30分钟。

image-20240524115356835