合 Linux系统密码复杂度校验规则修改
现象
1 2 3 4 5 6 7 8 9 | [root@kylinosv10sp2 /]# passwd Changing password for user root. New password: BAD PASSWORD: The password is shorter than 8 characters passwd: Authentication token manipulation error [root@lhropeneuler22 /]# echo "gpadmin:lhr" | chpasswd BAD PASSWORD: The password is shorter than 8 characters [root@lhropeneuler22 /]# |
解决:取消密码复杂度校验
适用于CentOS、麒麟系统、欧拉系统:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | vi /etc/pam.d/system-auth -- 注释掉如下行: #password requisite pam_pwquality.so try_first_pass local_users_only -- 添加: password requisite pam_unix.so -- 或者直接一条命令修改 cp /etc/pam.d/system-auth /etc/pam.d/system-auth_bk sed -i '/^password requisite/ { s/^/#/; N; s/\n/&password requisite pam_unix.so\n/ }' /etc/pam.d/system-auth -- 恢复原状 sed -i ' /^password requisite pam_unix.so/s/^/#/ /^#password requisite pam_pwquality.so/s/^#// ' /etc/pam.d/system-auth -- 建议: cp /etc/pam.d/system-auth_bk /etc/pam.d/system-auth |
文件在:/usr/lib64/security/pam_unix.so
其中,pam_unix.so可以修改为pam_cracklib.so,但需要保证so文件存在。
三个auth都会用来进行登陆检查,即使第一个模块失败,用来防止用户知道在哪个过程失败,主要目的是防止攻击。
auth 组件:认证接口,要求并验证密码
account组件:检测是否允许访问。检测账户是否过期或则在末端时间内能否登陆。
password组件:设置并验证密码
session组件:配置和管理用户sesison。
required:该模块必须success才能进行继续。即使失败用户也不会立刻获知,直到所有相关模块完成。
requisite:该模块必须success才能使认证继续进行。
suffifient:如果失败则忽略。
optinal:忽略结果,不管是否失败。
配置密码复杂度
密码复杂度:定期更换策略,避免弱口令
修改 /etc/login.defs文件,加入如下内容即可:
1 2 3 4 5 6 7 8 9 | [root@www.shizhanxia.com ~]# vi /etc/login.defs # 密码最大有效期 PASS_MAX_DAYS 180 # 两次修改密码的最小间隔时间 PASS_MIN_DAYS 1 # 密码最小长度 PASS_MIN_LEN 8 # 密码过期前7天开始提示 PASS_WARN_AGE 7 |
密码复杂度:设置密码强度
密码强度主要涉及到密码长短、密码是否包含数字、密码是否包含大写字母、密码是否包含小写字母、密码是否包含其他字符、新密码所需的最小字符种类、密码最大相同字符连续数量、新密码中同一类别允许的最大连续字符数、新密码和旧密码相同字符数数量等。
在Red Hat Enterprise Linux 7和相同版本的CentOS操作系统下,我们需要编辑/etc/pam.d/system-auth文件,将如下内容在相应位置添加即可。
1 2 | password requisite pam_pwquality.so try_first_pass local_users_only retry=3 difok=3 minlen=8 lcredit=-1 dcredit=-1 maxrepeat=3 reject_username enforce_for_root password requisite pam_pwhistory.so remember=5 use_authtok |
retry = 3 (在返回错误之前,最多提示用户N次。默认值为1)
difok = 5(新密码和旧密码相同字符数数量)
minlen=8(新密码的最小可接受大小)
lcredit=1(新密码中包含小写字符的最大数量,如果小于0,则为新文件中的最小小写字符数)
dcredit=-1(密码中包含所需数字的最小数量,如果小于0,则为新文件中的最小小写字符数)
maxrepeat=3(新密码中允许的最大连续相同字符数。如果该值为0,则禁用该检查)