第28集:用户密码管理

教学目标

  • 理解Linux系统中密码的存储方式和加密机制
  • 掌握使用passwd命令设置和修改用户密码
  • 掌握使用chpasswd命令批量设置用户密码
  • 了解/etc/login.defs和/etc/security/pwquality.conf文件的作用
  • 掌握密码策略的配置方法
  • 了解密码安全的最佳实践
  • 掌握密码重置的方法

核心知识点讲解

1. 密码存储概述

在Linux系统中,用户密码存储在/etc/shadow文件中,使用单向哈希算法进行加密。

2. 密码加密机制

Linux系统使用的密码加密算法:

  • MD5:早期使用,安全性较低
  • SHA-256:较新的加密算法,安全性较高
  • SHA-512:目前推荐使用的加密算法,安全性最高
  • ** Blowfish**:另一种安全的加密算法

密码格式:

$id$salt$hashed

其中:

  • id:加密算法标识符(1=MD5, 5=SHA-256, 6=SHA-512)
  • salt:随机生成的盐值,增加密码的安全性
  • hashed:加密后的密码哈希值

3. passwd命令

passwd命令用于设置和修改用户密码。

基本语法:

passwd [选项] [用户名]

常用选项:

选项 描述
-l 锁定用户账户
-u 解锁用户账户
-d 删除用户密码,使账户无密码
-e 强制用户在下次登录时修改密码
-n 设置密码的最小使用期限
-x 设置密码的最大使用期限
-w 设置密码过期前的警告天数
-i 设置密码过期后的宽限天数

4. chpasswd命令

chpasswd命令用于批量设置用户密码。

基本语法:

chpasswd [选项]

常用选项:

选项 描述
-c 使用指定的加密算法(SHA256, SHA512, MD5)
-e 密码已经是加密的
-m 使用MD5加密

5. 密码策略配置文件

/etc/login.defs文件

/etc/login.defs文件包含用户账户创建和密码管理的默认设置:

# 密码最大使用期限
PASS_MAX_DAYS   99999

# 密码最小使用期限
PASS_MIN_DAYS   0

# 密码过期前警告天数
PASS_WARN_AGE   7

# 密码最小长度
PASS_MIN_LEN    5

# 加密算法
ENCRYPT_METHOD SHA512

/etc/security/pwquality.conf文件

/etc/security/pwquality.conf文件用于配置密码质量要求:

# 密码最小长度
minlen = 8

# 密码中必须包含的小写字母最小数量
lcredit = -1

# 密码中必须包含的大写字母最小数量
ucredit = -1

# 密码中必须包含的数字最小数量
dcredit = -1

# 密码中必须包含的特殊字符最小数量
ocredit = -1

# 密码中不能包含的用户名
usercheck = 1

# 密码中不能包含的旧密码的长度
similarity = 0

6. 密码策略管理

密码复杂度要求

  • 长度要求:密码长度至少8-12个字符
  • 复杂度要求:包含大小写字母、数字和特殊字符
  • 历史要求:不能使用最近使用过的密码
  • 过期要求:定期更换密码
  • 锁定要求:多次登录失败后锁定账户

PAM(可插拔认证模块)

PAM用于控制用户认证过程,包括密码验证。相关配置文件:

  • /etc/pam.d/system-auth:系统认证配置
  • /etc/pam.d/password-auth:密码认证配置
  • /etc/pam.d/login:登录认证配置

7. 密码重置

普通用户密码重置

  • 用户可以使用passwd命令修改自己的密码
  • 不需要输入旧密码(在某些系统中可能需要)

管理员重置用户密码

  • 管理员可以使用passwd 用户名命令重置任何用户的密码
  • 不需要知道用户的旧密码

忘记root密码的处理

  1. 重启系统,在GRUB菜单中编辑启动项
  2. 在linux行末尾添加rd.break
  3. 启动系统,进入紧急模式
  4. 挂载根文件系统为可写:mount -o remount,rw /sysroot
  5. 切换到系统根目录:chroot /sysroot
  6. 重置root密码:passwd root
  7. 更新SELinux上下文:touch /.autorelabel
  8. 退出并重启:exit,然后reboot

