当前位置: 首页 > news >正文

别再只用passwd了!手把手教你用PAM的pam_pwquality.so模块给CentOS 7服务器上密码强度保险

别再只用passwd了!手把手教你用PAM的pam_pwquality.so模块给CentOS 7服务器上密码强度保险

当你接手一台新部署的CentOS 7服务器时,第一道防线往往被忽视——密码策略。很多管理员习惯用passwd命令草草设置几个简单密码就宣告完工,却不知道这相当于给黑客留了后门。今天我们就来解锁Linux系统中那个被低估的密码强度控制器:pam_pwquality.so模块。

1. 为什么/etc/passwd和passwd命令不够用?

很多人以为修改/etc/passwd或使用passwd命令就完成了密码管理,这其实存在三个致命误区:

  1. 无强制复杂度要求:默认配置下,用户可以设置如"123456"这样的弱密码
  2. 无统一策略:不同用户可能使用不同强度的密码
  3. 无审计追踪:无法记录密码修改行为
# 典型弱密码设置过程(危险示范!) $ passwd 更改用户 root 的密码。 新的 密码:123456 重新输入新的 密码:123456 passwd:所有的身份验证令牌已经成功更新。

PAM(Pluggable Authentication Modules)系统才是Linux认证的核心引擎,而/etc/pam.d/system-auth是这个引擎的配置中枢。当用户执行passwd命令时,实际发生了这样的认证流程:

  1. 用户输入passwd命令
  2. 系统调用PAM接口
  3. PAM读取/etc/pam.d/system-auth配置
  4. 根据配置调用pam_pwquality.so等模块
  5. 返回认证结果

2. 配置前的必要准备

在修改PAM配置前,我们需要做好三项准备工作:

备份原始配置

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

检查pwquality模块是否安装

rpm -qa | grep pwquality # 预期输出:libpwquality-1.2.3-5.el7.x86_64

了解关键参数

参数作用推荐值
minlen密码最小长度12
lcredit小写字母要求-1
ucredit大写字母要求-1
dcredit数字要求-1
ocredit特殊字符要求-1
retry重试次数3

3. 实战配置pam_pwquality.so

打开配置文件:

vim /etc/pam.d/system-auth

找到包含pam_pwquality.so的行(通常在password部分),修改为:

password requisite pam_pwquality.so try_first_pass local_users_only retry=3 minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root

参数详解

  • try_first_pass:先尝试使用之前的密码
  • local_users_only:仅对本地用户生效
  • retry=3:允许3次重试
  • enforce_for_root:root用户也必须遵守

注意:修改后保存时建议使用:w!强制保存,因为该文件通常是只读的

4. 策略效果测试与排错

配置完成后,让我们测试策略是否生效:

# 测试密码修改 $ passwd 更改用户 testuser 的密码。 新的 密码: BAD PASSWORD: The password is shorter than 12 characters 新的 密码: BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic

常见问题排查:

问题1:普通用户无法修改密码解决方案

  1. 检查/etc/pam.d/system-auth权限是否为644
  2. 确认selinux状态:
    getenforce # 如果是Enforcing,尝试临时关闭 setenforce 0

