passwd 命令是什么?
passwd 命令用于修改用户账户的密码,普通用户只能修改自己的密码,而超级用户(root)可以修改任何用户的密码,包括设置一个空密码(不推荐)。

基本语法
passwd [选项] [用户名]
[选项]:可选的参数,用于改变命令的行为。[用户名]:可选参数,如果省略,passwd会默认修改当前登录用户的密码,只有root用户可以指定其他用户名来修改其密码。
常用选项
| 选项 | 描述 | 示例 |
|---|---|---|
-l |
Lock (锁定) 指定用户的账户,使其无法登录。 | sudo passwd -l username |
-u |
Unlock (解锁) 指定用户的账户。 | sudo passwd -u username |
-d |
Delete (删除) 指定用户的密码,使其可以无密码登录(安全风险高)。 | sudo passwd -d username |
-e |
Expire (过期) 指定用户的密码,强制用户在下次登录时必须修改密码。 | sudo passwd -e username |
-S |
Status (状态) 显示指定用户的密码状态(如密码是否被设置、是否过期等)。 | sudo passwd -S username |
-i |
Inactive (非活动) 设置密码过期后,账户被锁定前经过的天数,需要 -w 选项配合使用。 |
sudo passwd -i 7 username |
-w |
Warning (警告) 设置密码过期前多少天开始向用户发出警告。 | sudo passwd -w 7 username |
--stdin |
从标准输入读取密码,而不是从终端交互式输入,这对于脚本自动化非常有用。 | echo "newpassword" | sudo passwd --stdin username |
使用场景与示例
场景1:修改自己的密码(最常用)
普通用户执行此命令,系统会提示输入当前密码(验证身份),然后要求输入两次新密码(防止输错)。
$ passwd Changing password for user myuser. (current) UNIX password: # 输入你当前的密码 New password: # 输入你的新密码 Retype new password: # 再次输入你的新密码 passwd: all authentication tokens updated successfully.
场景2:root 用户修改其他用户的密码
这是系统管理员最常见的操作之一。root 用户可以直接为任何用户设置新密码,无需知道该用户当前的密码。
# 假设当前用户是 root $ sudo passwd alice New password: # 输入 alice 的新密码 Retype new password: # 再次输入新密码 passwd: password updated successfully.
场景3:临时锁定一个用户账户
如果你需要暂时禁止某个用户登录,可以使用 -l 选项。
$ sudo passwd -l bob passwd: password expiry information changed for bob.
被锁定后,用户 bob 即使输入正确密码也无法登录,你可以通过 cat /etc/shadow 文件看到该用户密码字段前有一个 标记。

场景4:解锁一个被锁定的用户账户
使用 -u 选项可以解除锁定。
$ sudo passwd -u bob passwd: password expiry information changed for bob.
场景5:强制用户在下次登录时修改密码
这对于新入职的员工或临时账户非常有用,确保他们使用自己设置的密码。
$ sudo passwd -e newuser passwd: password expiry information changed for newuser.
下次 newuser 登录时,系统会强制他/她修改密码。
场景6:查看用户密码状态
使用 -S 选项可以快速查看一个账户的密码状态,包括密码是否被设置(P)、是否被锁定(L)等。

$ sudo passwd -S alice alice PS 2025-10-27 0 99999 7 -1 (Password set, SHA512 crypt.)
输出字段解释(以 alice PS 2025-10-27 0 99999 7 -1 为例):
alice: 用户名PS: 密码状态PS: Password Set (密码已设置)LK: Locked (账户被锁定)NP: No Password (无密码)
2025-10-27: 上次修改密码的日期。0: 密码过期的最小天数(0表示随时可改)。99999: 密码过期的最大天数(99999表示永不过期)。7: 密码过期前的警告天数。-1: 密码过期后,账户被锁定前的非活动天数(-1表示永不锁定)。
场景7:在脚本中自动化设置密码
--stdin 选项允许你通过管道将密码传递给 passwd 命令,非常适合在自动化脚本中使用。
注意: 这种方法会将密码明文显示在命令历史和进程中,存在安全风险,请确保脚本文件权限严格控制,并在使用后清除历史记录。
# echo "newpass" | sudo passwd --stdin username
重要注意事项
- 密码强度:现代 Linux 发行版通常使用
pam_cracklib等模块来强制执行密码策略(如最小长度、包含数字、大小写字母等),如果设置的密码太简单,可能会被拒绝。 - 安全性:
- 不要与他人共享密码。
- 使用强密码(长度足够、包含大小写字母、数字和特殊符号)。
- 不要在脚本中硬编码密码,如果必须自动化,考虑使用 SSH 密钥对进行无密码登录,这是更安全的方式。
root的责任:作为root用户,你可以重置任何人的密码,包括root自己,请谨慎操作,避免意外锁定自己或他人。- 密码存储位置:用户的加密后的密码存储在
/etc/shadow文件中,普通用户没有读取权限,只有root可以查看,这个文件比/etc/passwd更安全,因为它专门存储了敏感的密码信息。
passwd 命令是 Linux 系统管理的基石,无论是日常使用还是系统管理,你都需要频繁地与它打交道,掌握它的基本用法和常用选项对于任何一个 Linux 用户或管理员来说都是必不可少的技能。
