第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 = 06. 密码策略管理
密码复杂度要求
- 长度要求:密码长度至少8-12个字符
- 复杂度要求:包含大小写字母、数字和特殊字符
- 历史要求:不能使用最近使用过的密码
- 过期要求:定期更换密码
- 锁定要求:多次登录失败后锁定账户
PAM(可插拔认证模块)
PAM用于控制用户认证过程,包括密码验证。相关配置文件:
/etc/pam.d/system-auth:系统认证配置/etc/pam.d/password-auth:密码认证配置/etc/pam.d/login:登录认证配置
7. 密码重置
普通用户密码重置
- 用户可以使用
passwd命令修改自己的密码 - 不需要输入旧密码(在某些系统中可能需要)
管理员重置用户密码
- 管理员可以使用
passwd 用户名命令重置任何用户的密码 - 不需要知道用户的旧密码
忘记root密码的处理
- 重启系统,在GRUB菜单中编辑启动项
- 在linux行末尾添加
rd.break - 启动系统,进入紧急模式
- 挂载根文件系统为可写:
mount -o remount,rw /sysroot - 切换到系统根目录:
chroot /sysroot - 重置root密码:
passwd root - 更新SELinux上下文:
touch /.autorelabel - 退出并重启:
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!",系统应该接受课后练习
基础练习:
- 设置和修改用户密码
- 锁定和解锁用户账户
- 强制用户修改密码
进阶练习:
- 批量设置用户密码
- 配置密码策略
- 测试密码强度
- 重置root密码
思考问题:
- Linux系统中密码是如何存储和加密的?
- 如何配置强密码策略?
- 忘记root密码时如何处理?
- 为什么推荐使用SSH密钥认证而不是密码认证?
总结
本集介绍了Linux系统中用户密码管理的相关知识,包括:
- 密码的存储方式和加密机制
- 使用passwd命令设置和修改用户密码
- 使用chpasswd命令批量设置用户密码
- 密码策略的配置方法
- 密码重置的方法
- 密码安全的最佳实践
密码管理是Linux系统安全的重要组成部分,掌握密码管理的技能对于维护系统安全至关重要。通过本集的学习,您应该能够理解密码的存储和加密机制,掌握密码的设置、修改和管理方法,以及配置合理的密码策略,从而提高系统的安全性。在下一集中,我们将介绍Linux系统中用户切换与环境管理的相关知识。