passwd 是Linux和Unix-like系统中用于更改用户账户密码的基本命令。普通用户可以更改自己的密码,超级用户(root)可以更改任何用户的密码,并且可以管理密码策略。
passwd [选项] [用户名]
| 选项 | 说明 |
|---|---|
-k, --keep-tokens |
保持身份验证令牌不过期 |
-d, --delete |
删除用户密码(使账户无密码) |
-l, --lock |
锁定用户账户(禁止登录) |
-u, --unlock |
解锁用户账户 |
-e, --expire |
使密码立即过期,强制用户下次登录时修改密码 |
-f, --force |
强制操作,即使密码验证失败也继续 |
-n, --minimum DAYS |
设置密码最短有效天数 |
-x, --maximum DAYS |
设置密码最长有效天数 |
-w, --warning DAYS |
密码过期前多少天开始警告 |
-i, --inactive DAYS |
密码过期后账户被禁用的天数 |
-S, --status |
显示用户密码状态信息 |
--stdin |
从标准输入读取密码(用于脚本) |
-h, --help |
显示帮助信息 |
-v, --version |
显示版本信息 |
普通用户更改自己的密码:
passwd
系统会提示输入当前密码,然后两次输入新密码进行确认。
管理员更改指定用户的密码:
sudo passwd username
root用户可以直接更改任何用户的密码,不需要输入当前密码。
禁止用户登录:
sudo passwd -l username
在用户密码前添加"!"标记,使密码无效,无法登录。
sudo passwd -u username
移除密码前的"!"标记,恢复用户登录权限。
sudo passwd -d username
删除用户密码,使账户无需密码即可登录(不推荐生产环境使用)。
passwd -S username
输出格式:用户名 P 密码设置日期 最短使用期限 最长使用期限 警告期 失效期
设置用户密码的有效期策略:
sudo passwd -n 7 -x 90 -w 7 -i 30 username
设置密码最短使用7天,最长90天,过期前7天警告,过期后30天禁用账户。
使用stdin选项在脚本中设置密码:
echo "NewPassword123" | passwd --stdin username
注意:这种方式会在命令行历史中留下密码痕迹,建议仅在安全环境中使用。
现代Linux系统的密码安全要求:
| 配置文件 | 说明 |
|---|---|
/etc/passwd |
用户账户信息文件(不包含密码) |
/etc/shadow |
用户密码哈希和密码策略信息 |
/etc/login.defs |
默认的用户密码策略设置 |
/etc/security/pwquality.conf |
密码质量要求配置(RHEL/CentOS) |
/etc/pam.d/passwd |
passwd命令的PAM配置文件 |
Linux系统使用/etc/shadow文件安全存储密码信息:
username:$6$salt$hashedpassword:18000:0:99999:7:::
/etc/shadow文件中密码字段前有"!"标记--stdin选项,以免密码泄露chage命令可以更详细地管理密码过期策略pwscore命令可以评估密码强度(需要libpwquality)chpasswd命令sudo grep username /etc/shadowsudo passwd -e usernameexpect或sshpass自动化密码更改过程| 相关命令 | 说明 |
|---|---|
chage |
更改用户密码过期信息,提供更多密码策略选项 |
useradd / usermod |
创建/修改用户账户时设置密码策略 |
chpasswd |
批量更改用户密码,从标准输入读取用户名:密码对 |
pwck |
检查密码文件的完整性 |
vipw / vigr |
安全编辑passwd和group文件 |
su |
切换用户,需要输入目标用户的密码 |
/etc/shadow文件权限(应为640,所有者root)