Linux密码怎样加密存储?

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

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

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... 格式

关键特性

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

配置与算法升级

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

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

    Linux密码怎样加密存储?

    • 方法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 中。

Linux密码怎样加密存储?

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 (文件格式定义)

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/41489.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年6月29日 01:17
下一篇 2025年6月17日 06:55

相关推荐

  • Linux如何查服务状态

    使用 systemctl status 服务名 查看 Systemd 服务的运行状态。 ,对于 SysVinit 系统,可用 service 服务名 status。 ,通用方法:ps aux | grep 服务名 查找相关进程及其 PID。

    2025年6月23日
    000
  • Linux密码忘了怎么找回

    Linux系统用户密码以加密哈希值存储在/etc/shadow文件中,普通用户无权查看,即使是root用户,也只能看到加密后的字符串,无法直接获取原始明文密码,如需修改密码,请使用passwd或sudo passwd 用户名命令。

    2025年6月14日
    100
  • Linux安装tkinter失败怎么办

    在大多数Linux发行版中,通过包管理器安装python3-tk或tkinter包即可,Ubuntu/Debian使用sudo apt install python3-tk,CentOS/RHEL使用sudo yum install python3-tkinter或sudo dnf install python3-tkinter。

    2025年6月28日
    000
  • Linux如何创建文件软链接?

    在Linux中创建文件软链接使用ln -s命令,后接原始文件路径和目标链接路径,软链接类似快捷方式,指向原文件但不占用额外存储空间。

    2025年6月24日
    100
  • Linux系统句柄数超出限制怎么办?如何查看当前数值?

    查看Linux系统句柄数可通过命令lsof | wc -l统计当前打开文件数,或使用cat /proc/sys/fs/file-nr查看系统级句柄分配情况,检查用户限制使用ulimit -n,调整上限可修改limits.conf文件或sysctl参数。

    2025年5月29日
    300

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN