本文目的是在于限制用户修改自己密码或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 ##通过
如果出现下面模块不支持的情况