標籤:linux 密碼 複雜度 cracklib login.defs
我們在使用linux系統設定密碼的時候,經常遇到這樣的問題,系統提示:您的密碼太簡單,或者您的密碼是字典的一部分。那麼系統是如何?對使用者的密碼的複雜度的檢查的呢?
系統對密碼的控制是有兩部分(我知道的)組成:
1 cracklib
2 login.defs
聲明:login.defs主要是控制密碼的有效期間。對密碼進行時間管理。此處不細談。
login.defs --shadow password suite configuration
pam_cracklib.so 才是控制密碼複雜度的關鍵檔案。
redhat公司專門開發了cracklib這個安裝包來判斷密碼的複雜度。
可以rpm -ql cracklib查看。
密碼的複雜度的判斷是通過pam模組控制來實現的,具體的模組是pam_cracklibpam_cracklib 的參數介紹:
debug
該選項使用模組將資訊寫入到日誌(3)來指示組件的行為(這個選項不會記錄密碼資訊到記錄檔)。
type=XXX
預設的操作是為模組,當請求密碼時,該模組預設操作是使用以下提示:“新的UNIX密碼:”和“重新輸入密碼UNIX”。此選項就是替換預設單詞的UNIX。
retry=N
提示使用者最多N次會返回錯誤。預設值是1
difok=N
此參數會改變預設新密碼中必須有5個字元不同於舊密碼中字元,此外,如果新密碼中有一半字元不同於舊密碼,那麼就可以使用新密碼。
difignore=N
密碼在少於多少個字元時,difok將被忽略,預設是23。
minlen=N
新密碼可接受的最小長度。
dcredit=N
(N < 0) 新密碼最小數字長度。
ucredit=N
(N < 0) 新密碼最小大寫字母長度。
lcredit=N
(N < 0) 新密碼最小小寫字母長度。
ocredit=N
(N < 0) 新密碼最小其他字元長度。
use_authtok
此參數用於強制不提示使用者輸入新的密碼而由以前堆積的密碼模組所提供。
dictpath=/path/to/dict
Path to the cracklib dictionaries.
dictpath=/path/to/dict //註:密碼字典,這個是驗證使用者的密碼是否是字典一部分的關鍵。
Path to the cracklib dictionaries.
例子:
在linux下設定密碼複雜度辦法:
(1)修改/etc/login.defs檔案
PASS_MAX_DAYS 90 #密碼最長到期天數
PASS_MIN_DAYS 80 #密碼最小到期天數
PASS_MIN_LEN 10 #密碼最小長度
PASS_WARN_AGE 7 #密碼到期警告天數
(2)修改/etc/pam.d/system-auth檔案
找到 password requisite pam_cracklib.so這麼一行替換成如下:
password requisite pam_cracklib.so retry=5 difok=3 minlen=10 ucredit=-1 lcredit=-3 dcredit=-3 dictpath=/usr/share/cracklib/pw_dict
參數含義:
嘗試次數:5 最少不同字元:3 最小密碼長度:10 最少大寫字母:1 最少小寫字母:3 最少數字:3 密碼字典:/usr/share/cracklib/pw_dict
注意:以上設定對root使用者無效。修改後你可能會立即測試,會發現以上設定無效。你可以建立賬戶,並進入該賬戶。
useradd test
passwd test
su - test
此時你發現設定起作用了。
Linux 密碼複雜度