如何linux的shadow

Linux 中,/etc/shadow 存储加密密码,仅 root 可读写;用 passwd 命令修改用户密码,勿直接编辑该

/etc/shadowLinux 系统中至关重要的安全机制核心组件,其设计目标是隔离敏感的用户密码数据,并将其与存储基础账户信息的 /etc/passwd 文件分离,这种分离显著提升了系统的安全性,因为传统上所有用户都可读的 /etc/passwd 包含未加密的密码(早期版本),攻击者一旦获取该文件即可尝试破解密码,而 /etc/shadow 仅允许超级用户 (root) 和极少数特权进程读取,从而有效保护了密码哈希值及其他关键安全参数,以下是对其功能、结构、管理及安全实践的深度解析:

如何linux的shadow


核心作用与安全价值

  1. 密码存储中枢
    存储经加密算法处理后的用户密码哈希值(而非明文),支持多种现代哈希算法(如 SHA-256, SHA-512)。
  2. 账户状态控制
    定义账户是否被锁定 (L)、密码过期状态 (NP/P)、最后一次密码变更时间等元数据。
  3. 密码策略强制执行
    通过字段约束实现最小/最大密码年龄、提前警告期等策略,强制用户定期更新密码。
  4. 防暴力破解增强
    结合 PAM(可插拔认证模块)限制登录尝试次数,延迟响应时间,进一步降低字典攻击风险。

文件结构详解(以标准行为例)

字段序号 内容示例 含义
root 用户名,必须与 /etc/passwd 完全匹配
$6$rounds=656000$... 加密密码哈希值
格式:$ID$SALT$HASH
ID标识算法类型(如6=SHA-512)
18576 上次密码修改天数(距1970年1月1日的天数)
0 最小密码有效期(天)
设为0表示立即可更改
99999 最大密码有效期(天)
设为99999≈无限期
7 密码过期前警告天数
用户将在7天后收到变更提示
-1 密码过期后宽限期(天)
-1表示禁止过期后仍能登录
-1 账户禁用天数(自过期日起)
-1表示不自动启用
0 保留字段,暂未使用
/bin/bash 登录Shell路径(实际由 /etc/passwd 决定)

关键状态标记解析

标记位置 取值 含义
前置符 本地无有效密码(仅用于外部认证如LDAP)
前置符 账户被锁定
第⑦字段 -1 密码永不过期
第⑧字段 0 密码过期后立即禁用账户

核心管理命令与操作示例

修改密码 & 更新 shadow

# 交互式修改密码(自动同步至 shadow)
passwd alice
# 批量非交互式修改(适用于脚本)
echo "alice:NEW_SECURE_PASSWORD" | chpasswd

原理passwd 命令会重新计算新密码的哈希值,并更新 /etc/shadow 对应行的第二个字段。

账户锁定/解锁

# 锁定账户(在哈希前加感叹号)
passwd -l bob       # → /etc/shadow: bob:!$6$...
# 解锁账户(移除感叹号)
passwd -u bob       # → /etc/shadow: bob:$6$...

⚠️ 注意:直接编辑 /etc/shadow 需使用 vipw 命令(安全编辑器),手动修改可能导致语法错误!

查看指定用户影子条目

sudo grep ^username /etc/shadow
# 输出示例:alice:$6$randomSaltValueHere...:18576:0:99999:7:::

替代方案getent shadow username(更规范且跨平台)

重置密码为空(慎用!)

# 生成空密码哈希(仅用于特殊场景)
openssl passwd -1 '' | cut -d: -f2 | sudo tee /etc/shadow.d/temp && sudo visudo -f && sudo su user # 此操作极高危!

📌 警告:空密码会使账户极易被攻破,生产环境严禁使用!

如何linux的shadow


安全配置最佳实践

策略维度 推荐配置 实现命令
密码复杂度 启用强复杂度策略 编辑 /etc/security/pwquality.conf
设置 minlen=14, ucredit=-1, dcredit=-1
历史记录清理 禁止重用最近10次密码 pwhistory remember=10
默认策略 新用户创建时强制复杂密码 useradd -p $(openssl passwd -6 mysecurepass) newuser
日志审计 记录密码变更事件 确保 auditd 服务运行且规则包含 key=password-change
访问控制 限制物理访问 + SSH密钥认证 禁用密码登录:visudoers 注释掉 PasswordAuthentication yes

常见故障排查

场景1:密码正确但无法登录

🔍 可能原因

  • 账户被锁定(检查 /etc/shadow 是否有 前缀)
  • 密码过期且未及时更改(查看第③字段是否小于当前时间戳)
  • SELinux/AppArmor 阻止了认证进程
  • PAM 配置冲突(检查 /etc/pam.d/system-auth

🔧 解决方案

# 检查账户状态
getent shadow userA
# 如果显示 !开头,执行解锁:
passwd -u userA
# 若密码过期,强制用户下次登录时更改:
chage -E -1 userA  # 设置为永不过期(临时补救)

场景2:passwd: Authentication token manipulation error

💡 根本原因/etc/shadow 文件损坏或权限错误。
🛠️ 修复步骤

# 检查文件完整性
cksum /etc/shadow > /tmp/shadow.checksum
# 对比原始安装包中的校验值(RPM/Debian包提供)
# 若校验失败,从备份恢复:
sudo cp /backup/etc/shadow /etc/shadow
# 修复权限:
sudo chown root:root /etc/shadow && chmod 600 /etc/shadow

相关问答FAQs

Q1: 如何在不显示明文的情况下查看用户的密码策略?

:使用 chage -l [用户名] 命令,该命令会显示密码有效期、最后修改时间、过期警告天数等信息,但不会泄露密码哈希值。

如何linux的shadow

$ chage -l alice
Last password change        : Aug 15, 2023
Password expires            : never
Password inactive           : never
Account expires         : never
Minimum number of days between password change  : 0
Maximum number of days between password change  : 99999
Number of days of warning before password expires   : 7

Q2: 如果误删了 /etc/shadow 文件该怎么办?

⚠️ :立即采取以下紧急措施:

  1. 停止所有登录会话systemctl stop getty@tty[1-6].service(物理机)或封禁SSH端口。
  2. 从备份恢复:若有近期备份,直接复制回原位置:sudo cp /backup/etc/shadow /etc/shadow
  3. 重建基础条目:若无备份,需为每个用户重新设置密码:passwd username,系统会自动生成新条目。
  4. 验证权限:确保文件属主为 root:root,权限为 600sudo chown root:root /etc/shadow && chmod 600 /etc/shadow
  5. 重启必要服务systemctl start getty@tty[1-6].service(物理机)或重新开放SSH。

📌 重要提示:此操作会导致所有用户密码失效,必须在救援模式下执行!建议日常定期备份 /etc/shadow 文件

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

(0)
酷盾叔的头像酷盾叔
上一篇 2025年8月7日 07:53
下一篇 2025年8月7日 08:03

相关推荐

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN