linux用戶登錄失敗鎖定通過pam的faillock模塊實現,具體步驟為:1.確認安裝pam;2.編輯/etc/pam.d/目錄下的login、sshd、system-auth等文件,在指定位置插入auth和account配置行并設置deny、unlock_time等參數;3.如需鎖定root用戶,添加even_deny_root參數;4.配置ssh時確保usepam啟用并重啟sshd服務;5.測試配置后可通過faillock命令查看或解鎖賬戶;6.日志記錄在/var/log/auth.log或secure中。此外,還可結合強密碼、ssh密鑰登錄、fail2ban、ip限制及雙因素認證等措施防止暴力破解。
linux用戶登錄失敗鎖定,主要是通過PAM(Pluggable Authentication Modules)的faillock模塊來實現的。簡單來說,就是配置這個模塊,讓系統記錄登錄失敗的次數,超過一定閾值就鎖定賬戶,防止暴力破解。
faillock模塊配置方法
-
確認是否安裝PAM: 大部分Linux發行版默認安裝了PAM,但最好確認一下。可以通過rpm -qa | grep pam(redHat/centos)或dpkg -l | grep libpam-modules(debian/ubuntu)來檢查。如果沒安裝,用對應的包管理器安裝即可。
-
編輯PAM配置文件: 關鍵在于修改/etc/pam.d/目錄下的相關文件。常見的需要修改的文件包括:
- /etc/pam.d/login:控制本地控制臺登錄。
- /etc/pam.d/sshd:控制SSH登錄。
- /etc/pam.d/system-auth 和 /etc/pam.d/password-auth(RedHat/CentOS):通常這兩個文件會被其他服務引用,修改它們可以影響多個服務的認證行為。
使用vi或其他編輯器打開這些文件,找到auth required pam_unix.so try_first_pass nullok 這一行(類似即可,不同系統可能略有差異)。
在這行之前,插入以下兩行:
auth required pam_faillock.so preauth audit silent deny=3 unlock_time=600 auth [success=end bad=die] pam_unix.so
然后在account required pam_unix.so 這一行之后,插入:
account required pam_faillock.so authfail audit deny=3 unlock_time=600
- deny=3:表示允許嘗試3次登錄失敗。
- unlock_time=600:表示鎖定時間為600秒(10分鐘)。
- preauth:在認證之前運行,記錄失敗嘗試。
- authfail:在認證失敗時運行,遞增失敗計數。
- audit:啟用審計日志。
- silent:不顯示錯誤消息。
注意: RedHat/CentOS系統,/etc/pam.d/system-auth 和 /etc/pam.d/password-auth 文件可能包含sufficient pam_succeed_if.so uid >= 1000 quiet 這樣的行,表示非root用戶可以繞過某些認證步驟。 如果存在這樣的行, pam_faillock.so 的配置應該放在這些行之前,確保對所有用戶生效。
-
配置SSH(如果需要): 如果你想通過SSH鎖定用戶,需要編輯/etc/pam.d/sshd 文件,添加和上面類似的配置。 確保UsePAM yes 在/etc/ssh/sshd_config 中被啟用。 修改完/etc/ssh/sshd_config后,需要重啟sshd服務:systemctl restart sshd。
-
測試配置: 修改完配置文件后,最好測試一下。 嘗試用錯誤的密碼登錄幾次,然后看看用戶是否被鎖定。
-
解鎖賬戶: 如果賬戶被鎖定,可以使用faillock –user 命令查看鎖定狀態。 要解鎖賬戶,可以使用faillock –user –reset 命令。 root用戶可以解鎖任何賬戶,普通用戶只能解鎖自己的賬戶。
-
日志查看: 登錄失敗的記錄通常會記錄在/var/log/auth.log 或 /var/log/secure 文件中,具體取決于你的Linux發行版。
Faillock配置后,為什么root用戶仍然可以登錄?
faillock默認情況下不會鎖定root用戶。 這是為了防止管理員把自己鎖在系統之外。 如果你想鎖定root用戶,需要在/etc/pam.d/ 的相關文件中,在pam_faillock.so 的配置中添加even_deny_root 參數。 例如:
auth required pam_faillock.so preauth audit silent deny=3 unlock_time=600 even_deny_root account required pam_faillock.so authfail audit deny=3 unlock_time=600 even_deny_root
但是,強烈建議不要鎖定root用戶,除非你有非常充分的理由,并且非常清楚自己在做什么。 鎖定root用戶可能會導致系統無法維護,甚至無法啟動。
如何自定義faillock的鎖定策略?
除了上面提到的deny 和 unlock_time 參數,pam_faillock.so 還有很多其他的參數可以自定義鎖定策略:
- fail_interval=seconds:設置在多少秒內嘗試登錄失敗才會被記錄。 默認值是禁用。
- auth_interval=seconds:設置在多少秒內成功登錄后,失敗計數會被重置。 默認值是禁用。
- root_unlock_time=seconds:設置root用戶被鎖定的時間。 如果even_deny_root 被啟用,這個參數才生效。
- admin_group=groupname:指定一個組,該組的成員可以使用faillock –reset 命令解鎖任何用戶的賬戶。
這些參數可以在/etc/pam.d/ 的相關文件中進行配置。 例如,要設置root用戶被鎖定300秒,并且只有admin組的成員才能解鎖所有賬戶,可以這樣配置:
auth required pam_faillock.so preauth audit silent deny=3 unlock_time=600 even_deny_root root_unlock_time=300 admin_group=admin account required pam_faillock.so authfail audit deny=3 unlock_time=600 even_deny_root root_unlock_time=300 admin_group=admin
配置完后,記得重啟相關服務,例如sshd。
除了faillock,還有沒有其他方法可以防止暴力破解?
除了faillock,還有一些其他的安全措施可以用來防止暴力破解:
-
使用強密碼: 這是最基本的安全措施。 密碼應該足夠長,包含大小寫字母、數字和符號,并且不要使用容易被猜到的單詞或短語。
-
禁用密碼登錄,使用SSH密鑰登錄: SSH密鑰登錄比密碼登錄更安全,因為密鑰更難被破解。 禁用密碼登錄可以大大降低被暴力破解的風險。
-
使用Fail2ban: Fail2ban是一個入侵防御框架,可以監控系統日志,自動屏蔽惡意IP地址。 它可以與faillock 結合使用,提供更強大的安全保護。
-
限制SSH登錄IP地址: 如果你知道只有特定的IP地址需要訪問SSH服務,可以在防火墻上限制只允許這些IP地址登錄。
-
使用雙因素認證(2FA): 2FA可以提供額外的安全保護,即使密碼被破解,攻擊者也無法登錄。
這些安全措施可以根據你的實際需求進行組合使用,以提高系統的安全性。