一、概述
系统等保要求,必须设置系统密码策略(复杂度)。
系统对密码的控制是有两部分组成:
- login.defs(系统自带配置文件,主要是控制密码的有效期,对密码进行时间管理。)
- cracklib(第三方插件,Redhat公司专门开发了cracklib这个安装包来判断密码的复杂度。)
二、配置 login.defs 文件
文件位置:/etc/login.defs
- PASS_MAX_DAYS 90 #密码最长过期天数
- PASS_MIN_DAYS 80 #密码最小过期天数
- PASS_MIN_LEN 10 #密码最小长度
- PASS_WARN_AGE 7 #密码过期警告天数
二、安装和配置 Cracklib
密码的复杂度的判断是通过pam模块控制来实现的,具体的模块是 pam_cracklibpam_cracklib 的参数介绍:
debug
该选项使用模块将信息写入到日志(3)来指示组件的行为(这个选项不会记录密码信息到日志文件)。
type=XXX
默认的操作是为模块,当请求密码时,该模块默认操作是使用以下提示:“新的UNIX密码:”和“重新输入密码UNIX”。此选项就是替换默认单词的UNIX。
retry=N
提示用户最多N次会返回错误。默认值是1
difok=N
此参数会改变默认新密码中必须有5个字符不同于旧密码中字符,此外,如果新密码中有一半字符不同于旧密码,那么就可以使用新密码。
difignore=N
密码在少于多少个字符时,difok将被忽略,默认是23。
minlen=N
新密码可接受的最小长度。
dcredit=N
(N < 0) 新密码最小数字长度。
ucredit=N
(N < 0) 新密码最小大写字母长度。
lcredit=N
(N < 0) 新密码最小小写字母长度。
ocredit=N
(N < 0) 新密码最小其他字符长度。
N>0表示密码最大的位数,一般均设置为N<0 表示密码最少的位数
use_authtok
此参数用于强制不提示用户输入新的密码而由以前堆积的密码模块所提供。
dictpath=/path/to/dict
Path to the cracklib dictionaries.
dictpath=/path/to/dict //注:密码字典,这个是验证用户的密码是否是字典一部分的关键。
Path to the cracklib dictionaries.
检查是否安装了 cracklib 插件。
rpm -ql cracklib
使用以下命令安装 libpan-cracklib 插件。
apt-get install libpam-cracklib
检查 cracklib 服务是否启动。
service --status-all
编辑 common-password 文件。
vim /etc/pam.d/common-password
- 注释掉第一行,pam_passwdqc.so。
- 在第二行,pam_cracklib.so后面,补充校验规则。
retry=3 minlen=8 difok=3 ucredit=-1 lcredit=-1 ocredit=-1
- 密码最多尝试3次,密码最少8位,有3个字符不能与旧密码相同,最少1个大写字母,最少1个小写字母,最少1个特殊字符。
重启 cracklib 服务。
service cracklib restart
四、参考文章
- https://blog.csdn.net/flycutter/article/details/8989623
- https://www.cnblogs.com/minseo/p/7880338.html
来源:oschina
链接:https://my.oschina.net/discussjava/blog/4336907