本章节设置在登录界面或者通过ssh远程连接到系统时,输入错误密码5次,锁定15分钟。此配置可以很好的用来防范系统密码被暴力破解。
1、环境操作系统
Server 8.3 (衍生自 CentOS 8.3)
2 、修改配置文件/etc/pam.d/system-auth和/etc/pam.d/password-auth
修改内容参考《CIS_CentOS_Linux_8_Benchmark_v1.0.1》5.4.2章节内容
其中deny后面的数字:表示输错对应的次数,达到对应次数之后,账户登录功能会被锁定;unlock_time后面的数字表示锁定的时间(单位:秒),达到锁定时间之后,账户登录功能会解锁。
因为我要将修改固化到Server 8.3系统中,所以我需要修改软件包来实现。/etc/pam.d/system-auth和/etc/pam.d/password-auth属于软件包authselect。下面是我的修改patch
diff --git a/profiles/sssd/password-auth b/profiles/sssd/password-auth
index 3e1886f..7155a1f 100644
--- a/profiles/sssd/password-auth
+++ b/profiles/sssd/password-auth
@@ -1,4 +1,5 @@
auth required pam_env.so
+auth required pam_faillock.so preauth silent deny=5 even_deny_root unlock_time=900
auth required pam_faildelay.so delay=2000000
auth required pam_deny.so # Smartcard authentication is required {include if "with-smartcard-required"}
auth required pam_faillock.so preauth silent {include if "with-faillock"}
@@ -7,6 +8,7 @@ auth required pam_u2f.so cue nouserok
auth [default=1 ignore=ignore success=ok] pam_usertype.so isregular
auth [default=1 ignore=ignore success=ok] pam_localuser.so
auth sufficient pam_unix.so {if not "without-nullok":nullok} try_first_pass
+auth required pam_faillock.so authfail deny=5 even_deny_root unlock_time=900
auth [default=1 ignore=ignore success=ok] pam_usertype.so isregular
auth sufficient pam_sss.so forward_pass
auth required pam_faillock.so authfail {include if "with-faillock"}
@@ -20,7 +22,7 @@ account sufficient pam_usertype.so issyste
account [default=bad success=ok user_unknown=ignore] pam_sss.so
account required pam_permit.so
diff --git a/profiles/sssd/system-auth b/profiles/sssd/system-auth
index 4b4b43e..95b8fff 100644
--- a/profiles/sssd/system-auth
+++ b/profiles/sssd/system-auth
@@ -1,5 +1,6 @@
{imply "with-smartcard" if "with-smartcard-required"}
auth required pam_env.so
+auth required pam_faillock.so preauth silent deny=5 even_deny_root unlock_time=900
auth required pam_faildelay.so delay=2000000
auth required pam_faillock.so preauth silent {include if "with-faillock"}
auth [success=1 default=ignore] pam_succeed_if.so service notin login:gdm:xdm:kdm:xscreensaver:gnome-screensaver:kscreensaver quiet use_uid {include if "with-smartcard-required"}
@@ -12,6 +13,7 @@ auth [default=1 ignore=ignore success=ok] pam_localuser.so
auth [default=2 ignore=ignore success=ok] pam_localuser.so {include if "with-smartcard"}
auth [success=done authinfo_unavail=ignore ignore=ignore default=die] pam_sss.so try_cert_auth {include if "with-smartcard"}
auth sufficient pam_unix.so {if not "without-nullok":nullok} try_first_pass
+auth required pam_faillock.so authfail deny=5 even_deny_root unlock_time=900
auth [default=1 ignore=ignore success=ok] pam_usertype.so isregular
auth sufficient pam_sss.so forward_pass
auth required pam_faillock.so authfail {include if "with-faillock"}
@@ -25,7 +27,7 @@ account sufficient pam_usertype.so issyste
account [default=bad success=ok user_unknown=ignore] pam_sss.so
account required pam_permit.so
至于为什么是修改的sssd/目录下的内容,通过authselect命令可以看出一二。
需要注意的是1)修改了源码包、编译之后,直接安装是看不到修改内容!我重新打iso之后可以看到修改内容。2)此处只是限制了账户登录,从其他用户通过su命令切换时并不受影响
3 系统对外提供的接口——faillock
既然要判断用户输入错误的次数,那么系统中肯定有一个地方用来记录当前输入错误的次数,这个数据默认记录在/var/run/faillock。
3.1 faillock
Linux系统提供了一个查看和修改认证失败记录文件的工具——faillock。
NAME
faillock - Tool for displaying and modifying the authentication failure record files
SYNOPSIS
faillock [--dir /path/to/tally-directory] [--user username] [--reset]
3.1.1 不间断输错密码5次,系统中认证失败记录情况
开始时,执行faillock命令,因为是正确登录到系统,所以此处没有内容。我从另一个终端通过ssh连接到主机,故意输错密码,输错一次,在之前终端执行一次faillock查看系统中认证失败记录数据,上面这张图记录的是输错3次密码的情况。
因为在第二节中设置的规则是输错5次之后,登录账户将锁定,下面我们继续实验,这图是输错5此的情况。此时账户登录已经锁定,输入正确密码也不能登录到系统。
3.1.2 锁定时间15分钟之后,输入正确密码,系统中认证失败记录情况
过了锁定时间之后,输入正确密码登录到系统,查看登录失败记录没有变化。此时退出系统,再次验证输入错误密码,然后查看faillock信息,如下:
记录文件中Vaild列除了“V”表示的有效之外,还出现了“I”表示的无效。此处只是看文章可能不会很清楚,自己动手验证一下,就会明白!
3.1.3 执行faillock清除系统中认证失败记录
[root@bogon faillock]# faillock
loongson:
When Type Source Valid
2021-08-24 09:54:27 RHOST x.x.x.x V
2021-08-24 09:26:27 RHOST x.x.x.x I
2021-08-24 09:26:35 RHOST x.x.x.x I
2021-08-24 09:33:44 RHOST x.x.x.x I
2021-08-24 09:33:52 RHOST x.x.x.x I
2021-08-24 09:54:48 RHOST x.x.x.x V
2021-08-24 09:55:10 RHOST x.x.x.x V
[root@bogon faillock]# faillock --reset
[root@bogon faillock]# faillock
loongson:
When Type Source Valid
[root@bogon faillock]#
3.1.4 输入错误4次,输入正确密码,系统中认证失败记录情况
这一章我要验证的是,输入4次错误密码之后,输入1次正确密码登录到系统。系统的认证失败记录会不会被清0,重新开始计数。现在我退出登录,然后输入错误2次密码之后,输入正确密码,验证能否登录到系统
结论:登录错误4次之后,输入正确密码登录到系统并没有将登录失败次数清0!(需要注意的是:这个结论的前提是按照第二章配置文件配置的结果)