一、命令简介
passwd 命令用于更新用户的身份验证令牌(密码)。普通用户可以使用它来更改自己的登录密码,而系统管理员(root 用户)可以使用它来管理系统中任何用户的密码,包括设置、锁定、解锁、删除密码以及查看密码状态信息。
该命令通过修改 /etc/shadow 文件来生效。密码更改操作通常需要交互式确认,但管理员也可以通过特定选项进行非交互式操作。
二、语法格式
passwd [选项] [用户名]
说明:
- 普通用户执行 passwd 时,不能指定 [用户名] 参数,只能更改自己的密码。
- 只有 root 用户(或拥有 sudo 权限的管理员)可以指定 [用户名] 参数,以管理其他用户的密码。
- 选项可以组合使用,以实现特定的管理功能。
三、常用选项及说明
表格
| 选项 | 长选项 | 说明 |
|---|---|---|
| -d | --delete | 删除指定用户的密码。执行后,该用户将无需密码即可登录(空密码)。仅 root 用户可用。 |
| -l | --lock | 锁定指定用户的密码。通过在 /etc/shadow 的密码字段前添加!或!!实现,被锁定的用户将无法使用密码登录系统。仅 root 用户可用。 |
| -u | --unlock | 解锁指定用户的密码。移除由 -l 选项添加的锁定标记。如果用户密码原本为空,可能需要结合 -f 选项强制解锁。仅 root 用户可用。 |
| -S | --status | 显示指定用户的密码状态摘要。输出包括:用户名、密码状态(PS = 已设置,LK = 锁定,NP = 无密码)、最后更改日期、最小期限、最大期限、警告期、不活动期等。仅 root 用户可用。 |
| -e | --expire | 立即使指定用户的密码过期。这将在用户下次登录时强制要求更改密码。仅 root 用户可用。 |
| -n DAYS | --minimum=DAYS | 设置密码最短有效期。在更改密码后,必须经过 DAYS 天才能再次更改。 |
| -x DAYS | --maximum=DAYS | 设置密码最长有效期。密码在设置 DAYS 天后将过期,必须更改。 |
| -w DAYS | --warning=DAYS | 设置在密码过期前多少天开始向用户显示警告信息。 |
| -i DAYS | --inactive=DAYS | 设置密码过期后,账户在 DAYS 天内仍可登录(宽限期),超过此期限账户将被禁用。 |
| -k | --keep-tokens | 仅更新已过期的密码。 |
| -f | --force | 强制执行操作。通常与 -u 解锁空密码账户时一起使用。 |
| --stdin | 从标准输入读取新密码,而不是通过终端交互式提示。这在脚本中自动化设置密码时非常有用。注意:此选项可能在某些发行版中不可用,更通用的做法是使用 chpasswd 命令。 |
四、示例用法
示例 1:普通用户更改自己的密码
用户 alice 登录后,输入以下命令并按提示操作:
plaintext
$ passwd Changing password for user alice. (current) UNIX password: # 输入当前密码 New password: # 输入新密码 Retype new password: # 再次输入新密码进行确认 passwd: all authentication tokens updated successfully.示例 2:root 用户为其他用户设置密码
plaintext
# passwd bob New password: Retype new password: passwd: all authentication tokens updated successfully.示例 3:使用 --stdin 非交互式设置密码(适用于脚本)
plaintext
# echo "MySecurePass123" | passwd --stdin bob Changing password for user bob. passwd: all authentication tokens updated successfully.更安全 / 通用的脚本方法(推荐):
plaintext
# echo "bob:MySecurePass123" | chpasswd示例 4:锁定与解锁用户账户
plaintext
# 锁定用户 bob 的密码,禁止其登录 # passwd -l bob Locking password for user bob. passwd: Success # 查看 bob 的密码状态(显示 LK) # passwd -S bob bob LK 2024-01-01 0 99999 7 -1 (Password locked.) # 解锁用户 bob 的密码 # passwd -u bob Unlocking password for user bob. passwd: Success示例 5:删除用户密码(使其可无密码登录)
plaintext
# passwd -d bob Removing password for user bob. passwd: Success # 再次查看状态(显示 NP) # passwd -S bob bob NP 2024-01-01 0 99999 7 -1 (Empty password.)示例 6:设置密码策略(有效期、警告期等)
plaintext
# 设置用户 bob 的密码策略:最短5天后才能改,最长90天后过期,过期前7天开始警告。 # passwd -n 5 -x 90 -w 7 bob Adjusting aging data for user bob. passwd: Success # 查看应用后的详细状态 # passwd -S bob bob PS 2024-10-27 5 90 7 -1 (Password set, SHA512 crypt.)示例 7:强制用户下次登录时更改密码
plaintext
# passwd -e bob Expiring password for user bob. passwd: Success用户 bob 下次登录时,系统会强制要求其设置一个新密码。
五、注意事项
权限与安全
- 只有 root 用户能管理所有用户的密码。普通用户只能更改自己的密码,且必须提供正确的当前密码。
- 使用 --stdin 或在命令行中明文传递密码存在安全风险(密码可能出现在历史记录或进程列表中),在自动化脚本中应谨慎评估,或考虑使用 chpasswd 命令。
- 删除密码 (-d) 会允许无密码登录,这在生产环境中是极高的安全风险,应避免使用。
密码策略通过 -n, -x, -w, -i 等选项设置的密码老化策略,修改的是 /etc/shadow 文件中的对应字段。请确保策略符合系统的安全要求。
兼容性某些选项(如 --stdin)并非在所有 Linux 发行版或 Unix 变种中都可用。编写跨平台脚本时,建议使用 chpasswd 命令进行密码的非交互式设置。