Linux系统作为服务器和企业级应用环境中广泛使用的操作系统,安全管理一直是运维工作中的重点。其中,用户密码强度策略是保障系统账户安全的重要环节。默认情况下,Linux虽然提供了基础的用户认证机制,但对于密码长度、复杂度、历史密码限制等方面的控制并不一定满足企业安全规范。
PAM(Pluggable Authentication Modules,可插拔认证模块)提供了一套灵活的认证框架,可以通过配置密码策略模块实现对用户密码强度的精细化管理。本文将详细介绍Linux中如何通过PAM配置密码强度策略,包括相关配置文件、常用参数以及实际应用中的注意事项。
一、什么是PAM认证机制
PAM是Linux系统中负责身份认证的重要组件,它将应用程序与具体认证方式分离,使系统管理员可以通过修改配置文件调整认证规则,而无需修改应用程序代码。
常见使用PAM进行认证的服务包括:
-
SSH远程登录
-
用户登录管理
-
sudo权限验证
-
用户密码修改
-
图形化登录服务
PAM配置文件通常位于:
Bash/etc/pam.d/
不同服务对应不同的PAM配置文件,例如:
Bash/etc/pam.d/sshd
表示SSH服务的认证规则。
PAM配置文件通常由以下几个部分组成:
模块类型 控制标记 模块路径 模块参数
例如:
Bashpassword requisite pam_pwquality.so retry=3
其中:
-
password:表示密码管理阶段
-
requisite:表示模块失败后立即返回失败
-
pam_pwquality.so:密码质量检查模块
-
retry=3:允许用户重新输入密码3次
二、Linux密码强度策略的核心模块
Linux系统中实现密码复杂度控制主要依赖以下PAM模块:
1. pam_pwquality模块
目前主流Linux发行版推荐使用:
Bashpam_pwquality.so
它用于检查用户设置密码时是否符合安全要求。
主要功能包括:
-
限制密码最小长度
-
控制字符类型数量
-
防止简单密码
-
检查密码重复
-
限制与用户名相关的密码
常见配置文件:
Bash/etc/security/pwquality.conf
部分系统也可以直接在PAM配置中设置参数。
2. pam_cracklib模块
早期Linux系统常使用:
Bashpam_cracklib.so
它同样用于密码复杂度检查。
例如:
Bashpassword requisite pam_cracklib.so retry=3 minlen=8
不过在较新的发行版中,pam_pwquality已经逐渐替代pam_cracklib。
三、安装密码质量检查模块
部分精简安装的Linux系统可能没有默认安装密码质量模块。
CentOS、Rocky Linux、AlmaLinux
可以执行:
Bashyum install libpwquality
或者:
Bashdnf install libpwquality
安装完成后,可以查看模块文件:
Bashls /usr/lib64/security/ | grep pwquality
Ubuntu、Debian系统
执行:
Bashapt install libpam-pwquality
安装后检查:
Bashls /lib/x86_64-linux-gnu/security/ | grep pwquality
四、通过pwquality.conf配置密码强度
推荐方式是修改:
Bash/etc/security/pwquality.conf
该文件集中管理密码策略,更方便维护。
常见配置如下:
confminlen = 12 minclass = 4 dcredit = -1 ucredit = -1 lcredit = -1 ocredit = -1 retry = 3
下面介绍各参数含义。
五、常用密码复杂度参数详解
1. 设置密码最小长度
参数:
confminlen = 12
表示密码至少需要12个字符。
例如:
允许:
Linux@2026Admin
不允许:
123456
企业环境通常建议密码长度不少于10到12位。
2. 设置字符类型数量
参数:
confminclass = 4
表示密码必须包含4类字符:
-
大写字母
-
小写字母
-
数字
-
特殊符号
例如:
Linux@2026Safe
包含:
-
L、S(大写)
-
inuxafe(小写)
-
2026(数字)
-
@(特殊字符)
符合要求。
3. 强制包含数字
参数:
confdcredit = -1
含义:
至少包含一个数字。
例如:
Server2026!
满足要求。
4. 强制包含大写字母
参数:
confucredit = -1
要求密码至少包含一个大写字母。
例如:
Admin@123
符合。
5. 强制包含小写字母
参数:
conflcredit = -1
要求密码至少包含一个小写字母。
6. 强制包含特殊字符
参数:
confocredit = -1
要求密码至少包含一个非字母数字字符。
例如:
Linux#2026
其中:
#
属于特殊字符。
六、配置PAM启用密码强度检查
仅修改:
Bash/etc/security/pwquality.conf
并不会自动生效,还需要在PAM配置中启用模块。
CentOS/RHEL系统
编辑:
Bash/etc/pam.d/system-auth
找到:
Bashpassword requisite pam_pwquality.so
如果不存在,可以添加:
Bashpassword requisite pam_pwquality.so retry=3
同时建议检查:
Bash/etc/pam.d/password-auth
确保存在:
Bashpassword requisite pam_pwquality.so retry=3
Ubuntu系统
编辑:
Bash/etc/pam.d/common-password
找到:
Bashpassword requisite pam_pwquality.so retry=3
如果不存在,添加:
Bashpassword requisite pam_pwquality.so retry=3
保存后即可生效。
七、限制用户不能使用旧密码
除了复杂度要求,密码历史管理也是重要安全措施。
Linux可以通过:
Bashpam_pwhistory.so
实现。
例如:
Bashpassword required pam_pwhistory.so remember=5
表示:
用户最近使用过的5个密码不能重复使用。
这样可以避免:
Password1 Password2 Password1
这种循环修改密码方式。
八、防止密码包含用户名信息
为了避免用户设置:
用户名:admin 密码:admin123
可以启用:
confusercheck = 1
配置:
conf/etc/security/pwquality.conf
添加:
confusercheck=1
系统会检查密码是否包含用户名。
九、设置密码最大有效期
密码安全不仅依赖复杂度,还需要定期更新。
可以通过:
Bash/etc/login.defs
配置:
confPASS_MAX_DAYS 90 PASS_MIN_DAYS 7 PASS_WARN_AGE 14
含义:
| 参数 | 说明 |
|---|---|
| PASS_MAX_DAYS | 密码最大使用天数 |
| PASS_MIN_DAYS | 两次修改密码间隔 |
| PASS_WARN_AGE | 到期提醒时间 |
例如:
confPASS_MAX_DAYS 90
表示密码90天后必须修改。
十、使用chage管理单个用户密码策略
对于特殊账户,可以单独设置。
查看用户密码状态:
Bashchage -l username
设置密码90天过期:
Bashchage -M 90 username
设置密码提前14天提醒:
Bashchage -W 14 username
立即要求修改密码:
Bashchage -d 0 username
十一、测试PAM密码策略是否生效
配置完成后,可以创建测试用户:
Bashuseradd testuser
设置密码:
Bashpasswd testuser
测试弱密码:
123456
如果配置正确,会提示:
BAD PASSWORD
例如:
密码太短 密码缺少数字 密码缺少特殊字符
然后测试符合要求的密码:
Linux@2026Secure
应该可以正常设置。
十二、修改PAM配置时的注意事项
PAM配置错误可能导致用户无法登录,因此修改前需要做好备份。
备份:
Bashcp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak
修改时注意:
1. 不要删除系统默认认证模块
例如:
Bashpam_unix.so
这是Linux本地账户认证的重要模块。
2. 避免直接锁死root账户
配置错误可能导致:
-
SSH无法登录
-
sudo失效
-
无法修改密码
建议:
-
保留一个已登录管理员终端
-
修改后立即测试
-
配置前做好恢复方案
3. 使用系统工具管理PAM
部分发行版提供:
Bashauthselect
用于管理认证配置。
例如:
Bashauthselect current
查看当前认证方案。
十三、企业环境推荐密码策略示例
一个较为安全的服务器密码策略:
confminlen = 12 minclass = 4 dcredit = -1 ucredit = -1 lcredit = -1 ocredit = -1 retry = 3 difok = 5 usercheck = 1
同时结合:
confPASS_MAX_DAYS 90 PASS_MIN_DAYS 7 PASS_WARN_AGE 14
实现:
-
密码长度控制
-
字符复杂度控制
-
历史密码限制
-
定期修改要求
-
用户关联检查
十四、常见问题排查
问题一:配置后密码仍然可以设置简单密码
检查:
Bashcat /etc/pam.d/system-auth
确认是否加载:
Bashpam_pwquality.so
同时确认:
Bashcat /etc/security/pwquality.conf
配置是否正确。
问题二:SSH登录突然失败
可能原因:
-
PAM配置语法错误
-
模块加载失败
-
认证链顺序错误
查看日志:
CentOS:
Bashtail -f /var/log/secure
Ubuntu:
Bashtail -f /var/log/auth.log
问题三:root修改密码失败
检查root密码是否符合:
-
最小长度
-
字符类型
-
历史限制
如果需要临时调整策略,可以修改配置后重新执行密码修改操作。
总结
Linux通过PAM实现密码强度策略是一种灵活、安全且标准化的管理方式。通过pam_pwquality模块,可以对密码长度、字符组成、用户名关联、历史密码等多个维度进行控制。
在实际服务器环境中,密码策略通常需要结合PAM配置、密码生命周期管理以及账户权限控制共同实施。合理配置PAM密码规则,不仅能够降低弱密码带来的安全风险,也能满足企业安全规范和等保要求。