密码复杂度

本文目的是在于限制用户修改自己密码或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

也可以使用下面配置:

password required  pam_passwdqc.so min=disabled,disabled,12,8,8 max=30 passphrase=3 match=4 similar=deny enforce=everyone 
disable_firstupper_lastdigit_check

规则解释如下: 
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          ##通过

如果出现下面模块不支持的情况

原文地址:https://www.cnblogs.com/dadonggg/p/7975710.html