8. 密码安全最佳实践

  • 使用强密码:长度至少12个字符,包含大小写字母、数字和特殊字符
  • 定期更换密码:每90天更换一次密码
  • 使用密码管理器:避免使用相同的密码
  • 启用双因素认证:增加额外的安全层
  • 限制登录尝试:设置登录失败次数限制
  • 定期审计:检查密码策略的执行情况
  • 使用SSH密钥:对于远程登录,优先使用SSH密钥认证

操作示例

示例1:设置和修改用户密码

# 普通用户修改自己的密码
passwd

# 管理员设置用户密码
passwd user1

# 锁定用户密码(锁定账户)
passwd -l user1

# 解锁用户密码
passwd -u user1

# 删除用户密码(使账户无密码)
passwd -d user1

# 强制用户在下次登录时修改密码
passwd -e user1

# 设置密码的最小使用期限为7天
passwd -n 7 user1

# 设置密码的最大使用期限为90天
passwd -x 90 user1

# 设置密码过期前的警告天数为7天
passwd -w 7 user1

# 设置密码过期后的宽限天数为3天
passwd -i 3 user1

示例2:批量设置用户密码

# 使用chpasswd命令批量设置密码
# 创建密码文件
cat > passwords.txt << 'EOF'
user1:password1
user2:password2
user3:password3
EOF

# 使用chpasswd命令设置密码
chpasswd < passwords.txt

# 或者直接从命令行输入
 echo "user4:password4" | chpasswd

# 使用加密密码
# 生成加密密码
openssl passwd -6 "password5"

# 创建包含加密密码的文件
cat > encrypted_passwords.txt << 'EOF'
user5:$6$rounds=4096$salt$hashed
EOF

# 使用-e选项设置加密密码
chpasswd -e < encrypted_passwords.txt

示例3:配置密码策略

# 编辑/etc/login.defs文件
# sudo nano /etc/login.defs

# 修改以下配置
PASS_MAX_DAYS   90
PASS_MIN_DAYS   7
PASS_WARN_AGE   7
PASS_MIN_LEN    8
ENCRYPT_METHOD SHA512

# 编辑/etc/security/pwquality.conf文件
# sudo nano /etc/security/pwquality.conf

# 修改以下配置
minlen = 10
lcredit = -1
ucredit = -1
dcredit = -1
ocredit = -1
usercheck = 1
similarity = 0

# 验证密码策略
# 创建测试用户
useradd -m testuser

# 尝试设置弱密码
passwd testuser
# 系统应该拒绝弱密码

示例4:密码质量检查

# 安装密码质量检查工具
sudo apt install libpam-pwquality  # Debian/Ubuntu
sudo yum install pam_pwquality    # CentOS/RHEL

# 测试密码强度
# 使用pwscore命令(如果可用)
echo "Password123!" | pwscore

# 或者使用python脚本测试
python3 -c "import crypt, getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))"

示例5:重置root密码

# 方法1:使用sudo重置
# 如果当前用户有sudo权限
sudo passwd root

# 方法2:进入单用户模式重置
# 重启系统,在GRUB菜单中按e编辑
# 在linux行末尾添加 "init=/bin/bash"
# 按Ctrl+X启动
# 挂载根文件系统为可写
mount -o remount,rw /
# 重置root密码
passwd root
# 重启系统
reboot

# 方法3:使用安装介质重置
# 从安装介质启动,进入救援模式
# 挂载系统分区
mount /dev/sda1 /mnt
# 切换到系统根目录
chroot /mnt
# 重置root密码
passwd root
# 退出并重启
exit
reboot

示例6:密码管理脚本

# 创建密码管理脚本
cat > password_management.sh << 'EOF'
#!/bin/bash

