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 并限制历史记录,或交给配置管理工具与密钥认证,从根上减少口令流转。
口令状态可以直接查:输出里已设置、已锁定、无口令三种状态各有标记,批量巡检时据此就能找出长期为空的账号。批量设置口令应走离线批量写入的方式,把口令通过标准输入交给工具,避免明文出现在命令历史与进程列表中。