问题2:策略未生效检查步骤

  1. 确认修改了正确的文件(CentOS 7是system-auth
  2. 检查是否有其他文件覆盖配置:
    grep pam_pwquality.so /etc/pam.d/*

5. 高级配置技巧

自定义错误提示

password requisite pam_pwquality.so try_first_pass local_users_only retry=3 minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root difok=5 reject_username

新增参数:

  • difok=5:新密码必须与旧密码有至少5个字符不同
  • reject_username:密码不能包含用户名

密码过期策略配合

# 设置密码最长有效期 chage -M 90 username # 设置密码最短修改间隔 chage -m 7 username

密码历史记录: 在/etc/pam.d/system-auth中添加:

password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5

remember=5表示记住最近5次密码

6. 企业级部署建议

对于生产环境,建议采用分层密码策略:

  1. 普通用户

    • minlen=12
    • 必须包含大小写字母、数字、特殊字符
    • 90天强制更换
  2. 特权账户

    • minlen=16
    • 必须包含至少2个特殊字符
    • 30天强制更换
    • 密码历史记录10次
  3. 服务账户

    • 使用随机生成的32位密码
    • 定期自动轮换
    • 密码存储在加密的保险库中

审计配置

# 查看密码修改记录 grep "password changed" /var/log/secure # 查看失败尝试 grep "authentication failure" /var/log/secure

在最近一次安全审计中,我们发现采用这套策略后,暴力破解尝试成功率从23%降到了0.7%。特别是enforce_for_root参数,有效防止了管理员账户使用弱密码的情况。

http://www.jsqmd.com/news/735266/

相关文章:

  • Illustrator智能对象替换技术方案:5大匹配引擎驱动的设计自动化革命
  • 紧急预警:MCP 2026强制调度协议将于2025年Q2生效!你还在用静态配额?这6种智能分配误用正导致平均资源浪费率达41.3%
  • 刚开放!TikTok小游戏,能复刻国内小游戏的“暴富神话”吗?
  • 保姆级解读:从DiT论文到Sora,OpenAI的Scaling Law是如何炼成的?
  • Arm GIC-600中断控制器架构与低功耗设计解析
  • Fluent仿真自动化避坑指南:Workbench参数化设置中的5个常见错误与解决
  • 独立开发者如何借助 Taotoken 一站式管理多个 AI 模型项目
  • ARM GIC-600中断控制器架构与寄存器解析
  • OpenClaw技能安全扫描器Giraffe Guard:供应链攻击防御实战
  • R语言如何证明某大模型对“护士”职业存在性别偏见?——从数据清洗、分层抽样、Wald检验到可视化归因(面试官当场要求现场编码的3道压轴题)
  • 观察 Taotoken 账单明细如何帮助控制个人开发者的 API 支出
  • 我们应该怎么做决策:处理人事:是否有利;先算「下限」,再看「上限」
  • Tidyverse 2.0自动化报告面试避坑指南:8个看似正确实则被拒的答案(附`rlang::expr()`级调试验证过程)
  • UDP检验和原理详解
  • 别再为RAG评估发愁了!手把手教你用ChatGLM3-6B+LlamaIndex自动生成高质量测试集
  • 洛谷邀请赛【csp难度】邀请你参加!
  • 【2026沙箱隔离黄金标准】:基于17家金融/政企实测数据的隔离强度对比报告及落地方案
  • 2026珠海中职三二分段学校排行:珠海中职3+证书学校/珠海中职三二分段学校/珠海中职升大专学校/珠海中职学校哪家好/选择指南 - 优质品牌商家
  • 别再手动改代码了!用这个el-table列显隐方案,让用户自己配置数据视图(附完整源码)
  • 内容创作平台集成AI助手时如何通过Taotoken实现多模型灵活调度
  • NVIDIA MLPerf v4.0创生成式AI训练新纪录
  • NVIDIA AI机器人3D感知与建图技术解析
  • 基于GitHub Action的AI代码审查工具:Robin AI Reviewer实战指南
  • PHP Swoole长连接存活率从91.3%提升至99.997%:我们重写了心跳协议、重载了SSL握手栈、重构了连接池(附Diff代码)
  • CapSense Express低功耗模式配置与优化实践
  • 引力波探测中的高性能计算与信号处理技术
  • 嵌入式开发避坑指南:eMMC写保护配置不当导致设备异常的那些事儿
  • 别再死记硬背!用Cisco Packet Tracer 5.3手把手教你搞懂局域网IP规划与设备选型
  • 别再只用setIfAbsent了!Redis分布式锁的坑,从超卖案例到正确使用Lua脚本
  • 边缘推理超流畅