通过pam限制linux系统用户密码长度和复杂性

之前在修改Linux密码长度的时候都是去修改/etc/login.defs文件的pass_min_len 参数,可是地球人都知道,这个参数根本不具备强制性,用户一样可以使用短密码.
真正要对密码复杂性进行限制,还需要cracklib来完成.

红帽的系统一般都已经安装了, 可以rpm -qa|grep crack来查看,一般是两个包

####
cracklib参数主要有:

1.debug
用于syslog日志记录
2.type=abcd
当修改密码时,典型的提示信息是:

New linux password:

Retype Linux password:

可以通过abcd来替换linux这个单词
3.retry=3
用户有几次出错的机会
4.difok=5
新密码中至少有几个字符是和以前的密码不同的.
5.difignore=3
忽略新密码中不同字符之前的几个字母.

6.minlen=8

最小密码长度

7.dcreditr=5
密码中最多几个数字
8.ucredit=5
密码中最多几个大些字母.
9.lcredit=5
新密码中最多几个消协字母

10.ocredit=5

新密码中最多几个特殊字符
11.use_authtok

使用密码字典中的密码
cracklib密码强度检测过程

首先检查密码是否是字典的一部分,如果不是,则进行下面的检查

|

|

/|/
密码强度检测过程

|

|

/|/
新密码是否旧密码的回文

|
|

/|/
新密码是否只是就密码改变了大小写

|
|

/|/
新密码是否和旧密码很相似

|

|

/|/
新密码是否太短

|
|

/|/
新密码的字符是否是旧密码字符的一个循环
例如旧密码:123
新密码:231

|

|

/|/
这个密码以前是否使用过

pam_passwdqc 主要参数说明:

mix:设置口令字最小长度,默认值是 mix=disabled。
max:设置口令字的最大长度,默认值是 max=40。
passphrase: 设 置 口 令 短 语 中 单 词 的 最 少 个 数 , 默 认 值 是
passphrase=3,如果为 0 则禁用口令短语。
atch:设置密码串的常见程序,默认值是 match=4。
similar:设置当我们重设口令时,重新设置的新口令能否与旧口令相似,它可以是 similar=permit 允许相似或 similar=deny 不允许

相似。
random:设置随机生成口令字的默认长度。默认值是 random=42。设为 0 则禁止该功能。
enforce:设置约束范围,enforce=none 表示只警告弱口令字,但不禁止它们使用;enforce=users 将对系统上的全体非根用户实行这一

限制;enforce=everyone 将对包括根用户在内的全体用户实行这一限制。
non-unix:它告诉这个模块不要使用传统的 getpwnam 函数调用获得用户信息。
retry:设置用户输入口令字时允许重试的次数,默认值是 retry=3。

配置样例:

 

/etc/pam.d/system-auth

修改

password requisite /lib/security/$ISA/pam_cracklib.so retry=3

password requisite /lib/security/$ISA/pam_cracklib.so retry=3 minlen=8 difok=5