Skip to content

passwd 命令:Linux 系统密码管理的关键工具

1. 命令简介

passwd 是 Linux 系统中用于管理用户密码的核心命令行工具。它允许用户更改自己的密码,而系统管理员可以更改任何用户的密码、设置密码策略、管理账户锁定等。passwd 命令对于维护系统安全性至关重要。

2. 基本语法

bash
passwd [选项] [用户名]

3. 常用选项详解

  • -d: 删除用户密码
  • -e: 强制用户下次登录时更改密码
  • -l: 锁定用户账户
  • -u: 解锁用户账户
  • -S: 显示账户状态信息
  • -n 天数: 设置密码的最小使用天数
  • -x 天数: 设置密码的最大使用天数
  • -w 天数: 设置密码过期前的警告天数
  • -i: 设置密码过期后到禁用账户的天数

4. 基础用法示例

4.1 更改当前用户的密码

bash
passwd

4.2 Root 用户更改其他用户的密码

bash
sudo passwd username

4.3 显示用户账户状态

bash
sudo passwd -S username

5. 高级用法和技巧

5.1 强制用户下次登录时更改密码

bash
sudo passwd -e username

5.2 锁定用户账户

bash
sudo passwd -l username

5.3 设置密码复杂度策略

编辑 /etc/security/pwquality.conf 文件来设置密码复杂度要求。

5.4 使用 Chage 命令设置详细的密码策略

bash
sudo chage -M 90 -m 7 -W 7 username

这将设置密码最大使用期限为 90 天,最小使用期限为 7 天,过期前 7 天开始警告。

6. 实际应用场景

6.1 批量密码重置脚本

bash
#!/bin/bash
# bulk_password_reset.sh

# 从文件读取用户列表
users_file="users_to_reset.txt"

# 检查文件是否存在
if [ ! -f "$users_file" ]; then
    echo "User list file not found: $users_file"
    exit 1
fi

# 读取文件并重置密码
while IFS= read -r username
do
    # 生成随机密码
    new_password=$(openssl rand -base64 12)
    
    # 更改密码
    echo "$username:$new_password" | sudo chpasswd
    
    if [ $? -eq 0 ]; then
        echo "Password for $username has been reset. New password: $new_password"
        # 强制用户下次登录时更改密码
        sudo passwd -e "$username"
    else
        echo "Failed to reset password for $username"
    fi
done < "$users_file"

echo "Password reset process completed."

这个脚本从文件中读取用户列表,为每个用户生成随机密码,重置密码,并强制用户在下次登录时更改密码。

6.2 密码策略实施脚本

bash
#!/bin/bash
# enforce_password_policy.sh

# 设置密码策略
min_days=7
max_days=90
warn_days=7

# 获取所有普通用户
users=$(awk -F: '$3 >= 1000 && $3 != 65534 {print $1}' /etc/passwd)

for user in $users
do
    # 设置密码策略
    sudo chage -m $min_days -M $max_days -W $warn_days "$user"
    
    # 检查是否成功
    if [ $? -eq 0 ]; then
        echo "Password policy set for $user: min $min_days days, max $max_days days, warn $warn_days days before expiry"
    else
        echo "Failed to set password policy for $user"
    fi
done

echo "Password policy enforcement completed."

这个脚本为系统中的所有普通用户设置统一的密码策略。

7. 性能考虑

  • passwd 命令本身执行速度很快,但在处理大量用户时可能会变慢。
  • 频繁更改密码可能导致密码历史文件增大,影响认证速度。
  • 在大型系统中,考虑使用集中式认证系统(如 LDAP)来提高效率。

8. 安全注意事项

  • 使用强密码策略,包括最小长度、复杂度要求等。
  • 定期强制用户更改密码,但不要过于频繁,以免导致用户选择弱密码。
  • 避免在脚本中明文存储密码,使用安全的密码管理系统。
  • 监控密码更改活动,警惕异常行为。

9. 与其他工具的集成

  • useraddusermod 命令结合使用,管理用户账户。
  • 使用 pam_cracklibpam_pwquality 增强密码复杂度检查。
  • 与系统日志(如 journalctl)结合,监控密码更改活动。

10. 故障排除

  • 如果无法更改密码,检查 /etc/shadow 文件的权限。
  • 使用 passwd -S 检查账户状态,特别是是否被锁定。
  • 如果忘记 root 密码,可能需要进入单用户模式重置。

11. 相关命令

  • chage: 更改用户密码过期信息
  • useradd: 创建新用户
  • usermod: 修改用户账户