知识宝库在此藏,一键关注获宝藏
这是一份根据等保条款整理出的对应知识点,内赋一些实验数据来映照相应条款,例如绕过口令验证登录,密码复杂度、登录失败功能的安装,SSL远程测试,使用加密函数对数据加密等,基本涵盖了能力验证将会考察的知识点(针对单独能力验证解析的可以看这篇文章)。
一、身份鉴别
a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
1. 身份标识和鉴别
MySQL的身份标识为"username+host",鉴别通过 "username + host + password"来进行登录验证。
SELECT user, host, authentication_string, account_locked FROM mysql.user;
例如上图'root'@'%' 与 'root'@'127.0.01'是两个不同的用户,虽然均采用root用户名登录,但口令不相同,权限也可不相同。
2. 口令复杂度
第一个方面即实际的口令是否具有一定的复杂度,也即口令至少8位,且包含大写字母、小写字母、数字、特殊字符这四类字符种的三种,且口令不包含简单排列规律,如admin!@#123此类弱口令。当authentication_string 值为空时,可不需要口令进行登录,例如上图test@% 用户是一个可空口令登录的账户。
show variables like 'validate_password%';
validate_password_policy 类型:
这个参数用于控制validate_password的验证策略:
0-->low 1-->MEDIUM 2-->strong
●当 validate_password_policy=0 时 这个时候只对密码长度做验证,也就是说它和validate_password_length一起配合起来完成用户验证。
这种情况下只要密码达到validate_password_length指定的长度后就行。
●当valdiate_password_policy=1时 这个时候首先要满足的是validate_password_policy=0 时的验证要求。然后现去验证密码中的数字个数,大小写个数,特殊字符个数。这些又分别由validate_password_number_count,validate_password_mixed_case_count,validate_password_special_char_count 这几个参数来控制。
●validate_password_policy=2 这个时候它首先是要满足前面说到的0、1 的要求;然后它还追加了一个,对于密码中任意连续4个(或4个让上)字符不得是字典中的单词。
0 or LOW
|
Length
|
1 or MEDIUM
|
Length; numeric, lowercase/uppercase, and special characters
|
2 or STRONG
|
Length; numeric, lowercase/uppercase, and special characters; dictionary file
|
validate_password_length:
密码长度的最小值(这个值最小要是4)。
validate_password_number_count:
密码中数字的最小个数。
validate_password_mixed_case_count:
大小写字母(同时)的最小个数。
validate_password_special_char_count:
特殊字符的最小个数。
validate_password_dictionary_file:
字典文件
3. 口令的定期更换
select user,host,password_last_changed from mysql.user;
![等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库 等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库]()
查看全局变量 default_password_lifetime
show global variables like 'default_password_lifetime';
查看user表中的password_lifetime 字段
select user,host,password_lifetime from mysql.user;
![等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库 等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库]()
● 扩展学习
1. 跳过密码验证(之前能力验证有考察过)
当我们忘记mysql用户口令时,可以设置跳过密码验证
在配置文件(Linux系统一般为/etc/my.cnf)中添加如下字段:
在[mysqld]下添加 skip-grant-tables
update mysql.user set authentication_string='' where user='root' and host='%';
再删除 skip-grant-tables,重启mysql,空口令登录root账户后修改
alter user 'root'@'%' identified by 'newpassword';
注意:直接在跳过密码验证的情况下,无法直接使用alter来修改用户口令
![等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库 等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库]()
2. MySQL用户
2.1 用户身份标识
MySQL数据库对于用户的标识和其他数据库有些不同,是通过"username + host"来标识用户。
这两个用户的用户名虽然都是root,但其实是两个不同的用户,其密码也是单独设置的。
查询当前登录账户,也可以看到用户的标识组成为username+host:
![等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库 等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库]()
2.2 登录匹配机制
既然用户的标识事两个字段的组合,那么匹配的时候也要这两个字段都匹配上了才行。当客户端对MySQL发起连接后,MySQL会先对user表进行排序,然后从第一行开始,逐行传入的host、username进行匹配,当匹配到了某一行之后,就不往下继续匹配了。(如果任何一行都无法匹配,则登录失败)
此时,再对传入的口令和存储的口令进行比对,如果一致,那么该行即为这次登录后所使用的行(用户身份标识),如果不一致,则登录失败。
2.3 查询当前用户
MySQL中存在user()函数和current_user()函数。
user() 函数会显示你当前的登录用户具体是使用了什么用户名和什么ip地址去进行登录的。(注:ip地址是指链接数据库的客户端的ip地址,不是自己设置的值)
![等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库 等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库]()
这里代表ip地址为本地的客户端上,使用用户名root对MySQL数据库进行了连接。
current_user() 函数会显示你最终使用的用户身份(也就是最后匹配到的那一行),例子:
![等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库 等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库]()
![等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库 等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库]()
也就是,最后在User表中匹配到了host字段为%、user为root的那一行,以"root@%"的用户身份登录了MySQL数据库。
3. 口令复杂度策略安装
MySQL5.6.6版本之后增加了密码强度验证插件validate_password,相关参数设置的较为严格。使用了该插件会检查设置的密码是否符合当前设置的强度规则,若不满足则拒绝设置。
我们可以去mysql安装目录下的/lib/plugin 目录下查看是否有该插件
添加: install plugin validate_password soname 'validate_password.so';
插件安装后,使用 show plugins; 查看是否启用成功
mysql> uninstall plugin validate_password;
![等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库 等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库]()
首先无论是全局变量default_password_lifetime 还是 User表中的字段password_lifetime,它们的单位都是天。
当password_lifetime为null的时候,则代表该用户当前口令的有效期使用的是全局变量default_password_lifetime的值。
当password_lifetime为一个具体的值的时候,则代表该用户当前口令的有效期不使用全局变量default_password_lifetime 的值,使用的是字段password_lifetime的值。
对于default_password_lifetime 和password_lifetime而言,值为0则代表有效期为永远。
通过工具可以直观看到对应密码过期策略的设置情况,像root账户采用default_password_lifetime,test 账户采用 password_lifetime
![等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库 等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库]()
![等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库 等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库]()
此时mysql 的配置策略如下
![等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库 等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库]()
![等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库 等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库]()
SET GLOBAL default_password_lifetime=1;
密码到期后,会要求你强制更改,不然无法使用相应的命令
使用navicat远程工具会弹出修改口令的弹窗,强行设置新口令
![等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库 等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库]()
b)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施
1. 登录失败处理功能
原文始发于微信公众号(等保不好做啊):等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库
评论