本文目的是在於限制用戶修改自己密碼或root修改自己密碼時,給出長度,復雜度等等限制,防止弱密碼被黑客等不法分子破解
服務器系統:centos 6.5 centos 6.8
1.密碼有效期
cp /etc/login.defs /etc/login.defs.bak
vim /etc/login.defs # Password aging controls: # # PASS_MAX_DAYS Maximum number of days a password may be used. # PASS_MIN_DAYS Minimum number of days allowed between password changes. # PASS_MIN_LEN Minimum acceptable password length. # PASS_WARN_AGE Number of days warning given before a password expires. # PASS_MAX_DAYS 90 PASS_MIN_DAYS 80 PASS_MIN_LEN 10 PASS_WARN_AGE 7
2.密碼復雜度
之所以選擇passwdqc,是因為網上找了一下,發現絕大多數的linux密碼強度策略限制都只針對非root用戶,而passwdqc可以限定到root用戶。
cp /etc/pam.d/system-auth-ac /etc/pam.d/system-auth-ac.bak
vim /etc/pam.d/system-auth 。。。。。。 #password requisite pam_cracklib.so try_first_pass retry=3 type= ##注釋這一行,添加下一行 password requisite /lib/security/$ISA/pam_passwdqc.so min=disabled,24,16,12,10 passphrase=3 max=40 enforce=everyone retry=3 similar=deny password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok password required pam_deny.so
也可以使用下面配置:
規則解釋如下:
1)只包含一種字符的密碼,拒絕(大小寫,數字,特殊字符分別為4種字符)
2)只包含兩種字符的密碼,拒絕
3)如果密碼中被識別出了常用的單詞,那么最小長度就必須為12位。常用單詞的最小識別長度為3.(由passphrase=3制定)
4)包含三種字符的密碼,最小長度為8位
5) 包含四種字符的密碼,最小長度為8位
6)如果發現本次修改的密碼跟老密碼有4個substring的長度類似,就認為是弱密碼。(match=4 similar=deny)
7) 這個策略對所有用戶都生效。(enforce=everyone )
8)默認情況下,對於輸入的密碼,如果第一個字母是大寫字母,或者最后一個字母為數字,則不會計入密碼字符的種類。比如:Fuck1234,由於第一個F是大寫字母,所以會被認為,該密碼只有小寫字母和數字兩種字符。這個非常奇怪,我也不知道原因是什么。我們用disable_firstupper_lastdigit_check 禁止了這種識別。
3.測試
echo "mhokwyaofnrd"|passwd --stdin root ##僅僅小寫,不通過 echo "IEJVRRzfdHPI"|passwd --stdin root ##大寫,小寫,不通過 echo "cyd******Ab8C"|passwd --stdin root ##大小寫,特殊字符,通過。 echo "Jes&us*****12"|passwd --stdin root ##通過
如果出現下面模塊不支持的情況
本文目的是在於限制用戶修改自己密碼或root修改自己密碼時,給出長度,復雜度等等限制,防止弱密碼被黑客等不法分子破解
服務器系統:centos 6.5 centos 6.8
1.密碼有效期
cp /etc/login.defs /etc/login.defs.bak
vim /etc/login.defs # Password aging controls: # # PASS_MAX_DAYS Maximum number of days a password may be used. # PASS_MIN_DAYS Minimum number of days allowed between password changes. # PASS_MIN_LEN Minimum acceptable password length. # PASS_WARN_AGE Number of days warning given before a password expires. # PASS_MAX_DAYS 90 PASS_MIN_DAYS 80 PASS_MIN_LEN 10 PASS_WARN_AGE 7
2.密碼復雜度
之所以選擇passwdqc,是因為網上找了一下,發現絕大多數的linux密碼強度策略限制都只針對非root用戶,而passwdqc可以限定到root用戶。
cp /etc/pam.d/system-auth-ac /etc/pam.d/system-auth-ac.bak
vim /etc/pam.d/system-auth 。。。。。。 #password requisite pam_cracklib.so try_first_pass retry=3 type= ##注釋這一行,添加下一行 password requisite /lib/security/$ISA/pam_passwdqc.so min=disabled,24,16,12,10 passphrase=3 max=40 enforce=everyone retry=3 similar=deny password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok password required pam_deny.so
也可以使用下面配置:
規則解釋如下:
1)只包含一種字符的密碼,拒絕(大小寫,數字,特殊字符分別為4種字符)
2)只包含兩種字符的密碼,拒絕
3)如果密碼中被識別出了常用的單詞,那么最小長度就必須為12位。常用單詞的最小識別長度為3.(由passphrase=3制定)
4)包含三種字符的密碼,最小長度為8位
5) 包含四種字符的密碼,最小長度為8位
6)如果發現本次修改的密碼跟老密碼有4個substring的長度類似,就認為是弱密碼。(match=4 similar=deny)
7) 這個策略對所有用戶都生效。(enforce=everyone )
8)默認情況下,對於輸入的密碼,如果第一個字母是大寫字母,或者最后一個字母為數字,則不會計入密碼字符的種類。比如:Fuck1234,由於第一個F是大寫字母,所以會被認為,該密碼只有小寫字母和數字兩種字符。這個非常奇怪,我也不知道原因是什么。我們用disable_firstupper_lastdigit_check 禁止了這種識別。
3.測試
echo "mhokwyaofnrd"|passwd --stdin root ##僅僅小寫,不通過 echo "IEJVRRzfdHPI"|passwd --stdin root ##大寫,小寫,不通過 echo "cyd******Ab8C"|passwd --stdin root ##大小寫,特殊字符,通過。 echo "Jes&us*****12"|passwd --stdin root ##通過
如果出現下面模塊不支持的情況