场景:
早上博友(CSDN博客朋友)给我发私信,问了一个问题:
CentOS7上面运行的项目,在用户管理添加新用户时,密码设置成Aa12345@时,会报错:Cannot read property 'message' of undefined。查看/etc/pam.d下的common-password文件,其中一条内容: password [success ok] pam_cracklib.so rejectusername minlen=8 difok=3 ucredit=0 lcredit=0 dcredit=0 ocredit=0。密码明明是按照这个策略来的啊,为什么设置成Bji230309@是可以的,设置成Aa12345@会报错呢?
猜测:
根据经验,猜测是不能设置连续字符
Linux密码复杂度设置
一、CentOS 7以前版本
- 一个是在/etc/login.defs文件,里面几个选项
PASS_MAX_DAYS 90 #密码最长过期天数
PASS_MIN_DAYS 80 #密码最小过期天数
PASS_MIN_LEN 10 #密码最小长度
PASS_WARN_AGE 7 #密码过期警告天数 - 另外一个方法是,修改/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
不需要在pw_dict后面加.pwd,因为默认会带得。
#修改密码,可以重试得次数
retry=5
#与旧密码不同得字符个数
difok=3
#新密码最小长度
minlen=8
#数字个数。大于0,最多;小于0,最少
dcredit=-3
#大写字母个数。大于0,最多;小于0,最少
ucredit=-2
#小写字母个数。大于0,最多;小于0,最少
lcredit=-4
#特殊字符个数。大于0,最多;小于0,最少
ocredit=-1
参数含义:
retry:尝试次数为5
difok:最少不同字符为3
minlen:最小密码长度为10
ucredit:最少大写字母为1
lcredit:最少小写字母为3
dcredit:最少数字:3
dictpath:密码字典位置为 /usr/share/cracklib/pw_dict
或/etc/security/pwquality.conf文件来控制
这样设置好,你可以做一下测试,不过需要先退出root,因为root用户并不会受这些限制(默认不限制,可以设置enforce_for_root,这样root也会限制),它可以设置任意得密码。
二、Centos7版本
CentOS密码复杂度配置通过/etc/pam.d/system-auth文件中得pam_cracklib.so模块来实现。
首先查看/etc/pam.d/system-auth文件, 可以看到当前并没有看到pam_cracklib.so模块,查找资料发现
pam_pwquality.so:可以用来检验密码得强度!包括密码是否在字典中,密码输入几次都失败就断掉此次联机等功能,都是这模块提供得!蕞早之前其实使用得是
pam_cracklib.so模块,后来改成pam_pwquality.so这个模块,但此模块完全兼容于pam_cracklib.so,同时提供了/etc/security/pwquality.conf 这个文件可以额外指定默认值,比较容易处理修改。
pam_pwquality.so是兼容pam_cracklib.so模块得,所以pam_cracklib.so得选项也适用于pam_pwquality.so
pam_cracklib.so支持得部分选项如下:
retry=N:定义登录/修改密码失败时,可以重试得次数
minlen=N:新密码得最小长度
dcredit=N:当N>0时表示新密码中数字出现得最多次数;当N<0时表示新密码中数字出现最少次数;
ucredit=N: 当N>0时表示新密码中大写字母出现得最多次数;当N<0时表示新密码中大写字母出现最少次数;
lcredit=N: 当N>0时表示新密码中小写字母出现得最多次数;当N<0时表示新密码中小写字母出现最少次数;
ocredit=N:当N>0时表示新密码中特殊字符出现得最多次数;当N<0时表示新密码中特殊字符出现最少次数;
maxrepeat=N:拒绝包含多于N个相同连续字符得密码。 默认值为0表示禁用此检查
maxsequence=N:拒绝包含长于N得单调字符序列得密码。默认值为0表示禁用此检查。例如’12345’或’fedcb’。除非序列只是密码得一小部分,否则大多数此类密码都不会通过简单检查。
enforce_for_root: 如果用户更改密码是root,则模块将在失败检查时返回错误。默认情况下,此选项处于关闭状态,只打印有关失败检查得消息,但root仍可以更改密码。不要求root用户输入旧密码,因此不会执行比较旧密码和新密码得检查
密码复杂性原则:数字,大写,小写,特殊字符
参考资料:
Linux下PAM模块学习总结
正确设置linux密码复杂度_农业常识_商讯网
系统是否有后门?Linux安全加固之PAM知多少_思快奇的博客-CSDN博客
Centos7安全实践之用户密码管理 - 百度文库