Linux PAM 密码复杂度与历史密码记录指南

轻晨姑娘_2578

轻晨姑娘_2578

2026-06-16

288人浏览

原创

linux密码复杂度真正起效的是pam_pwquality.so模块配置,而非/etc/login.defs中的pass_min_len;需在/etc/pam.d/common-password(debian/ubuntu)或system-auth(rhel/centos)中添加password requisite pam_pwquality.so retry=3 minlen=12 difok=4 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 maxrepeat=3 reject_username enforce_for_root,并配合pam_pwhistory.so remember=24及login.defs中pass_max_days 90等参数实现完整策略。

linux pam 密码复杂度与历史密码记录指南

密码复杂度靠 pam_pwquality.so 控制

Linux 系统真正起效的密码强度规则,不是写在 /etc/login.defs 里的 PASS_MIN_LEN,而是由 PAM 模块 pam_pwquality.so 执行。该模块默认已预装于 Ubuntu 20.04+、RHEL 8+ 等现代发行版;老系统如 CentOS 7 可能用 pam_cracklib.so,但建议升级或统一使用 pwquality。

核心配置位置是:
– Debian/Ubuntu:/etc/pam.d/common-password
– RHEL/CentOS:/etc/pam.d/system-auth 或 /etc/pam.d/password-auth

在对应文件中添加或修改这一行(放在其他 password 模块之前):

password requisite pam_pwquality.so retry=3 minlen=12 difok=4 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 maxrepeat=3 reject_username enforce_for_root

关键参数含义:

  • minlen=12:基础最小长度为 12 位(注意:若字符类别未达标,实际要求会自动加长)
  • dcredit=-1 等四类 credit:分别强制至少含 1 位数字、大写字母、小写字母、特殊字符
  • difok=4:新密码与旧密码至少 4 个字符不同
  • maxrepeat=3:禁止连续 4 个及以上相同字符(如 aaaa 被拒,aaabbb 允许)
  • reject_username:密码不得包含用户名或其大小写反转
  • enforce_for_root:root 用户同样受约束

历史密码记录靠 pam_pwhistory.so 实现

仅防弱密码不够,还需防“换汤不换药”——反复重用旧密码。这由 pam_pwhistory.so 模块完成,它将旧密码哈希存入 /etc/security/opasswd。

在同一个 PAM 配置文件(如 /etc/pam.d/common-password)中,紧接在 pam_pwquality.so 行之后添加:

password [success=1 default=ignore] pam_unix.so use_authtok sha512 shadow
password required pam_pwhistory.so remember=24 use_authtok enforce_for_root

说明:

  • remember=24:保存最近 24 次密码哈希,新密码不得与其中任一重复
  • use_authtok:确保复用已有认证令牌,避免二次提示输密
  • enforce_for_root:使 root 用户也纳入历史检查

首次启用前,手动创建空文件并设权限:

onewo-rtlinux
onewo-rtlinux

Linux 实时编程助手。生成、审查并修改用于周期性控制任务和中断驱动程序的 C 代码。强制实施实时调度策略。

下载

sudo touch /etc/security/opasswd && sudo chmod 600 /etc/security/opasswd

生命周期与全局策略要协同设置

密码有效期、提醒天数等时间类策略,由 /etc/login.defs 定义全局默认值,并通过 chage 命令对单个用户微调。

编辑 /etc/login.defs,确保以下三行未被注释且数值合理:

  • PASS_MAX_DAYS 90:密码最长有效 90 天
  • PASS_MIN_DAYS 7:两次改密至少间隔 7 天(防绕过)
  • PASS_WARN_AGE 7:到期前 7 天开始登录时提醒

对已有用户批量应用:

sudo chage -M 90 -m 7 -W 7 username

服务账户可禁用过期(如数据库账号):

sudo chage -E -1 username

验证是否真正生效,不能只看配置

改完配置后务必实测,否则策略可能因加载顺序、模块冲突或条件判断被跳过。

测试步骤:

  • 用普通用户执行 passwd,尝试设 Abc123!(太短)、MyPass123(缺特殊符)、john123!(含用户名)——应全部被拒绝
  • 成功设一个合规密码后,立刻再设相同密码,应提示 “already used”
  • 检查日志确认拦截行为:
    Ubuntu/Debian 查 /var/log/auth.log,
    RHEL/CentOS 查 /var/log/secure,搜索 pam_pwquality 或 pam_pwhistory

若失败,优先排查:
– 是否改错了 PAM 文件(如改了 common-password,但 SSH 登录实际走 sshd → system-auth)
– 是否存在重复加载同一模块导致逻辑覆盖
– 是否遗漏 use_authtok 导致流程中断

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3650

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3193

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2253

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5390

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5042

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3013

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2525

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

2739

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

277

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习