测评要求参考《信息安全技术 网络安全等级保护测评要求GB/T 28448一2019》
测评方法以及配置整改为个人工总结,仅供参考不适用全部操作系统,有不合理的地方大家多多指出,欢迎交流。
a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;
b)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施;
c)当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听;
d)应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现。
测评方法和预期:
1)用户登录需输入用户名和密码;
2)用户具备唯一性;(即用户名或用户ID不能重复,这个不用多说,windows自动实现,默认符合。)
3)尝试使用空口令登录,未成功;
4)结果如下:
a)复杂性要求已启用;
b)密码长度最小值:长度最小值至少为8位;
c)密码长度最长使用期限:不为0;
d)密码最短使用期限:不为0;
e)强制密码历史:至少记住5个密码以上。
我这里以windows2016服务器为测试案例,windows服务器基本上是大同小异。
测评方法:
上机检查:
1、用户登录需输入用户名和密码
2、用户ID不能重复,这个不用多说,windows自动实现,默认符合。
3、检查密码复杂度要求是否启用。
输入gpedit.msc或secpol.msc
,进入
计算机配置---Windows设置---安全设置---帐户策略---密码策略
密码复杂度要求说明可以双击密码必须符合复杂性要求,查看说明
上机检查:
以CentOS为例
查看是否存在空口令用户
在/etc/passwd中用户的密码是被保护的状态,即使用了*号来隐藏。而实际的密码内容是加密后保存在/etc/shadow文件中了,我们确认是否存在空口令的用户就确认该文件中密码对应字段的长度是否为0,
如果为0则证明该用户密码为空。
具体看下表
uangianlap:$6$oX3cr.x9IJD6Qx1J$17EXp1cHc5cJWECPz36DiUUFY9yzcZdN48AUFAgu6TGT7gpcvuTD/cfatPZCdeGCHUd7BWsMDlBRB2J89N8su1:17017:5:180:7:30:23590:
可以看到被“:”分隔出总共有9个字段,下面简要说说这些字段的含义。
(1)uangianlap: 系统用户名(必须在系统中存在)
(2)$6$oX3c...: 加密后的用户密码
PS:
如果为空,则对应用户没有口令,登录时不需要口令;
星号代表帐号被锁定;
双叹号表示这个密码已经过期了;
$6$开头的,表明是用SHA-512加密;
$1$表明是用MD5加密;
$5$ 是用 SHA-256加密;
$2a$ 和 $2y$表示Blowfish算法
(3)17017 :最近一次修改密码的时间。即密码的生日。这个数字代表天数(即距1970年1月1日的天数)
(4)5 :密码的最短“寿命”(单位为天),这里定了5天,即说明这个用户密码至少得“存活“5天吧?换句话说也就是这5天内不再允许你修改自己的密码了。
(5)180 :密码的最长“寿命” (单位为天),即180天内密码都是有效的,但180天之后用户必须更新其密码。
(6)7 :密码“寿命”到时提前几天警告用户。这里的7天表示180天的寿命前7天即第173天开始给用户警告。
(7)30 :我这里把这个理解为密码失效后的一个缓冲时间。即180天过后的30天之内,密码还是有效的(前提是用户没有拿出),但是若用户要重新登录的话,则要求用户设置新密码了。数字0表示立即失效,如果是-1则代表密码永远不会失效。
(8)23590 :帐号失效日期(单位为天,距1970年1月1日的天数)。这个日期后用户帐号将失效,而不会理会密码的问题。
(9) :第9个字段,默认留空,暂时没有意义。是系统保留的一个字段,以备后用。
系统对密码的控制是有两部分(我知道的)组成:
1 cracklib
2 login.defs
声明:login.defs主要是控制密码的有效期。对密码进行时间管理。此处不细谈。
login.defs --shadow password suite configuration
pam_cracklib.so或pam_pwquality.so才是控制密码复杂度的关键文件。
首先明白login.defs、system-auth和shadow文件的关联。
一、login.defs
login.defs是设置新用户帐号限制的文件,在这里我们可配置密码的最大过期天数,密码的最大长度约束等内容(该文件里的配置对root用户无效)。
如果/etc/shadow文件中配置参数为账户既有的配置,如有相同功能的字段配置,则以/etc/shadow里既有的设置为准。
而system-auth中配置的是对Linux登录PAM验证机制,分阶段逐行匹配配置信息,执行认证成功或失败的操作。
检查/etc/login.defs文件,重点关注PASS_MAX_DAYS口令使用最长天数应合理。
(1)修改/etc/login.defs文件
PASS_MAX_DAYS 90 #密码最长过期天数
PASS_MIN_DAYS 80 #密码最小过期天数
PASS_MIN_LEN 10 #密码最小长度
PASS_WARN_AGE 7 #密码过期警告天数
二、/etc/pam.d/system-auth
[[email protected] pam.d]# cat system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth required pam_faildelay.so delay=2000000
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
account required pam_permit.so
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
在配置前了解system-auth文件的结构:
auth 组件:认证接口,要求并验证密码。
account组件:检测是否允许访问,检测账户是否过期或在末端时间内能否登陆。
password组件:设置并验证密码。
session组件:配置和管理用户 session。
当前组件对配置的限制程度:
required:该模块必须success才能进行继续。即使失败,用户也不会立刻获知,直到所有相关模块完成。
requisite:该模块必须success才能使认证继续进行。
suffifient:如果失败则忽略。
optinal:忽略结果,不管是否失败。
密码复杂度要求策略需在password组件策略下修改pam_pwquality.so或pam_cracklib.so所在行。
password requisite pam_cracklib.so retry=5 difok=3 minlen=8 dcredit=-1
(此处有个回车请删除)
ucredit=-1 lcredit=-1 ocredit=-1 dictpath=/usr/share/cracklib/pw_dict
释义:修改密码可尝试5次,difok为与旧口令不同的字符个数3个,minlen为新口令最短长度8,dcredit为数字最少1位,ucredit为大写字母最少1位,lcredit为小写字母最少1位,ocredit为特殊字符最少1位(credit配置中负数为最少有X位,正数为最多有X位),启用弱口令检查字典pw_dict。
注意:以上设置对root用户无效。修改后你可能会立即测试,会发现以上设置无效。你可以新建账户,并进入该账户(即对新建用户生效)效果如下:。
#删除test用户
userdel -rf test
cat /etc/pam.d/system-auth
Debian / Ubuntu:修改文件 # vi /etc/pam.d/common-password
CentOS / RHEL / RedHat / Fedora 修改文件 # vi /etc/pam.d/system-auth
在 password sufficient pam_unix.so use_authtok md5 shadow remember=10
在相应行的后面添加 remember=10,而不是添加一行!
SUSE比较恶心,找了半天才找到。man pw_check
在/etc/security/pam_pwcheck文件中添加remember=5
passwd: nullok use_cracklib remember=5
今天就先到这里,欢迎关注公众号