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

Linux密码加密机制如何?

Linux用户密码经哈希算法(如SHA-512)加密后存储在/etc/shadow文件中,原始密码不可恢复。

密码存储位置与历史演变

  1. /etc/shadow文件

    • 所有用户密码的加密哈希值存储于此(仅root可读)。
    • 示例条目:
      user1:$6$s4lt1234...:19485:0:99999:7:::
      $6 表示SHA-512算法,s4lt1234为盐值(salt),后续长字符串为加密后的密码哈希。
  2. /etc/passwd/etc/shadow的演进
    早期密码存于/etc/passwd(全局可读),易受暴力破解,现代Linux系统改用/etc/shadow隔离存储,增强安全性。


加密机制详解

  1. 加盐哈希(Salted Hash)

    • 盐值(Salt):系统为每个密码随机生成12字符的字符串(如 $6$s4lt1234)。
    • 作用:即使相同密码,因盐值不同也会产生完全不同的哈希值,抵御彩虹表攻击。
  2. 加密算法
    通过$X标识算法(X为数字):

    • $1:MD5(已淘汰)
    • $5:SHA-256
    • $6SHA-512(现代Linux默认算法)
    • $y:Yescrypt(部分新版系统支持)
      加密过程:哈希值 = 算法(盐值 + 用户密码)

系统配置与工作流程

  1. 算法选择配置
    文件/etc/login.defs定义默认加密方式:

    Linux密码加密机制如何?  第1张

    ENCRYPT_METHOD SHA512  # 指定SHA-512为默认算法
  2. 密码设置流程
    用户执行passwd命令时:

    • 步骤1:系统生成随机盐值。
    • 步骤2:将盐值与用户输入的明文密码组合。
    • 步骤3:使用指定算法(如SHA-512)生成哈希值。
    • 步骤4:将$算法ID$盐值$哈希值存入/etc/shadow

安全验证过程

用户登录时:

  1. 输入明文密码。
  2. 系统从/etc/shadow提取该用户的盐值和算法类型。
  3. 重新计算哈希:用相同盐值+输入密码生成新哈希。
  4. 比对结果:新哈希与存储的哈希一致则验证通过。

关键安全实践

  1. 强制强密码策略
    使用pam_pwquality模块设置复杂度规则(最小长度、混合字符等)。

  2. 定期更新算法
    检查/etc/login.defs中的ENCRYPT_METHOD,优先使用SHA-512或Yescrypt。

  3. 拒绝弱加密
    禁用DES($1)等老旧算法:

    authconfig --passalgo=sha512 --update  # CentOS/RHEL

查看与验证方法

  1. 检查用户加密类型

    sudo grep 'user1' /etc/shadow | cut -d':' -f2 | awk -F'$' '{print $2}'

    输出6代表SHA-512。

  2. 手动生成哈希值(验证原理)

    openssl passwd -6 -salt "s4lt1234" "你的密码"  # -6指定SHA-512

Linux通过加盐哈希(如SHA-512)和隔离存储(/etc/shadow)保障密码安全,其核心优势在于:

  • 单向加密:哈希不可逆推明文。
  • 唯一盐值:相同密码产生不同结果。
  • 算法可升级:随技术发展替换更安全的加密方式。
    用户应启用强密码策略并定期更新系统,以应对日益复杂的攻击手段。

引用说明:本文内容基于Linux内核文档(kernel.org)、shadow-utils源码包及NIST密码学标准(SP 800-132)综合整理。

0