linux系統是如何實現對用戶的密碼的復雜度的檢查的呢?
系統對密碼的控制是有兩部分組成:
1 cracklib
2 /etc/login.defs
pam_cracklib.so 才是控制密碼復雜度的關鍵文件
/lib/security/pam_cracklib.so
redhat公司專門開發了cracklib這個安裝包來判斷密碼的復雜度
# rpm -qa | grep cracklib
cracklib-2.8.9-3.1 \\檢查軟件是否安裝
cracklib-dicts-2.8.9-3.1 \\密碼字典文件
聲明:login.defs主要是控制密碼的有效期。對密碼進行時間管理
密碼的復雜度的判斷是通過pam模塊控制來實現的,具體的模塊是pam_cracklibpam_cracklib 的參數介紹:
# man pam_cracklib \\手冊分析該模塊的作用
可用參數說明
debug
此選項使模塊的信息寫入到syslog(3),顯示模塊的行為(此選項不寫密碼信息到日志文件)。
type=XXX
默認的動作是模塊使用以下提示時,要求口令:“新的UNIX密碼:“和”重新輸入UNIX密碼:“。默認的Word UNIX可以被替換為這個選項。
retry=N
改變輸入密碼的次數,默認值是1。就是說,如果用戶輸入的密碼強度不夠就退出。可以使用這個選項設置輸入的次數,以免一切都從頭再來。
difok=N
默認值為10。這個參數設置允許的新、舊密碼相同字符的個數。不過,如果新密碼中1/2的字符和舊密碼不同,則新密碼被接受。
difignore=N
多少個字符的密碼應收到difok將被忽略。默認為23
minlen=N
新的最低可接受的大小密碼(加一個,如果沒有禁用學分這是默認值)。除了在新密碼的字符數,貸方(在長度+1),給出了各種人物的不同種類(其他,大寫,小寫,數字)。此參數的默認值是9,它是一個老式的UNIX密碼的字符相同類型的所有好,但可能過低,利用一個MD5的系統增加安全性。請注意,有一個在Cracklib本身長度的限制,一“的方式太短“4極限是硬編碼和定義的限制(6),將不參考minlen檢查對。如果你想允許密碼短短5個字符,你不應該使用這個模塊。
dcredit=N
限制新密碼中至少有多少個數字。
ucredit=N
限制新密碼中至少有多少個大寫字符。
lcredit=N
限制新密碼中至少有多少個小寫字符。
ocredit=N
限制新密碼中至少有多少個其它的字符。
此參數用於強制模塊不提示用戶的新密碼,但以前使用的堆疊模塊提供的密碼之一。
dictpath=/path/to/dict //注:密碼字典,這個是驗證用戶的密碼是否是字典一部分的關鍵
cracklib密碼強度檢測過程:
首先檢查密碼是否是字典的一部分,如果不是,則進行下面的檢查
密碼強度檢測過程–>
新密碼是否舊密碼的回文–>
新密碼是否只是就密碼改變了大小寫–>
新密碼是否和舊密碼很相似–>
新密碼是否太短–>
新密碼的字符是否是舊密碼字符的一個循環 例如舊密碼:123 新密碼:231 –>
這個密碼以前是否使用過
/etc/pam.d/system-auth
auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_succeed_if.so uid < 500 quiet
account required pam_permit.so
password requisite pam_cracklib.so try_first_pass retry=3 \\復雜度驗證
password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
實例:
password required pam_cracklib.so \
difok=3 minlen=15 dcredit=2 ocredit=2
允許有3個新、舊密碼相同字符的
最小長度15位 和至少包含2數字、至少包含2個特殊字符數
password required pam_cracklib.so \
dcredit=-1 ucredit=-1 ocredit=-1 lcredit=0 minlen=8
最小長度為8和至少1位數字,1位大寫字母,和另外1個字符的密碼
注意這個設置對於root沒有作用,
只針對普通用戶修改自己密碼時起作用