本章節設定在登入界面或者通過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清除系統中認證失敗記錄
[[email protected] 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
[[email protected] faillock]# faillock --reset
[[email protected] faillock]# faillock
loongson:
When Type Source Valid
[[email protected] faillock]#
3.1.4 輸入錯誤4次,輸入正确密碼,系統中認證失敗記錄情況
這一章我要驗證的是,輸入4次錯誤密碼之後,輸入1次正确密碼登入到系統。系統的認證失敗記錄會不會被清0,重新開始計數。現在我登出,然後輸入錯誤2次密碼之後,輸入正确密碼,驗證能否登入到系統
結論:登入錯誤4次之後,輸入正确密碼登入到系統并沒有将登入失敗次數清0!(需要注意的是:這個結論的前提是按照第二章配置檔案配置的結果)