首页/系统/Linux 运维命令速查/passwd 设置与修改密码

passwd 设置与修改密码

passwd 管理本地账号密码:普通用户改自己、root 可重置他人;-l/-u 锁定解锁、-S 查看状态、--stdin 适合脚本批量设置。

Linux 运维命令速查系统更新于 2026-10-13

passwd 是什么

passwd 用于设置与维护本地账号的口令,背后操作的是 /etc/shadow 里的哈希字段(现代系统不再把口令放在 /etc/passwd)。它同时承担几种角色:普通用户改自己的口令、root 重置他人口令、查看口令状态、以及锁定与解锁。理解「锁定只是把哈希前缀加感叹号」这一点很重要,因为这种软锁定对基于密钥的登录并不生效,真正的禁用要另作处理。

基本信息

适用平台Linux 全发行版(shadow-utils 或 passwd 包);--stdin 是 RHEL 系的扩展,Debian/Ubuntu 上不可用
命令语法passwd [选项] [用户名];不带用户名即修改自己的口令
常用选项-S 显示状态、-l 锁定、-u 解锁、-d 删除口令(变成无口令账号)、-e 强制下次登录改口令、-n/-x/-w/-i 设置最短使用期、最长使用期、过期前提醒与宽限期
状态含义passwd -S 输出中的 P 表示已设置口令,L 表示已锁定,NP 表示无口令
权限要求普通用户只能改自己的口令;修改他人口令与执行 -l/-u/-d 需要 root

典型使用场景

  • 新账号初始化:创建用户后用 passwd 或 chpasswd 设置首个口令
  • 口令遗忘:root 为他人重置口令,重置后配合 -e 强制下次登录修改
  • 账号暂停:人员离职或接口停用期间先锁定,确认无影响后再删除账号
  • 状态巡检:用 -S 批量检查哪些账号处于 L 或 NP 状态,属于安全基线常见检查项
  • 口令有效期治理:通过 -x 与 -i 控制最长使用期与宽限期,满足合规要求
  • 服务账号保护:给服务账号设置随机口令并锁定,防止被用于交互登录

常用示例

常用示例
passwd deploy                 # root 重置他人密码
passwd -S deploy              # 状态:P 正常 / L 锁定 / NP 无密码
passwd -l deploy              # 锁定
passwd -u deploy              # 解锁
passwd -e deploy              # 下次登录强制改口令
passwd -x 90 -w 7 deploy      # 口令最长 90 天,过期前 7 天提醒
chage -l deploy               # 查看完整的口令时效信息
echo 'deploy:NewPassw0rd!' | chpasswd      # RHEL 与 Debian 通用
chpasswd -e < /root/hashes.txt            # 批量设置已加密的口令

状态与操作对照

状态/操作含义注意
P口令已设置,账号可用仍需确认有效期与 shell 是否合理
L口令已锁定(哈希前加 !)对 SSH 密钥登录无效,需另行禁用
NP无口令,允许空口令登录安全基线中的高危项,应尽快设置或锁定
passwd -e口令立即过期,下次登录强制修改重置他人口令后的标准动作
passwd -d删除口令,账号变为无口令仅用于有严格网络隔离的场景
口令字段的格式决定状态:$ 开头是加密后的哈希(常见的 6$ 是 SHA-512),前面加 ! 表示锁定,!! 或空表示从未设置或已被禁用。直接编辑 /etc/shadow 风险很高,日常应通过 passwd 与 chage 操作,批量场景用 chpasswd 从标准输入读入。
口令复杂度与强度由 PAM 控制(常见实现是 pam_pwquality)。设置口令被拒绝时先看提示是长度、字符类别还是字典命中,再去 /etc/security/pwquality.conf 调整策略;用 root 设置自己或他人的口令同样会走这套校验。
用 echo '用户:口令' | passwd --stdin 会把明文口令留在 shell 历史与进程列表中,只适合临时场景。批量设置优先用 chpasswd 并限制历史记录,或交给配置管理工具与密钥认证,从根上减少口令流转。
口令状态可以直接查:输出里已设置、已锁定、无口令三种状态各有标记,批量巡检时据此就能找出长期为空的账号。批量设置口令应走离线批量写入的方式,把口令通过标准输入交给工具,避免明文出现在命令历史与进程列表中。

易错点

  • passwd -l 只是把哈希前加感叹号的软锁,用 SSH 密钥或 su 仍可能进入;彻底禁用要配合 nologin shell 或直接删除账号
  • 用 --stdin 传递明文口令会暴露在 shell 历史与进程列表里,生产批量操作应改用 chpasswd
  • 口令被拒时误以为是命令有问题,实际是 PAM 复杂度策略(pam_pwquality)在拦:按提示调整长度与字符类别
  • 重置他人口令后忘记加 -e 强制修改,用户仍会长期沿用初始口令
  • 账号处于 NP(无口令)状态时可能允许空口令登录,属于安全基线高危项,创建账号后必须显式确认状态
  • 确认口令强度时把 PAM 策略提示当成工具报错:真正的原因在口令质量策略上,按提示补足长度与字符类别即可,反复重试同一条口令只会一直被拒

数据来源与参考

  • man 1 passwd(shadow-utils)
  • RHEL 文档:管理密码策略

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