pwconv启用shadow机制,将密码从/etc/passwd移至/etc/shadow并保持密码字段为x;pwunconv则反向操作,删除shadow文件并将密码写回passwd,导致密码策略丢失且降低安全性。

pwconv 和 pwunconv 是 Linux 中管理 shadow 密码机制的核心工具,一个用于启用影子口令(把密码从 /etc/passwd 移到 /etc/shadow),另一个用于关闭它(把密码移回 /etc/passwd)。它们不直接修改密码,而是同步用户账户元数据与密码存储位置,属于系统级安全配置操作。
pwconv:启用 shadow 密码机制
执行 pwconv 会检查 /etc/passwd 中密码字段是否为 x(表示已启用投影),然后:
- 若
/etc/shadow不存在,就新建它,并将所有含x的用户条目对应加密密码(从原 passwd 密文字段或密钥环提取)写入 shadow; - 若
/etc/shadow已存在,则按 passwd 主键增删条目:passwd 有而 shadow 没有的,补上;shadow 有而 passwd 没有的,删掉; - 原
/etc/passwd中的密码字段保持为x,不再存放实际密文。
常用选项:-b 自动备份原 /etc/shadow(推荐加);-n 仅预览变更,不写入(适合验证前检查)。
pwunconv:关闭 shadow 密码机制
执行 pwunconv 会把 /etc/shadow 中的加密密码读出,填回 /etc/passwd 对应用户的密码字段,并清空 /etc/shadow 内容,最后删除该文件。
- 操作后,
/etc/passwd恢复为传统格式:密码明文(实为加密后字符串)直接可见; -
/etc/shadow被删除,系统不再依赖它做认证; - 所有用户密码策略(如过期时间、最小长度等)信息随之丢失,因为这些只存于 shadow 中。
注意:-n 表示“不删 shadow 文件”,只把密码复制过去(调试用);-f 可指定非默认 shadow 文件路径;
必须确保当前用户有 root 权限,否则报 Permission denied。
操作前后的关键准备与验证
这两条命令直接影响登录认证,务必提前准备:
- 用
cp /etc/passwd /etc/passwd.bak.$(date +%s)和cp /etc/shadow /etc/shadow.bak.$(date +%s)分别备份; - 确认当前终端是 root 或已通过
sudo -i切换; - 执行后运行
getent shadow查看是否还能读取 shadow 条目(pwunconv 后应失败); - 用
grep '^[^:]*:[^:]*:[0-9]*:' /etc/passwd | head -3快速确认密码字段是否为x(pwconv 后)或真实密文(pwunconv 后)。
什么情况下该用哪个?
pwconv 常见于:
– 新装系统未启用 shadow 但需增强安全性;
– 从旧发行版迁移后手动重建 shadow;
– 某些容器或精简环境初始化时显式开启。
pwunconv 极少用于生产环境,典型场景包括:
– 故障排查:怀疑 shadow 文件损坏导致无法登录;
– 特定嵌入式系统或兼容性要求(如某些老旧脚本硬依赖 passwd 密文);
– 安全审计中临时还原对比(但应立即恢复)。
不建议在多用户或联网服务器上随意关闭 shadow 机制——它会让密码暴露在全局可读文件中,大幅增加被离线破解的风险。