# 显示菜单
echo "密码管理脚本"
echo "1. 设置用户密码"
echo "2. 批量设置用户密码"
echo "3. 锁定用户账户"
echo "4. 解锁用户账户"
echo "5. 强制用户修改密码"
echo "6. 查看密码策略"
echo "7. 退出"

read -p "请选择操作:" choice

case $choice in
    1)
        read -p "请输入用户名:" username
        passwd $username
        ;;
    2)
        read -p "请输入密码文件路径:" password_file
        if [ -f "$password_file" ]; then
            chpasswd < "$password_file"
            echo "批量设置密码成功"
        else
            echo "密码文件不存在"
        fi
        ;;
    3)
        read -p "请输入用户名:" username
        passwd -l $username
        echo "用户 $username 已锁定"
        ;;
    4)
        read -p "请输入用户名:" username
        passwd -u $username
        echo "用户 $username 已解锁"
        ;;
    5)
        read -p "请输入用户名:" username
        passwd -e $username
        echo "用户 $username 下次登录时必须修改密码"
        ;;
    6)
        echo "当前密码策略:"
        grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_WARN_AGE|PASS_MIN_LEN|ENCRYPT_METHOD" /etc/login.defs
        echo "\n密码质量要求:"
        cat /etc/security/pwquality.conf 2>/dev/null || echo "未找到密码质量配置文件"
        ;;
    7)
        echo "退出脚本"
        exit 0
        ;;
    *)
        echo "无效的选择"
        ;;
esac
EOF

# 使脚本可执行
chmod +x password_management.sh

# 运行脚本
sudo ./password_management.sh

示例7:使用SSH密钥替代密码

# 生成SSH密钥对
ssh-keygen -t ed25519 -C "your_email@example.com"

# 将公钥复制到远程服务器
ssh-copy-id user@remote_host

# 测试无密码登录
ssh user@remote_host

# 禁用密码登录(在远程服务器上)
# sudo nano /etc/ssh/sshd_config
# 修改以下配置
# PasswordAuthentication no
# ChallengeResponseAuthentication no
# UsePAM no

# 重启SSH服务
sudo systemctl restart sshd

示例8:密码策略测试

# 创建测试用户
useradd -m testuser

# 尝试设置弱密码
echo "testuser:123456" | chpasswd
# 系统应该接受(如果密码策略未启用)

# 启用密码策略后再次测试
# 编辑/etc/security/pwquality.conf
# sudo nano /etc/security/pwquality.conf
# 添加:minlen = 8

# 尝试设置弱密码
passwd testuser
# 输入 "123456",系统应该拒绝

# 设置强密码
passwd testuser
# 输入 "MyPassword123!",系统应该接受

课后练习

  1. 基础练习

    • 设置和修改用户密码
    • 锁定和解锁用户账户
    • 强制用户修改密码
  2. 进阶练习

    • 批量设置用户密码
    • 配置密码策略
    • 测试密码强度
    • 重置root密码
  3. 思考问题

    • Linux系统中密码是如何存储和加密的?
    • 如何配置强密码策略?
    • 忘记root密码时如何处理?
    • 为什么推荐使用SSH密钥认证而不是密码认证?

总结

本集介绍了Linux系统中用户密码管理的相关知识,包括:

  • 密码的存储方式和加密机制
  • 使用passwd命令设置和修改用户密码
  • 使用chpasswd命令批量设置用户密码
  • 密码策略的配置方法
  • 密码重置的方法
  • 密码安全的最佳实践

密码管理是Linux系统安全的重要组成部分,掌握密码管理的技能对于维护系统安全至关重要。通过本集的学习,您应该能够理解密码的存储和加密机制,掌握密码的设置、修改和管理方法,以及配置合理的密码策略,从而提高系统的安全性。在下一集中,我们将介绍Linux系统中用户切换与环境管理的相关知识。

« 上一篇 用户组管理 下一篇 » 用户切换与切换环境