Linux passwd命令详解

passwd命令是Linux系统中用于管理用户密码的核心工具,允许用户更改自己的密码,管理员更改其他用户的密码,以及设置密码策略。

命令简介

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 显示版本信息

常用操作示例

示例1:更改当前用户密码

普通用户更改自己的密码:

passwd

系统会提示输入当前密码,然后两次输入新密码进行确认。

示例2:更改其他用户密码(root权限)

管理员更改指定用户的密码:

sudo passwd username

root用户可以直接更改任何用户的密码,不需要输入当前密码。

示例3:锁定用户账户

禁止用户登录:

sudo passwd -l username

在用户密码前添加"!"标记,使密码无效,无法登录。

示例4:解锁用户账户

sudo passwd -u username

移除密码前的"!"标记,恢复用户登录权限。

示例5:删除用户密码

sudo passwd -d username

删除用户密码,使账户无需密码即可登录(不推荐生产环境使用)。

示例6:显示密码状态信息

passwd -S username

输出格式:用户名 P 密码设置日期 最短使用期限 最长使用期限 警告期 失效期

  • P: 密码已设置 (L: 锁定, NP: 无密码)
  • 密码设置日期: 最后一次更改密码的日期
  • 最短使用期限: 密码最少使用天数
  • 最长使用期限: 密码最多使用天数(过期时间)
  • 警告期: 过期前警告天数
  • 失效期: 密码过期后账户禁用天数

示例7:设置密码策略

设置用户密码的有效期策略:

sudo passwd -n 7 -x 90 -w 7 -i 30 username

设置密码最短使用7天,最长90天,过期前7天警告,过期后30天禁用账户。

示例8:通过脚本设置密码

使用stdin选项在脚本中设置密码:

echo "NewPassword123" | passwd --stdin username

注意:这种方式会在命令行历史中留下密码痕迹,建议仅在安全环境中使用。

密码安全要求

现代Linux系统的密码安全要求:

  • 密码长度通常至少8个字符
  • 建议包含大写字母、小写字母、数字和特殊字符
  • 不能与用户名相同或相似
  • 不能使用字典中的常见单词
  • 不能使用最近用过的密码
  • 密码必须满足PAM(可插入认证模块)的复杂性要求

相关配置文件

配置文件 说明
/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:::
  • 字段1: 用户名
  • 字段2: 加密后的密码(格式:$算法$盐值$哈希值)
  • 字段3: 最后一次更改密码的天数(从1970年1月1日起)
  • 字段4: 密码最短使用天数(0表示随时可以更改)
  • 字段5: 密码最长使用天数(99999表示永不过期)
  • 字段6: 密码过期前警告天数
  • 字段7: 密码过期后账户禁用天数
  • 字段8: 账户过期日期
  • 字段9: 保留字段

注意事项

重要提示:
  1. 普通用户更改密码需要提供当前密码
  2. root用户可以更改任何用户的密码,无需当前密码
  3. 锁定的账户在/etc/shadow文件中密码字段前有"!"标记
  4. 密码策略设置可能受到PAM配置的限制
  5. 生产环境中避免使用--stdin选项,以免密码泄露
  6. 定期更新密码是良好的安全实践
  7. 禁用不必要的账户比设置复杂密码更重要
实用技巧
  • 使用chage命令可以更详细地管理密码过期策略
  • 使用pwscore命令可以评估密码强度(需要libpwquality)
  • 批量修改用户密码可以使用chpasswd命令
  • 查看shadow文件中特定用户的信息:sudo grep username /etc/shadow
  • 强制所有用户在下次登录时更改密码:sudo passwd -e username
  • 在脚本中使用expectsshpass自动化密码更改过程

与其他命令的关系

相关命令 说明
chage 更改用户密码过期信息,提供更多密码策略选项
useradd / usermod 创建/修改用户账户时设置密码策略
chpasswd 批量更改用户密码,从标准输入读取用户名:密码对
pwck 检查密码文件的完整性
vipw / vigr 安全编辑passwd和group文件
su 切换用户,需要输入目标用户的密码

故障排除

常见问题及解决方法:
  1. "Authentication token manipulation error": 检查/etc/shadow文件权限(应为640,所有者root)
  2. "You must choose a longer password": 密码太短或太简单,增加长度和复杂性
  3. "Bad: new password is too simple": 密码不符合PAM复杂性要求
  4. "Permission denied": 普通用户尝试更改其他用户密码,使用sudo
  5. "Password unchanged": 新密码与旧密码相同,或包含用户名
  6. "Cannot lock /etc/passwd; try again later": 其他进程正在使用密码文件,稍后重试