Linux 密码复杂度


 我们在使用linux系统设置密码的时候,经常遇到这样的问题,系统提示:您的密码太简单,或者您的密码是字典的一部分。那么系统是如何实现对用户的密码的复杂度的检查的呢?
  系统对密码的控制是有两部分(我知道的)组成:
  1 cracklib
  2 login.defs
  声明:login.defs主要是控制密码的有效期。对密码进行时间管理。此处不细谈。
  login.defs --shadow password suite configuration

  pam_cracklib.so 才是控制密码复杂度的关键文件。

  redhat公司专门开发了cracklib这个安装包来判断密码的复杂度。

  可以rpm -ql 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) 新密码最小其他字符长度。


use_authtok

    此参数用于强制不提示用户输入新的密码而由以前堆积的密码模块所提供。 


dictpath=/path/to/dict
  Path to the cracklib dictionaries.
  dictpath=/path/to/dict //注:密码字典,这个是验证用户的密码是否是字典一部分的关键。
  Path to the cracklib dictionaries.

例子:
在linux下设置密码复杂度办法:

(1)修改/etc/login.defs文件

PASS_MAX_DAYS   90  #密码最长过期天数
PASS_MIN_DAYS   80  #密码最小过期天数
PASS_MIN_LEN    10  #密码最小长度
PASS_WARN_AGE   7   #密码过期警告天数

 

(2)修改/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

参数含义:

尝试次数:5  最少不同字符:3 最小密码长度:10  最少大写字母:1 最少小写字母:3 最少数字:3 密码字典:/usr/share/cracklib/pw_dict

 

注意:以上设置对root用户无效。修改后你可能会立即测试,会发现以上设置无效。你可以新建账户,并进入该账户。
useradd  test
passwd test

su - test
此时你发现设置起作用了。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。