Linux更改密码报错:密码未通过字典检查 - 过于简单化/系统化
Linux更改密码报错:密码未通过字典检查 - 过于简单化/系统化

方案一:直接忽略
很容易认为这儿是一个错误,其实可以直接忽略,重新输入密码
[root@localhost ~]# passwd
更改用户 root 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]#
方案二:对密码规则进行设置
这一部分参考"Linux中国"的文章:如何设置 Linux 系统的密码策略
在基于 DEB 的系统中设置密码长度
默认情况下,所有的 Linux 操作系统要求用户密码长度最少 6 个字符。我强烈建议不要低于这个限制。并且不要使用你的真实名称、父母、配偶、孩子的名字,或者你的生日作为密码。即便是一个黑客新手,也可以很快地破解这类密码。一个好的密码必须是至少 6 个字符,并且包含数字、大写字母和特殊符号。
通常地,在基于 DEB 的操作系统中,密码和身份认证相关的配置文件被存储在 /etc/pam.d/ 目录中。
设置最小密码长度,编辑 /etc/pam.d/common-password 文件;
$ sudo nano /etc/pam.d/common-password
找到下面这行:
password [success=2 default=ignore] pam_unix.so obscure sha512

在末尾添加额外的文字:minlen=8。在这里我设置的最小密码长度为 8。
password [success=2 default=ignore] pam_unix.so obscure sha512 minlen=8

保存并关闭该文件。这样一来,用户现在不能设置小于 8 个字符的密码。
在基于 RPM 的系统中设置密码长度
在 RHEL、CentOS、Scientific Linux 7.x 系统中, 以 root 身份执行下面的命令来设置密码长度。
# authconfig --passminlen=8 --update
查看最小密码长度,执行:
# grep "^minlen" /etc/security/pwquality.conf
输出样例:
minlen = 8
在 RHEL、CentOS、Scientific Linux 6.x 系统中,编辑 /etc/pam.d/system-auth 文件:
# nano /etc/pam.d/system-auth
找到下面这行并在该行末尾添加:
password requisite pam_cracklib.so try_first_pass retry=3 type= minlen=8

如上设置中,最小密码长度是 8 个字符。
在基于 DEB 的系统中设置密码复杂度
此设置会强制要求密码中应该包含多少类型,比如大写字母、小写字母和其他字符。
首先,用下面命令安装密码质量检测库:
$ sudo apt-get install libpam-pwquality
之后,编辑 /etc/pam.d/common-password 文件:
$ sudo nano /etc/pam.d/common-password
为了设置密码中至少有一个大写字母,则在下面这行的末尾添加文字 ucredit=-1。
password requisite pam_pwquality.so retry=3 ucredit=-1

设置密码中至少有一个小写字母,如下所示。
password requisite pam_pwquality.so retry=3 dcredit=-1
设置密码中至少含有其他字符,如下所示。
password requisite pam_pwquality.so retry=3 ocredit=-1
正如你在上面样例中看到的一样,我们设置了密码中至少含有一个大写字母、一个小写字母和一个特殊字符。你可以设置被最大允许的任意数量的大写字母、小写字母和特殊字符。
你还可以设置密码中被允许的字符类的最大或最小数量。
下面的例子展示了设置一个新密码中被要求的字符类的最小数量:
password requisite pam_pwquality.so retry=3 minclass=2
在基于 RPM 的系统中设置密码复杂度
在 RHEL 7.x / CentOS 7.x / Scientific Linux 7.x 中:
设置密码中至少有一个小写字母,执行:
# authconfig --enablereqlower --update
查看该设置,执行:
# grep "^lcredit" /etc/security/pwquality.conf
输出样例:
lcredit = -1
类似地,使用以下命令去设置密码中至少有一个大写字母:
# authconfig --enablerequpper --update
查看该设置:
# grep "^ucredit" /etc/security/pwquality.conf
输出样例:
ucredit = -1
设置密码中至少有一个数字,执行:
# authconfig --enablereqdigit --update
查看该设置,执行:
# grep "^dcredit" /etc/security/pwquality.conf
输出样例:
dcredit = -1
设置密码中至少含有一个其他字符,执行:
# authconfig --enablereqother --update
查看该设置,执行:
# grep "^ocredit" /etc/security/pwquality.conf
输出样例:
ocredit = -1
在 RHEL 6.x / CentOS 6.x / Scientific Linux 6.x systems 中,以 root 身份编辑 /etc/pam.d/system-auth 文件:
# nano /etc/pam.d/system-auth
找到下面这行并且在该行末尾添加:
password requisite pam_cracklib.so try_first_pass retry=3 type= minlen=8 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1
如上设置中,密码必须要至少包含 8 个字符。另外,密码必须至少包含一个大写字母、一个小写字母、一个数字和一个其他字符。
在基于 DEB 的系统中设置密码有效期
现在,我们将要设置下面的策略。
- 密码被使用的最长天数。
- 密码更改允许的最小间隔天数。
- 密码到期之前发出警告的天数。
设置这些策略,编辑:
$ sudo nano /etc/login.defs
在你的每个需求后设置值。
PASS_MAX_DAYS 100
PASS_MIN_DAYS 0
PASS_WARN_AGE 7

