在centos或redhat系统中配置密码长度、复杂度策略和定期更换策略方法如下:


这个目录下文件的名称就代表服务的名称:

]# ls /etc/pam.d
atd                  login             postlogin-ac       smtp          system-auth
chfn                 other             ppp                smtp.postfix  system-auth-ac
chsh                 passwd            remote             sshd          systemd-user
config-util          password-auth     runuser            su            vlock
crond                password-auth-ac  runuser-l          sudo
fingerprint-auth     polkit-1          smartcard-auth     sudo-i
fingerprint-auth-ac  postlogin         smartcard-auth-ac  su-l


Linux对应的密码策略模块有:pam_passwdqc 和 pam_pwquality。

pam_passwdqc:/etc/login.defs 密码过期时间等策略配置。

pam_pwquality:/etc/security/pwquality.conf 密码复杂度配置。


过期时间等配置:

~]# cat /etc/login.defs
...
PASS_MAX_DAYS	90
PASS_MIN_DAYS	0
PASS_MIN_LEN	8
PASS_WARN_AGE	30
...

详解:

PASS_MAX_DAYS   #密码最大有效期
PASS_MIN_DAYS   #两次修改密码的最小间隔时间
PASS_MIN_LEN    #密码最小长度,对于root无效
PASS_WARN_AGE   #密码过期前多少天开始提示

密码复杂度配置:

~]# cat /etc/pam.d/system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_tally2.so deny=5 unlock_time=300 even_deny_root root_unlock_time=300
auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so

#password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=8 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so


密码复杂度配置:

password requisite pam_pwquality.so try_first_pass local_users_only retry=5 authtok_type= minlen=8 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root

详解:

minlen=8 密码最小长度为8个字符。
lcredit=-1 密码应包含的小写字母的至少一个
ucredit=-1 密码应包含的大写字母至少一个
dcredit=-1 将密码包含的数字至少为一个
ocredit=-1 设置其他符号的最小数量,例如@,#、! $%等,至少要有一个
enforce_for_root 确保即使是root用户设置密码,也应强制执行复杂性策略。


登陆过期配置:

添加的内容一定要写在前面,如果写在后面,虽然用户被锁定,但是只要用户输入正确的密码,还是可以登录的!

下面这段如果配置在ssh文件里面就是限制的ssh,如果配置在login文件里限制的就是tty处登陆。

auth required pam_tally2.so deny=5 unlock_time=300 even_deny_root root_unlock_time=300

详解:

even_deny_root 也限制root用户;
deny 设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户
unlock_time 设定普通用户锁定后,多少时间后解锁,单位是秒;
root_unlock_time 设定root用户锁定后,多少时间后解锁,单位是秒;
此处使用的是 pam_tally2 模块,如果不支持 pam_tally2 可以使用 pam_tally 模块。另外,不同的pam版本,设置可能有所不同,具体使用方法,可以参照相关模块的使用规则。


连接超时时间:

echo 'export TMOUT=3600' >> /etc/profile
source /etc/profile