插件窝 干货文章 Linux系统中的用户密码存储机制解析

Linux系统中的用户密码存储机制解析

密码 哈希 shadow 天数 131    来源:    2025-04-08

Linux系统的用户密码存储机制设计兼顾安全性与灵活性,其核心原理和配置要点如下:


一、密码存储位置

  1. 传统文件

    • /etc/passwd:存储用户基本信息(UID、GID、家目录等),历史版本中密码以x占位符表示,实际密码已迁移至/etc/shadow
    • /etc/shadow仅root可读,存储加密后的密码及策略信息,格式为: username:加密密码:最后修改天数:最小天数:最大天数:警告天数:失效天数:保留字段
  2. 现代扩展

    • LDAP/Active Directory:企业环境中可能使用网络目录服务集中管理账户。

二、加密算法演进

  1. 加密方式标识
    shadow文件中密码字段以$id$salt$hash格式存储,id表示算法类型:

    • $1$:MD5(已淘汰)
    • $2a$/$2y$:Blowfish
    • $5$:SHA-256(推荐)
    • $6$:SHA-512(最安全)
    • 无前缀:DES加密(极不安全,仅兼容旧系统)
  2. 示例解析

    user1:$6$s4ltv4lue$F3K...长哈希...Xr0:19000:0:60:7:10::
    
    • 算法:SHA-512 ($6$)
    • Salt:s4ltv4lue(防止彩虹表攻击)
    • 哈希值:F3K...Xr0

三、关键安全机制

  1. Salt机制

    • 每个密码添加随机salt(通常8-16字符),相同密码因salt不同会产生不同哈希值,有效防御彩虹表攻击。
  2. Shadow文件保护

    • 权限设置为640(root可读写,shadow组可读): bash chmod 640 /etc/shadow chown root:shadow /etc/shadow
  3. 密码策略控制

    • 通过/etc/login.defs设置全局策略(密码有效期等)
    • 使用chage命令修改用户策略: bash chage -M 90 -W 7 user1 # 强制90天修改密码,提前7天警告

四、配置与故障处理

  1. 修改加密算法
    编辑/etc/login.defs或使用authconfig工具(RHEL系):

    authconfig --passalgo=sha512 --update
    
  2. 密码锁定与解锁

    • 锁定账户: bash passwd -l user1 # 密码前添加"!!"
    • 解锁账户: bash passwd -u user1
  3. 故障排查

    • 密码验证失败时检查:
      • /etc/nsswitch.conf确认账户来源(files/ldap等)
      • pwckgrpck验证文件完整性

五、最佳实践建议

  1. 强制使用SHA-512(避免MD5/DES)
  2. 定期更换salt机制(部分发行版自动处理)
  3. 结合PAM模块实现多因素认证
  4. 监控shadow文件变更(通过inotify或auditd)

通过理解Linux密码存储机制,管理员可有效提升系统认证安全性。如需深度防御,建议结合SELinux、fail2ban等工具构建多层防护体系。