我们在使用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) 新密码最小其他字符长度。

N>0表示密码最大的位数,一般均设置为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
此时你发现设置起作用了。

CentOS设置密码复杂度及过期时间等的更多相关文章

  1. CentOS6设置密码过期时间

    #密码过期时间180天chage -M 180 rootchage -l rootchage -M 180 gwchage -l gw

  2. linux 用户密码过期时间

    /etc/login.defs    全局配置文件,即当新建用户时的默认设置 PASS_MIN_DAYS  5    #最近一次密码更新的日期+0 ,即允许用户更改自己的密码的日期 PASS_MAX_ ...

  3. mac通过命令行获取证书和配置文件过期时间

      背景:ios打包证书的profile配置文件过期了,导致以前已经打完的测试包不能安装.所以需要加上检测机制,在打包时提示证书是否将要过期,如果要过期了给出提示   方案: 1.查找profile配 ...

  4. linux下设置密码复杂度限制,怎么设置?

    在linux,设置密码复杂度的方法有几个1. 一个是在/etc/login.defs文件,里面几个选项PASS_MAX_DAYS 90 #密码最长过期天数PASS_MIN_DAYS 80 #密码最小过 ...

  5. redis入门指南(三)—— 事务、过期时间、SORT命令、消息通知与管道

    写在前面 学习<redis入门指南>笔记,结合实践,只记录重要,明确,属于新知的相关内容. 事务 1.redis中的事务由一组命令的集合组成,要么都执行,要么都不执行,同时redis的事务 ...

  6. [ASP.NET] 如果将缓存“滑动过期时间”设置为1秒会怎样?

    今天编写了一个采用ASP.NET Caching的组件,在为它编写Unit Test的过程中发现了一个有趣的问题,接下来我通过一个简单的实例说明这个问题.我们在一个控制台应用中编写了如下一段程序,这个 ...

  7. ahjesus在asp.net中还可以通过设置HttpCookie对象的过期时间为DateTime.MinValue来指定此Cookies为跟随浏览器生效

    ahjesus在asp.net中还可以通过设置HttpCookie对象的过期时间为DateTime.MinValue来指定此Cookies为跟随浏览器生效

  8. C# Cache 设定缓存过期时间方法 绝对过期时间 和 相对过期时间(即:访问激活后不过期)

    摘自: http://www.cnblogs.com/zj1111184556/p/3493840.html 1. 设定绝对过期时间 /// <summary> /// 设定绝对的过期时间 ...

  9. memcached的key,value,过期时间的限制

    1.   key值最大长度? memcached的key的最大长度是250个字符,是memcached服务端的限制. 如果您使用的客户端支持"key的前缀"或类似特性,那么key( ...

随机推荐

  1. 关于 AngularJS 的数据绑定

    单向绑定(ng-bind) 和 双向绑定(ng-model) 的区别 ng-bind 单向数据绑定($scope -> view),用于数据显示,简写形式是 {{}}. 1 <span n ...

  2. ubuntu下安装自动补全YouCompleteMe

    一.安装预备软件.#vim要带python2.7的支持,curl是下载插件必须用到的软件,还有git apt install vim-nox-py2 curl git #安装python头文件 apt ...

  3. atitit.Oracle 9 10 11 12新特性attilax总结

    atitit.Oracle 9  10 11  12新特性 1. ORACLE 11G新特性 1 1.1. oracle11G新特性 1 1.2. 审计 1 1.3. 1.   审计简介 1 1.4. ...

  4. mysql操作及自动化运维

    备份恢复工具:percona-xtrabackup-2.0.0-417.rhel6.x86_64.rpm mysql主从配置命令: 主: 1.编辑主MYSQL 服务器的MySQL配置文件my.cnf, ...

  5. 2、Reactive Extensions for .NET(译)

    实验3-引入 .net 中的 events 到 Rx 目标:前面实验中的使用各种工厂构造方法创建一个 可观察序列是一个部分.把 .net 中现有的异步数据源进行关联 是更重要的事情.在这次实验中我们将 ...

  6. iptables安装失败后-------------firewalld回归

    yum install firewalld systemctl stop iptables; systemctl mask iptables; systemctl unmask firewalld s ...

  7. JS四种方法去除字符串最后的逗号

    <script> window.onload=function() { var obj = {name: "xxx", age: 30, sex: "fema ...

  8. 使用C语言实现一个虚拟机

    使用C语言实现一个虚拟机 2015-6-22 21:32| 发布者: joejoe0332| 查看: 2891| 评论: 0|原作者: leoxu, Serval, 社会主义好, lostTemple ...

  9. R ggplot2 翻转坐标

    p <- ggplot(mpg, aes(class, hwy)) p + geom_boxplot() p + geom_boxplot() + coord_flip()

  10. 一些lua代码

    1.把k--v表转化为数组表,只支持2级 2.取中值 3.字符串按每行最多n像素分割,并返回每行最大宽度,可以用"\n"手动换行