密码存储位置与历史演变
-
/etc/shadow
文件- 所有用户密码的加密哈希值存储于此(仅root可读)。
- 示例条目:
user1:$6$s4lt1234...:19485:0:99999:7:::
$6
表示SHA-512算法,s4lt1234
为盐值(salt),后续长字符串为加密后的密码哈希。
-
从
/etc/passwd
到/etc/shadow
的演进
早期密码存于/etc/passwd
(全局可读),易受暴力破解,现代Linux系统改用/etc/shadow
隔离存储,增强安全性。
加密机制详解
-
加盐哈希(Salted Hash)
- 盐值(Salt):系统为每个密码随机生成12字符的字符串(如
$6$s4lt1234
)。 - 作用:即使相同密码,因盐值不同也会产生完全不同的哈希值,抵御彩虹表攻击。
- 盐值(Salt):系统为每个密码随机生成12字符的字符串(如
-
加密算法
通过$X
标识算法(X
为数字):$1
:MD5(已淘汰)$5
:SHA-256$6
:SHA-512(现代Linux默认算法)$y
:Yescrypt(部分新版系统支持)
加密过程:哈希值 = 算法(盐值 + 用户密码)
系统配置与工作流程
-
算法选择配置
文件/etc/login.defs
定义默认加密方式:ENCRYPT_METHOD SHA512 # 指定SHA-512为默认算法
-
密码设置流程
用户执行passwd
命令时:- 步骤1:系统生成随机盐值。
- 步骤2:将盐值与用户输入的明文密码组合。
- 步骤3:使用指定算法(如SHA-512)生成哈希值。
- 步骤4:将
$算法ID$盐值$哈希值
存入/etc/shadow
。
安全验证过程
用户登录时:
- 输入明文密码。
- 系统从
/etc/shadow
提取该用户的盐值和算法类型。 - 重新计算哈希:用相同盐值+输入密码生成新哈希。
- 比对结果:新哈希与存储的哈希一致则验证通过。
关键安全实践
-
强制强密码策略
使用pam_pwquality
模块设置复杂度规则(最小长度、混合字符等)。 -
定期更新算法
检查/etc/login.defs
中的ENCRYPT_METHOD
,优先使用SHA-512或Yescrypt。 -
拒绝弱加密
禁用DES($1
)等老旧算法:authconfig --passalgo=sha512 --update # CentOS/RHEL
查看与验证方法
-
检查用户加密类型:
sudo grep 'user1' /etc/shadow | cut -d':' -f2 | awk -F'$' '{print $2}'
输出
6
代表SHA-512。 -
手动生成哈希值(验证原理):
openssl passwd -6 -salt "s4lt1234" "你的密码" # -6指定SHA-512
Linux通过加盐哈希(如SHA-512)和隔离存储(/etc/shadow
)保障密码安全,其核心优势在于:
- 单向加密:哈希不可逆推明文。
- 唯一盐值:相同密码产生不同结果。
- 算法可升级:随技术发展替换更安全的加密方式。
用户应启用强密码策略并定期更新系统,以应对日益复杂的攻击手段。
引用说明:本文内容基于Linux内核文档(kernel.org)、
shadow-utils
源码包及NIST密码学标准(SP 800-132)综合整理。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/41534.html