1、口令锁定策略
规则描述:设置口令认证失败后的锁定策略 为了保障用户系统的安全,建议用户设置口令出错次数的阈值,以及由于口令尝试被锁定用户的自动解锁时间。用户锁定期间,任何输入被判定为无效,锁定时间不因用户的再次输入而重新计时;解锁后,用户的错误输入记录被清空。通过上述设置可以有效防范口令被暴力破解,增强系统的安全性。
修改方法:例如设置口令最大的出错次数 5 次,系统锁定后的解锁时间为 180 秒 在配置文件/etc/pam.d/system-auth 和/etc/pam.d/password-auth 中添加
auth required pam_faillock.so preauth audit silent deny=5 unlock_time=180 auth [success=1 default=bad] pam_unix.so auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=180 auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=180
pam_faillock.so 配置项说明
- authfail:捕获用户登录失败的事件
- deny=5:用户连续登录失败次数超过 5 次即被锁定
- unlock_time=180:普通用户自动解锁时间为 180 秒(即 3 分钟)
- even_deny_root:同样限制 root 帐户
操作步骤截图
修改前
修改后
验证测试
centos用户ssh登录多次输错密码
faillock命令查看锁定情况
faillock --user username --reset解锁操作
2、口令生存期
出于系统安全性考虑,建议设置口令有效期限,且口令到期前通知用户更改口令。
规则描述:该设置确定在系统要求用户更改某个密码之前可以使用改口令的期限及口令过期提前告警时间(以天为单位),此策略使得攻击者用来破解用户密码以及访问网络资源的时间受到限制
审计描述:设置检查配置文件/etc/login.defs 的选项:应设置 PASS_MAX_DAYS 的值大于等于 10 且小于等于 90,PASS_MIN_DAYS 的值为 10, PASS_WARN_AGE(口令过期提前时间)的值为 7,同时还要检查文件/etc/shadow 中有口令且可登录用户(root 用户除外)的口令保持有效的最大天数为大于等于 10 且小于等于 90,两次修改口令之间所需的最小天数为 10,口令失效告警时间为 7。
修改建议:设置配置文件/etc/login.defs 的选项:PASS_MAX_DAYS 90(10~90), PASS_MIN_DAYS 10, PASS_WARN_AGE 7,同时对已有用户还需要修改/etc/shadow 文件中有密码且可登录用户(root 用户除外)的口令保持有效的最大天数为大于等于 10 且小于等于 90,两次修改口令之间所需的最小天数为 10,口令失效告警时间为 7
实现:口令有效期的设置通过修改/etc/login.defs 文件实现
login.defs 配置项说明
- PASS_MAX_DAYS 口令最大有效期:建议设置为 90
- PASS_MIN_DAYS 两次修改口令的最小间隔时间:建议设置为 10
- PASS_WARN_AGE 口令过期前开始提示天数:建议设置为 7
说明:login.defs 是设置用户帐号限制的文件,可配置口令的最大过期天数、最大长度约束等。该文件里的配置对 root 用户无效。如果/etc/shadow 文件里有相同的选项,则以/etc/shadow 配置为准,即/etc/shadow 的配置优先级高于/etc/login.defs。口令过期后用户重新登录时,提示口令过期并强制要求修改,不修改则无法进入系统。
sed -i '/^PASS_MAX_DAYS/cPASS_MAX_DAYS 90' /etc/login.defs sed -i '/^PASS_MIN_DAYS/cPASS_MIN_DAYS 10' /etc/login.defs
修改前
修改后
3、口令复杂度
规则描述:该设置确定用户账户口令包含的最少字符数
审计描述:执行命令:cat /etc/pam.d/password-auth /etc/pam.d/system-auth | grep -v '^\s*#' | grep password | grep pam_pwquality.so
检查是否存在以下内容:password requisite pam_pwquality.so try_first_pass retry=3 minlen=8 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1
执行命令:cat /etc/security/pwquality.conf
检查是否存在以下内容:minlen = 8 dcredit = -1 ucredit = -1 ocredit = -1 lcredit = -1
修改建议:编辑/etc/pam.d/password-auth 和 /etc/pam.d/system-auth 文件,分别修改包含 minlen 的 pam_pwquality.so 模块如下:password requisite pam_pwquality.so try_first_pass retry=3 minlen=8 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1 或编辑/etc/security/pwquality.conf 文件,修改以下内容:minlen = 8 dcredit = -1 ucredit = -1 ocredit = -1 lcredit = -1
备注:当配置文件/etc/pam.d/password-auth 和/etc/pam.d/system-auth 未配置 minlen、dcredit、ucredit、ocredit、lcredit 时,/etc/security/pwquality.conf 文件设置生效
编辑/etc/security/pwquality.conf 文件,修改以下内容:
- minlen = 8 口令长度至少包含 8 个字符
- dcredit = -1 口令包含N个数字
- ucredit = -1 口令包含N大写字母
- ocredit = -1 口令包含N个特殊字符
- lcredit = -1 口令包含N个小写字母
- N<0可以自行man pwquality.conf查看解释
cat >>/etc/security/pwquality.conf << EOF minlen = 8 dcredit = -1 ucredit = -1 ocredit = -1 lcredit = -1 EOF
4、删除无关账号
规则描述:删除无关账号
审计描述:检查/etc/shadow文件,确认是否有以下用户(adm|lp|sync|halt|news|nfsnobody|mail|uucp|operator|games|gopher|ftp|nobody|nobody4|noaccess|listen|webservd|rpm|dbus|avahi|mailnull|smmsp|nscd|vcsa|rpc|rpcuser|nfs|sshd|pcap|ntp|haldaemon|distcache|apache|webalizer|squid|xfs|gdm|sabayon|named)
若有则检查文件中是否存在系统中未锁定的无关用户(用户密码字段列不是以*或者!开头)和需要锁定和删除的shell域设置的用户(用户shell域不是/bin/false或/sbin/nologin),均不存在则pass
修改建议:删掉不符规范的用户,执行:userdel username。或者编辑/etc/passwd文件,修改用户的密码字段和shell域。
egrep "^(adm|lp|sync|halt|news|nfsnobody|mail|uucp|operator|games|gopher|ftp|nobody|nobody4|noaccess|listen|webservd|rpm|dbus|avahi|mailnull|smmsp|nscd|vcsa|rpc|rpcuser|nfs|sshd|pcap|ntp|haldaemon|distcache|apache|webalizer|squid|xfs|gdm|sabayon|named):" /etc/passwd 2>/dev/null|awk -F':' '($7 != "/bin/false" && $7 != "/sbin/nologin") {print $1":"$7}'
返回的结果中含有 sync:/bin/sync halt:/sbin/halt
解决方法
userdel sync userdel halt
5、禁止存在空密码的帐号
安全起见,在/etc/passwd 中用户的密码是被保护的状态,即使用了*号来隐藏。而实际的密码内容是加密后保存在/etc/shadow 文件中,我们确认是否存在空口令的用户就确认该文件中密码对应字段的长度是否为 0, 如果为 0 则证明该用户密码为空。通过使用命令来查找是否存在该字段长度为 0 的用户
awk -F: 'length($2)==0 {print $1}' /etc/shadow
passwd -d 将用户密码设置为空