Linux学习笔记(32)linux密码策略

【1】密码策略

(1.1)用户密码有效期( /etc/login.defs)

设备用户密码的有效期(默认情况下,用户的密码永不过期)

编辑login.defs(vim /etc/login.defs)


说明:

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 6
PASS_WARN_AGE 7

 

(1.2)密码复杂度(/etc/pam.d/system-auth)

用户密码复杂度规则设定,需要通过/etc/pam.d/system-auth文件实施(针对的是普通用户状态下修改密码会生效,root用户状态下无效)。

  centos6中默认是通过pam_cracklib.so模块控制,(在CentOS 7上实现密码复杂度策略设置,主要是使用PAM pwquality模块完成)

[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[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=8 ucredit=-2 lcredit=-4 dcredit=-1 ocredit=-1 password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=5

 

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

retry=3 定义登录/修改密码失败时,可以重试的次数;
  type=xxx 当添加/修改密码时,系统给出的缺省提示符是什么,用来修改缺省的密码提示文本。默认是不修改的,如上例。
  minlen=8 定义用户密码的最小长度为8位
  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 下面)。

vim /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个字符。

vim /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)。

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

 


(1.3)CentOS 7通用规则设置示例

# 以root用户登录系统

cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak
vim /etc/pam.d/system-auth

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

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

minlen=12 密码最小长度为8个字符。

lcredit=-1 密码应包含的小写字母的至少一个

ucredit=-1 密码应包含的大写字母至少一个dcredit=-1

将密码包含的数字至少为一个ocredit=-1

设置其他符号的最小数量,例如@,#、! $%等,至少要有一个

enforce_for_root 确保即使是root用户设置密码,也应强制执行复杂性策略。

设置登陆会话超时

10分钟无操作,自动退出会话。

vim /etc/profile
TMOUT=600 #600秒超时
source /etc/profile

 

设置登陆失败锁定

输错5次密码,账号锁定10分钟。

vim /etc/pam.d/system-auth
auth required pam_tally2.so onerr=fail deny=5 unlock_time=600 root_unlock_time=600

 

此项配置只对控制台有效,ssh无效。
如果需要对ssh远程有效,则需要修改

ssh 登录失败锁定

/etc/pam.d/sshd

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

 

 

【其他参考-密码复杂度与长度】

1.说明

  为了保证之后所创建的账号每个账号的口令复杂度均满足实际所需,需更改相应的配置达到效果。

2.检查方法

1.在终端中输入命令:

  [root@localhost ~]# more /etc/security/pwquality.conf

2.根据显示结果检查相关项是否未被备注或数值不等于0

3.各配置项含义:

difok 代表不得与上次密码相同的字符个数;

minlen 为密码最小长度;

dcredit 为密码中最少包含数字的个数;

ucredit 为密码中最少包含大写字母的个数;

lcredit 为密码中最少包含小写字母的个数;

ocredit 为密码中最少包含特殊字符的个数;

maxrepeat 为密码中相同字符出现最多的次数;

minclass 为新密码设置所需的最少字符类数

maxrepeat 在新密码中设置允许的连续相同字符的最大数量

maxclassrepeat 在新密码中设置同一类的最大允许连续字符数

gecoscheck检查新密码中是否包含用户passwd项的GECOS字段中长度超过3个字符的单词

dictcheck 是否检查来自cracklib字典的单词。

usercheck为检测密码是否与用户名相似

enforcing 检查是否由PAM模块或其他模块强制执行应用程序

dictpath = 指定通往cracklib字典的路径,默认使用系统自带cracklib Default字典

3.修改建议

1.使用vim编辑器修改口令复杂度文件:

  [root@localhost ~]# vim /etc/security/pwquality.conf

2.修改检查方法中所提的项,

  正数:表示最多有多少位,如ucredit = 5 大写字母最多5个

  负数:数值为-1时代表至少需要相应字符一位、数值为-2时代表需要需要相应字符两位,依次类推,如ucredit = -1 大写字母最少1个

3.修改例子:(密码最小长度为8位,密码需包含大小写字母、数字与特殊字符)

minlen = 8

dcredit = -1

ucredit = -1

lcredit = -1

ocredit = -1

 

【参考文档】

转自:原文链接:https://blog.csdn.net/li_c_yang/article/details/129850082

转自:原文链接:https://blog.csdn.net/qq_17576885/article/details/121948455

posted @ 2023-06-28 09:23  郭大侠1  阅读(699)  评论(0编辑  收藏  举报