正如你在上面样例中看到的一样,用户应该每 100 天修改一次密码,并且密码到期之前的 7 天开始出现警告信息。
请注意,这些设置将会在新创建的用户中有效。
为已存在的用户设置修改密码的最大间隔天数,你必须要运行下面的命令:
$ sudo chage -M <days> <username>
设置修改密码的最小间隔天数,执行:
$ sudo chage -m <days> <username>
设置密码到期之前的警告,执行:
$ sudo chage -W <days> <username>
显示已存在用户的密码,执行:
$ sudo chage -l sk
这里,sk 是我的用户名。
输出样例:
Last password change : Feb 24, 2017
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
正如你在上面看到的输出一样,该密码是无限期的。
修改已存在用户的密码有效期,
$ sudo chage -E 24/06/2018 -m 5 -M 90 -I 10 -W 10 sk
上面的命令将会设置用户 sk 的密码期限是 24/06/2018。并且修改密码的最小间隔时间为 5 天,最大间隔时间为 90 天。用户账号将会在 10 天后被自动锁定,而且在到期之前的 10 天前显示警告信息。
在基于 RPM 的系统中设置密码效期
这点和基于 DEB 的系统是相同的。
在基于 DEB 的系统中禁止使用近期使用过的密码
你可以限制用户去设置一个已经使用过的密码。通俗的讲,就是说用户不能再次使用相同的密码。
为设置这一点,编辑 /etc/pam.d/common-password 文件:
$ sudo nano /etc/pam.d/common-password
找到下面这行并且在末尾添加文字 remember=5:
password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass sha512 remember=5
上面的策略将会阻止用户去使用最近使用过的 5 个密码。
在基于 RPM 的系统中禁止使用近期使用过的密码
这点对于 RHEL 6.x 和 RHEL 7.x 和它们的衍生系统 CentOS、Scientific Linux 是相同的。
以 root 身份编辑 /etc/pam.d/system-auth 文件,
# vi /etc/pam.d/system-auth
找到下面这行,并且在末尾添加文字 remember=5。
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5
现在你了解了 Linux 中的密码策略,以及如何在基于 DEB 和 RPM 的系统中设置不同的密码策略。
就这样,我很快会在这里发表另外一天有趣而且有用的文章。在此之前请保持关注。如果您觉得本教程对你有帮助,请在您的社交,专业网络上分享并支持我们。
Linux更改密码报错:密码未通过字典检查 - 过于简单化/系统化的更多相关文章
- MySQL 设置root密码报错:mysqladmin: connect to server at 'localhost' failed
MySQL 设置root密码报错:mysqladmin: connect to server at 'localhost' failed 1.安装完MySQL设置root密码报错如下 [root@vm ...
- mysql5.7设置简单密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
注:本文来源于< mysql5.7设置简单密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy r ...
- mysql5.7.18.1修改用户密码报错ERROR 1054 (42S22): Unknown column 'password' in 'field list'解决办法
本意向修改一个用户的密码,网上搜到的命令为如下 mysql> update user set password=password(“新密码”) where user=”用户名”; 执行后报错 E ...
- SQL c# 程序报错:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
报错:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序.System.Data 需要注意的问题和解决方法: 1.Microsoft.Jet.OLEDB.4.0不要写成Mi ...
- Linux QtCreator 编译报错:No rule to make target '.../***' needed by '***.o'.stop
Linux QtCreator 编译报错:No rule to make target 'mainwindow.cpp' needed by 'mainwindow.o'.stop [1]解决方案 ...
- 【jvm】linux 调用 jmap 报错Permission denied
linux 调用 jmap 报错Permission denied 解决方案: 分别对java安装目录,java的bin目录以及jmap命令设置权限 chmod jdk1..0_79 chmod b ...
- Linux常见英文报错中文翻译(菜鸟必知)
Linux常见英文报错中文翻译(菜鸟必知) 1.command not found 命令没有找到 2.No such file or directory 没有这个文件或目录 3.Permission ...
- Linux常见英文报错中文翻译
Linux常见英文报错中文翻译(菜鸟必知) 1.command not found 命令没有找到 2.No such file or directory 没有这个文件或目录 3.Permission ...
- linux系统修改用户密码报错
版权声明:本文为博主原创文章,支持原创,转载请附上原文出处链接和本声明. 本文地址:https://www.cnblogs.com/wannengachao/p/12069113.html 1.设置新 ...
随机推荐
- 记一次Ajax请求MVC调优
问题描述 ASP.NETMVC项目,编辑页面赋值操作,ajax请求很慢. 对同一个控制器有2个请求 一个为获取该表的树形结构数据(绑定下拉框) 一个为获取某实体的单条记录(编辑操作) 排查过程 数据库 ...
- IIS放置的APP安装包在浏览器无法打开
无法打开的提示 操作步骤 1.将APP安装包放置到指定的文件夹中. 2.在IIS中MIME中添加MIME类型 扩展名:.apk MIME类型:application/vnd.android.pac ...
- 如何查看打印机的IP地址和MAC地址
1. 打开控制面板,选择设备和打印机: 2. 选中打印机,右键单机,选择打印机 "属性": 3. 选择web服务,可以直接查看打印机的IP地址或MAC地址,如下图所示: 4. ...
- React Native Android 环境搭建
因为工作需要,最近正在学习React Native Android.温故而知新,把学习的内容记录下来巩固一下知识,也给有需要的人一些帮助. 需要说明的是,我刚接触React Native也不久,对它的 ...
- C#自定义TemplateImage使用模板底图,运行时根据用户或产品信息生成海报图(1)
由于经常需要基于固定的一个模板底图,生成微信小程序分享用的海报图,如果每次都调用绘图函数,手动编写每个placeholder的填充,重复而且容易出错,因此,封装一个TemplateImage,用于填充 ...
- 表单序列化json字符串和js时间格式化
js时间格式化 new Date().format("时间格式") Date.prototype.format = function(fmt) { var o = { ...
- MySQL求两表的差集(非交集)
mysql如何查询两个字段数不同的表中数据不一致的记录 一般可用NOT EXISTS(非存在子句)或 LEFT JOIN左(右)连接后所产生空字段值来筛选两表的差集 1.NOT EXISTS not ...
- jQuery EasyUI学习二
1. 课程介绍 1. Datagrid组件(掌握) 2. Dialog.form组件(掌握) 3. Layout.Tabs;(掌握) Datagrid组件 2.1. 部署运行pss启动无错 ...
- linux操作系统可以ping通ssh连接长时间无响应
一.问题描述 某集群数据节点服务器频繁无法连接,服务器间出现可ping通但ssh无法连接的情况,使用带外地址登录后远程控制也无法显示正常界面,重启后会短暂恢复. 二.排查问题 重启服务器后检查服务器S ...
- 快速了解JavaScript的基础知识
注释 单行注释: // 单行注释 多行注释: /* 多行 注释 */ 历史上 JavaScript 可以兼容 HTML 注释,因此 <!-- 和 --> 也可以是单行注释. x = 1; ...