Linux配置密码复杂度策略

Linux系统下的用户密码的复杂度规则

用户密码复杂度规则设定,需要通过 /etc/pam.d/system-auth 文件实施(针对的是普通用户状态下修改密码会生效,root用户状态下无效),centos6中默认是通过 pam_cracklib.so 模块控制,(在CentOS 7上实现密码复杂度策略设置,主要是使用 PAM pwquality 模块完成):

CentOS 6 通用规则设置示例

[root@localhost ~]# cat /etc/redhat-release
CentOS release 6.8 (Final)
   
[root@localhost ~]# vim /etc/pam.d/system-auth
将文件中的下面两行:
password    requisite     pam_cracklib.so try_first_pass retry=3 type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
改为:
password    requisite     pam_cracklib.so try_first_pass retry=3 type= minlen=10 ucredit=-2 lcredit=-4 dcredit=-1 ocredit=-1
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5

上面文件中参数分别说明设置密码的时候要遵循下面的规则:

  • List item

  • retry=3 定义登录/修改密码失败时,可以重试的次数;

  • type=xxx 当添加/修改密码时,系统给出的缺省提示符是什么,用来修改缺省的密码提示文本。默认是不修改的,如上例。

  • minlen=10 定义用户密码的最小长度为10位

  • ucredit=-2 定义用户密码中最少有2个大写字母 (数字为负数,表示至少有多少个大写字母;数字为正数,表示至多有多少个大写字母;下面同理)

  • lcredit=-4 定义用户密码中最少有4个小写字母

  • dcredit=-1 定义用户密码中最少有1个数字

  • ocredit=-1 定义用户密码中最少有1个特殊字符(除数字、字母之外)

  • remember=5 修改用户密码时最近5次用过的旧密码就不能重用了
    除了上面的几个参数,还可以设定下面的参数规则:

  • difok=N 此选项用来规定新密码中必需有N个字符与旧密码不同。如果新密码中有1/2以上的字符与旧密码不同时,该新密码就会被接受。

  • difignore=N 此选项用来设定在difok之前收到多少个字符时,difok设置会被忽略,缺省为23。

  • minclass=N 此选项用来规定新密码中的字符类别的最小数目,字符一般有四种类别:数字、大写字母、小写字母,以及特殊字符。

禁止使用旧密码

在 /etc/pam.d/system-auth 里找到同时有 “password” 和 “pam_unix.so” 字段并且附加有 “remember=5” 的那行,它表示禁止使用最近用过的5个密码(己使用过的密码会被保存在 /etc/security/opasswd 下面)。

sudo vi /etc/pam.d/system-auth
password sufficient pamunix.so sha512 shadow nullok tryfirstpass useauthtok remember=5
## 合理的创建标题,有助于目录的生成

设置最短密码长度

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

sudo vi /etc/pam.d/system-auth
password requisite pam_cracklib.so retry=3 difok=3 minlen=10

设置密码复杂度(常用)

找到同时有 “password” 和 “pam_cracklib.so” 字段并且附加有 “ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1” 的那行,它表示密码必须至少包含一个大写字母(ucredit),两个小写字母(lcredit),一个数字(dcredit)和一个标点符号(ocredit)。

sudo vi /etc/pam.d/system-auth
password requisite pam_cracklib.so retry=3 difok=3 minlen=10 ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1

CentOS 7通用规则设置示例

[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@localhost ~]# cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak
[root@localhost ~]# vi /etc/pam.d/system-auth
 
#示例1
password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root
 
#示例2
password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=10 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root
 
#示例3
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

上面文件中参数分别说明设置密码的时候要遵循下面的规则:

  • retry=3 定义登录/修改密码失败时,可以重试的次数;
  • minlen=8 密码最小长度为8个字符。
  • lcredit=-1 密码应包含的小写字母的至少一个
  • ucredit=-1 密码应包含的大写字母至少一个
  • dcredit=-1 将密码包含的数字至少为一个
  • ocredit=-1 设置其他符号的最小数量,例如@,#、! $%等,至少要有一个
  • enforce_for_root 确保即使是root用户设置密码,也应强制执行复杂性策略。

