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

Linux密码怎样加密存储?

Linux密码通过哈希算法(如SHA-512)加密,并加入随机盐值(salt)增强安全性,加密后的哈希值存储在 /etc/shadow文件中,验证时系统使用相同盐值重新计算哈希进行比对。

在Linux系统中,用户密码的安全性依赖于单向加密存储机制——系统存储的是密码的加密哈希值而非明文,且无法逆向解密,以下是详细技术原理和实践:


核心加密机制

  1. 存储位置
    加密后的密码存储在 /etc/shadow 文件中(仅root可读),格式为:
    用户名:加密字符串:最后修改日期:最小天数:最大天数:警告期:失效期:保留字段

    john:$6$sA1d8GgT$Fv5J...:19200:0:99999:7:::

  2. 加密字符串结构
    $id$salt$hashed 格式存储,包含三个关键部分:

    • id:算法标识符
      • $1$ → MD5 (已淘汰)
      • $5$ → SHA-256
      • $6$SHA-512(当前主流)
      • $y$Yescrypt(最新默认算法,如Ubuntu 22.04+)
    • salt:随机盐值(12-16字符),防止彩虹表攻击
    • hashed:盐值+密码的哈希计算结果

密码加密过程

当用户设置密码时,系统执行以下操作:

  1. 生成随机盐值(salt)(如 sA1d8GgT
  2. 将盐值与用户输入的密码拼接(如密码 123sA1d8gT123
  3. 使用指定算法(如SHA-512)计算哈希值
  4. 存储为 $6$sA1d8GgT$Fv5J... 格式

关键特性

Linux密码怎样加密存储?  第1张

  • 相同密码每次加密结果不同(盐值随机)
  • 哈希不可逆(无法通过 Fv5J... 还原 123
  • 验证时:用存储的盐值重新计算输入密码的哈希,比对结果

配置与算法升级

  1. 查看当前加密算法
    执行命令:

    authselect current | grep "Password hashing"
    # 或检查 /etc/login.defs 中的 ENCRYPT_METHOD 值
  2. 修改默认算法(需root权限)

    • 方法1:编辑 /etc/login.defs
      ENCRYPT_METHOD SHA512  # 改为 YESCRYPT 或 SHA256
    • 方法2:使用 authselect(现代系统推荐):
      authselect select sssd with-sha512 --force  # 示例
  3. 手动生成加密密码
    使用 opensslmkpasswd

    openssl passwd -6 -salt "随机盐值" 你的密码
    # 或
    mkpasswd -m sha-512 -S 盐值 密码

安全最佳实践

  1. 强制强密码策略

    • 安装 libpam-pwquality
      sudo apt install libpam-pwquality
    • 编辑 /etc/security/pwquality.conf 配置最小长度、复杂度等
  2. 防范暴力破解

    • 使用 fail2ban 监控登录尝试
    • 限制 /etc/shadow 权限为 640(root:shadow)
  3. 定期更新算法
    淘汰弱算法(如MD5),优先选择:

    • Yescrypt(抗GPU/ASIC破解)
    • Argon2(部分发行版支持)

常见问题解答

Q:Root能否查看用户密码?
→ 不能!仅能重置密码(passwd 用户名),无法获取原始密码。

Q:为何/etc/passwd中密码显示为x
→ 历史遗留设计,x 表示实际密码存储在 /etc/shadow 中。

Q:企业环境如何管理?
→ 集成 LDAPRADIUS 认证,避免本地密码存储。


技术依据与标准

  • 加密算法规范:NIST SP 800-63B (数字身份指南)
  • Linux实现:GNU C Library (glibc) 的 crypt() 函数
  • 最新算法:Yescrypt 被纳入 Linux PAM 作为默认(2020年后主流发行版)
  • 安全建议:遵循OWASP密码存储备忘单(2025)

重要提醒:加密≠绝对安全!需配合长密码、多因素认证(MFA)及系统加固。


通过以上机制,Linux实现了密码的安全存储,系统管理员应持续关注算法演进(如量子计算威胁),及时升级防护体系。

引用来源:

  1. Linux Programmer’s Manual – crypt(3)
  2. NIST Special Publication 800-63B
  3. OWASP Password Storage Cheat Sheet
  4. shadow(5) man page (文件格式定义)
0