在Linux系统中,密码是用户身份验证的核心凭证,设置安全性强的密码策略能够从规则层面约束用户使用高强度密码,减少因弱密码引发的安全入侵事件。本文将以主流的Linux发行版为例,详细介绍密码策略的完整配置流程。
密码策略的核心配置维度
完整的Linux密码策略通常包含以下四个核心维度:
- 密码复杂度要求:规定密码的最小长度、必须包含的字符类型(大写字母、小写字母、数字、特殊符号)
- 密码过期规则:设置密码的最长使用期限、最短使用期限、过期前提醒时间
- 密码历史记录:限制用户不能重复使用最近N次设置过的密码
- 密码锁定策略:连续输错密码时临时锁定账户,防止暴力破解
配置密码复杂度规则
Linux系统通过PAM(可插拔认证模块)的pam_pwquality.so模块实现密码复杂度校验,该模块默认在大多数主流发行版中已安装。首先需要修改PAM的密码配置规则,不同发行版的配置文件路径略有差异:
- Debian、Ubuntu系统:
/etc/pam.d/common-password - CentOS、RHEL、Rocky Linux系统:
/etc/pam.d/system-auth
在配置文件中找到包含pam_pwquality.so的行,添加或修改对应的参数,常见参数含义如下:
| 参数名 | 含义 | 推荐取值 |
|---|---|---|
| minlen | 密码最小长度 | 12 |
| dcredit | 数字字符的最小数量,负数表示至少需要对应数量的数字 | -1 |
| ucredit | 大写字母的最小数量,负数表示至少需要对应数量的大写字母 | -1 |
| lcredit | 小写字母的最小数量,负数表示至少需要对应数量的小写字母 | -1 |
| ocredit | 特殊符号的最小数量,负数表示至少需要对应数量的特殊符号 | -1 |
| minclass | 密码必须包含的字符类型数量,取值范围1-4 | 3 |
以CentOS系统为例,修改后的配置行示例如下:
# 在/etc/pam.d/system-auth文件中找到对应行,修改为如下内容 password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=12 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 minclass=3
修改完成后,当用户修改密码时如果不符合复杂度要求,会直接提示错误,示例如下:
[root@localhost ~]# passwd testuser Changing password for user testuser. New password: BAD PASSWORD: The password is too short BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
配置密码过期规则
密码过期规则通过/etc/login.defs文件配置,该配置对新建用户生效,已存在的用户需要通过chage命令单独调整。需要修改的配置项如下:
# 编辑/etc/login.defs文件,修改以下参数 # 密码最长使用天数,推荐取值90 PASS_MAX_DAYS 90 # 密码最短使用天数,推荐取值7,避免用户频繁修改密码 PASS_MIN_DAYS 7 # 密码过期前提前提醒天数,推荐取值7 PASS_WARN_AGE 7 # 密码最小长度,和pam_pwquality的minlen保持一致 PASS_MIN_LEN 12
对于已经存在的用户,使用chage命令调整策略,示例如下:
# 查看testuser用户的密码策略 chage -l testuser # 设置testuser用户的密码最长使用90天,最短使用7天,过期前7天提醒 chage -M 90 -m 7 -W 7 testuser
配置密码历史记录
密码历史记录用于防止用户重复使用旧密码,同样通过PAM模块配置。在/etc/pam.d/system-auth或/etc/pam.d/common-password文件中添加pam_pwhistory.so模块配置:
# 添加到password相关的配置段中,remember=5表示记住最近5次密码,用户不能重复使用 password required pam_pwhistory.so remember=5
配置完成后,用户修改密码时如果输入的是最近5次使用过的密码,会直接提示错误。
配置密码错误锁定策略
为了防止暴力破解密码,可以配置连续输错密码时锁定账户的规则,通过pam_faillock.so模块实现,配置同样在PAM的认证文件中修改:
# 在auth配置段添加如下内容,deny=5表示连续输错5次锁定,unlock_time=300表示锁定300秒后自动解锁 auth required pam_faillock.so preauth silent deny=5 unlock_time=300 auth required pam_faillock.so authfail deny=5 unlock_time=300 # 在account配置段添加如下内容,用于检查锁定状态 account required pam_faillock.so
如果需要手动解锁被锁定的账户,可以使用如下命令:
# 解锁testuser用户的锁定状态 pam_tally2 --user testuser --reset # 或者使用faillock命令 faillock --user testuser --reset
策略验证与生效
所有配置修改完成后,不需要重启系统,配置会立即生效。可以通过新建测试用户、修改密码的方式验证策略是否生效:
- 尝试设置长度不足12位的密码,验证是否提示长度错误
- 尝试设置不包含大写字母的密码,验证是否提示复杂度错误
- 尝试重复使用旧密码,验证密码历史规则是否生效
- 连续输错5次密码,验证账户是否被锁定
以上配置完成后,Linux系统的密码策略即可达到较高的安全等级,能够有效抵御弱密码带来的安全风险。