注意:/etc/login.defs 是设置用户帐号限制的文件。该文件里的配置对root用户无效。/etc/login.defs 文件用于在Linux创建用户时,对用户的一些基本属性做默认设置,例如指定用户 UID 和 GID 的范围,用户的过期时间,密码的最大长度,等等。

需要注意的是,该文件的用户默认配置对 root 用户无效。并且,当此文件中的配置与 /etc/passwd 和 /etc/shadow 文件中的用户信息有冲突时,系统会以/etc/passwd 和 /etc/shadow 为准。

如果/etc/shadow文件里有相同的选项,则以/etc/shadow里的设置为准,也就是说/etc/shadow的配置优先级高于/etc/login.defs

一.过期等的设置
/etc/login.defs密码策略

PASS_MAX_DAYS 99999 #密码的最大有效期, 99999:永久有期

PASS_MIN_DAYS 0 #是否可修改密码,0可修改,非0多少天后可修改

PASS_MIN_LEN 5 #密码最小长度,使用pam_cracklib module,该参数不再有效

PASS_WARN_AGE 7 #密码失效前多少天在用户登录时通知用户修改密码
root默认是永不过期
用到的指令:grep -Ev “^$|[#;]” /etc/login.defs去掉#号的

二.密码复杂度的设置
sudo apt-get install libpam-cracklib
注意:此教程中的密码策略只对非 root 用户有效,对 root 用户无效。

禁止使用旧密码
sudo vi /etc/pam.d/common-password
password [success=1 default=ignore] pam_unix.so obscure sha512 remember=5
说明:“remember=5” 的那行,它表示禁止使用最近用过的5个密码(己使用过的密码会被保存在 /etc/security/opasswd 下面)。

设置最短密码长度
找到同时有 “password” 和 “pam_cracklib.so” 字段并且附加有 “minlen=10” 的那行,它表示最小密码长度为(10 - 类型数量)。这里的 “类型数量” 表示不同的字符类型数量。PAM 提供4种类型符号作为密码(大写字母、小写字母、数字和标点符号)。如果你的密码同时用上了这4种类型的符号,并且 minlen 设为10,那么最短的密码长度允许是6个字符。
sudo vi /etc/pam.d/common-password
password requisite pam_cracklib.so retry=3 minlen=10 difok=3

设置密码复杂度
sudo vi /etc/pam.d/common-password
password requisite pam_cracklib.so retry=3 minlen=10 difok=3 ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1

*至少包含一个大写字母(ucredit)
*两个小写字母(lcredit)
*一个数字(dcredit)
*一个标点符号(ocredit)

chage命令其实调用的就是/etc/login.defs:

ubuntu查询postgresql密码 ubuntu查看密码策略_复杂度


sudo chage -E 6/30/2020 -m 5 -M 90 -I 30 -W 14 lw3

上面的命令将密码期限设为2020年6月3日。另外,修改密码的最短周期为5天,最长周期为90天。密码过期前14天会发送消息提醒用户,过期后帐号会被锁住30天。