Linux系统下的用户密码的有效期

可以修改密码可以通过login.defs文件控制。设置密码过期期限(默认情况下,用户的密码永不过期。)
编辑 /etc/login.defs 文件,可以设置当前密码的有效期限,具体变量如下所示:

sudo vi /etc/login.defs
PASS_MAX_DAYS 150 
PASS_MIN_DAYS 0 
PASS_WARN_AGE 7
# 这些设置要求用户每6个月改变他们的密码,并且会提前7天提醒用户密码快到期了。

说明:

Password aging controls:

  • PASS_MAX_DAYS Maximum number of days a password may be used.(密码可以使用的最大天数。)
  • PASS_MIN_DAYS Minimum number of days allowed between password changes.(密码更改之间允许的最小天数。一般不要设置)
  • PASS_MIN_LEN Minimum acceptable password length.(可接受的最小密码长度。)
  • PASS_WARN_AGE Number of days warning given before a password expires.(密码过期前发出警告的天数。)
# 默认值
PASS_MAX_DAYS   99999
PASS_MIN_DAYS   0
PASS_MIN_LEN    5
PASS_WARN_AGE   7
 
# 建议值
PASS_MAX_DAYS   90
PASS_MIN_DAYS   0
PASS_MIN_LEN    8
PASS_WARN_AGE   7

可以通过sed命令设置:

sed -r -i 's/(PASS_MAX_DAYS)\s+([0-9]+)/\1 90/' /etc/login.defs

以上将 PASS_MAX_DAYS 99999 设置为 PASS_MAX_DAYS 90(密码有效期90天)

sed -r -i 's/(PASS_MIN_LEN)\s+([0-9]+)/\1 8/' /etc/login.defs

以上将 PASS_MIN_LEN 5 设置为 PASS_MIN_LEN 8(密码字符长度8位)

Linux 操作超时退出功能策略

编辑/etc/profile系统文件

sudo vi /etc/profile

在文件后面添加:

# 单位秒,表示无操作10分钟后自动退出
export TMOUT=600

扩展:

export TMOUT=0 # 0代表永不自动退出
readonly TMOUT # 将值设置为readonly 防止用户更改,在shell中无法修改TMOUT

使配置生效

source /etc/profile

Linux设置登录失败处理功能

1、登录失败处理功能策略(服务器终端)

编辑系统/etc/pam.d/system-auth 文件,在 auth 字段所在的那一部分添加如下 pam_tally2.so 模块的策略参数:

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

或者

auth required pam_tally2.so  onerr=fail  deny=5  unlock_time=300 no_magic_root

pam_tally2.so 模块参数解读:

  • onerr=fail #表示连续错误
  • deny=n #表示连续登录失败次数超过n次后拒绝访问
  • unlock_time=300 #表示连续登录失败后锁定的时间(秒数)为300秒
  • no_magic_root #表示连root用户也在限制范围内
  • even_deny_root #root用户失败登录次数超过deny=n次后拒绝访问
  • root_unlock_time=300 #与even_deny_root相对应的选项,如果配置该选项,则root用户在登录失败次数超出限制后被锁定指定时间为300秒
    注:用户锁定期间,无论在输入正确还是错误的密码,都将视为错误密码,并以最后一次登录为锁定起始时间,若果用户解锁后输入密码的第一次依然为错误密码,则再次重新锁定。

2、登录失败处理功能策略(ssh 远程连接 登录)

编辑系统/etc/pam.d/ sshd 文件,添加的内容与服务器终端的一致,在 auth 字段所在的那一部分添加如下 pam_tally2.so 模块的策略参数:

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

或者

auth required pam_tally2.so  onerr=fail  deny=5  unlock_time=300 no_magic_root

原文链接:https://blog.csdn.net/qq_25231683/article/details/134506851

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值