Linux命令-pwunconv(从影子密码返回传统密码)
2026/6/26 18:47:28 网站建设 项目流程

Linux命令-pwunconv(从影子密码返回传统密码)

    • 快速参考
    • ⚠️ 安全警告
    • 命令语法
    • 工作原理
    • 实战示例
      • 1. 执行前检查
      • 2. 执行与回滚
      • 3. 何时可能需要 pwunconv
      • 4. 安全性对比
      • 5. 替代方案
    • 发行版差异
    • pwconv vs pwunconv 对比
    • 总结

快速参考

pwunconvpwconv的反操作——它将/etc/shadow中的加密密码哈希迁移回/etc/passwd,撤销影子密码机制。这是一个降低系统安全性的操作,仅在极其特殊的情况下才需要使用,绝大多数情况下应避免执行。

pwunconv就像把保险柜里的贵重物品(密码哈希)搬回公共走廊(所有人可读的/etc/passwd)。除非你有极其充分的理由(如兼容某个远古应用),否则永远不要这样做。

⚠️ 安全警告

执行 pwunconv 会显著降低系统安全性!

  • 密码哈希将从仅 root 可读的/etc/shadow移到所有人可读的/etc/passwd
  • 任何能读取/etc/passwd的用户都可以获取密码哈希
  • 这大大增加了离线暴力破解的风险
  • 现代系统依赖/etc/shadow的 PAM 配置可能受影响
# ⚠️ 确认你在做什么$sudopwunconv# 回滚:立即重新创建影子密码$sudopwconv# 验证恢复成功$sudocat/etc/shadow|head-3root:$6$...:19000:0:99999:7::: $grep'^root:'/etc/passwd root:x:0:0:root:/root:/bin/bash# ^ 密码字段回到 'x'(影子密码)

命令语法

pwunconv [选项]

工作原理

pwunconv 的处理流程: 1. 读取 /etc/shadow 中的密码哈希 2. 将密码哈希写回 /etc/passwd 对应行的密码字段 3. 删除 /etc/shadow 文件(或清空) 4. 此时 /etc/passwd 中密码字段不再是 'x'

实战示例

1. 执行前检查

# 检查当前状态$ls-l/etc/shadow -rw-r-----1root shadow2048Jun1410:00 /etc/shadow $head-3/etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin $wc-l/etc/shadow42/etc/shadow# 备份(执行 pwunconv 前必须!)$sudocp/etc/passwd /etc/passwd.backup $sudocp/etc/shadow /etc/shadow.backup $sudocp/etc/group /etc/group.backup# 建议也备份$sudocp/etc/gshadow /etc/gshadow.backup# 建议也备份# 手动备份的恢复方式$sudocp/etc/passwd.backup /etc/passwd $sudocp/etc/shadow.backup /etc/shadow $sudochownroot:shadow /etc/shadow $sudochmod640/etc/shadow

2. 执行与回滚

# ⚠️ 执行 pwunconv(有警告,但你已备份)$sudopwunconv# 检查变化$ls-l/etc/shadow ls: cannot access'/etc/shadow':No suchfileor directory# /etc/shadow 已被删除$head-3/etc/passwd root:$6$kVdNEZBT$HVSZpR...:0:0:root:/root:/bin/bash# ^^^^^^^^^^^^^^^^^^^^^^^^ 密码哈希现在在这里!$stat/etc/passwd# 注意:/etc/passwd 仍然所有人可读!$ls-l/etc/passwd -rw-r--r--1root root4096Jun1410:30 /etc/passwd# 644 权限!所有用户都能读取密码哈希!# ⚠️ 这是一个严重的安全漏洞!立即回滚!$sudopwconv# 验证回滚成功$ls-l/etc/shadow -rw-r-----1root shadow2048Jun1410:31 /etc/shadow $grep'^root:'/etc/passwd root:x:0:0:root:/root:/bin/bash# ^ 密码字段恢复为 'x'

3. 何时可能需要 pwunconv

# 极少数的合理场景:# 场景1:古老 Unix 系统的兼容性测试# 某些 1990 年代的 Unix 应用可能硬编码读取 /etc/passwd 中的密码字段# 在隔离的测试环境中执行$sudopwunconv# 测试应用...$sudopwconv# 测试后立即恢复# 场景2:特定 SIP/VoIP 系统# 部分 Asterisk 旧版本配置可能需要读取 passwd 中的密码# 但现代版本已支持 /etc/shadow# ⚠️ 场景3:千万不要因为"方便脚本读取密码"而用 pwunconv!# 正确做法:让脚本以 root 权限运行(用 sudo)读取 /etc/shadow$sudocat/etc/shadow|grepalice# 正确!# 而不是 pwunconv → 读 /etc/passwd → pwconv# 对于需要密码验证的程序:# 使用 PAM(libpam)进行认证,不要自己解析密码文件

4. 安全性对比

# 创建演示脚本:密码哈希的暴露风险$cat>security_demo.sh<<'SCRIPT' #!/bin/bash echo "=== 影子密码模式(安全)===" echo "/etc/passwd 中的密码:" grep '^test:' /etc/passwd | cut -d: -f2 echo " → 只显示 'x',无密码哈希" echo "" echo "=== 传统密码模式(不安全)===" echo "如果执行 pwunconv,任何用户可以看到:" echo 'root:$6$salt$longhash...:0:0:root:/root:/bin/bash' echo " → 密码哈希暴露给所有用户!" SCRIPT$bashsecurity_demo.sh

5. 替代方案

# 替代1:使用 PAM 进行认证# Python 示例(使用 pam 模块)$ python3-c" import pam p = pam.pam() result = p.authenticate('alice', 'password123') print('Authenticated' if result else 'Failed') "# 替代2:使用 getent 查询用户信息$ getentpasswdalice alice:x:1000:1000:Alice,,,:/home/alice:/bin/bash# 非 root 用户只能看到 'x'$ getent shadow alice# 非 root 用户无权限查看# 替代3:使用 su/sudo 验证密码$su- alice-c'echo "Password OK"'# 需要交互输入密码# 替代4:密码过期/锁定等操作用 passwd 命令$sudopasswd-lalice# 锁定账户(无需动 shadow)$sudopasswd-Salice# 查看状态

发行版差异

发行版命令位置默认行为
Debian/Ubuntu/usr/sbin/pwunconv删除 /etc/shadow
RHEL/CentOS/Fedora/usr/sbin/pwunconv删除 /etc/shadow
Arch Linux/usr/bin/pwunconv删除 /etc/shadow
Alpine Linux/usr/sbin/pwunconv(shadow 包)删除 /etc/shadow

所有发行版行为一致。某些发行版可能将/etc/shadow重命名为/etc/shadow-而非完全删除。

pwconv vs pwunconv 对比

特性pwconvpwunconv
方向passwd → shadowshadow → passwd
安全性提升(推荐)降低(不推荐)
shadow 文件创建/更新删除/清空
使用频率系统安装时运行一次极少使用
影响无负面影响增加安全风险

总结

pwunconv 是一个应该被锁在"紧急破坏工具"抽屉里的命令。

  • 它的作用是撤销影子密码(shadows password)机制
  • 执行后密码哈希暴露给所有用户 → 安全隐患大幅增加
  • 几乎没有任何现代场景需要执行它
  • 如果必须使用,记得:先备份,用完立刻 pwconv 恢复
  • 正确的密码验证方式应该通过 PAM,而非直接读取/etc/passwd/etc/shadow

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询