密码安全策略
教学目标
- 掌握密码安全的基本概念和重要性
- 了解 Linux 系统密码存储机制
- 熟悉密码强度评估方法
- 学会制定和实施密码安全策略
- 了解密码管理工具和最佳实践
主要知识点
1. 密码安全基本概念
- 密码:用于验证用户身份的字符串
- 密码安全:保护密码免受未授权访问和破解的措施
- 密码攻击:尝试获取或破解密码的方法
- 密码强度:密码抵抗攻击的能力
- 密码策略:规定密码创建、使用和管理的规则
2. Linux 密码存储机制
密码文件:
/etc/passwd:存储用户账户信息(密码哈希已移至/etc/shadow)/etc/shadow:存储密码哈希和密码相关属性
密码哈希算法:
- DES:早期的密码哈希算法(已过时)
- MD5:消息摘要算法(已不安全)
- SHA-256/512:安全哈希算法
- bcrypt:基于 Blowfish 的密码哈希算法
- Argon2:现代密码哈希算法(推荐)
盐值:
- 随机值,与密码结合生成哈希
- 防止彩虹表攻击
- 确保相同密码生成不同哈希
密码存储格式:
$id$salt$hash:其中 id 表示哈希算法- 常见 id 值:
- 1:MD5
- 2a:bcrypt
- 5:SHA-256
- 6:SHA-512
3. 密码强度评估
密码强度因素:
- 长度:密码长度
- 复杂度:包含不同类型字符
- 随机性:避免常见单词和模式
- 唯一性:避免重复使用密码
密码强度评估方法:
- 熵值计算:密码包含的信息量
- 破解时间估算:暴力破解所需时间
- 模式检测:检测常见密码模式
密码强度测试工具:
pwquality:密码质量检查库cracklib:密码强度检查库- 在线密码强度测试工具
4. 密码策略配置
PAM 模块配置:
pam_cracklib.so:密码强度检查pam_pwquality.so:密码质量检查(cracklib 的替代品)pam_unix.so:密码存储和验证pam_faillock.so:账户锁定
密码复杂度要求:
- 最小长度
- 字符类型要求(大写、小写、数字、特殊字符)
- 与旧密码的差异
密码过期策略:
- 密码最长使用天数
- 密码最短使用天数
- 密码过期警告天数
- 账户过期策略
账户锁定策略:
- 失败登录尝试次数
- 锁定时间
- 解锁方式
密码历史记录:
- 记住的旧密码数量
- 防止重复使用密码
5. 密码管理工具
系统工具:
passwd:修改用户密码chage:修改账户密码过期信息pwck:检查密码文件完整性
密码生成工具:
pwgen:生成随机密码openssl rand:生成随机字符串apg:高级密码生成器
密码管理软件:
- KeePassXC:开源密码管理器
- Bitwarden:开源密码管理器
- LastPass:商业密码管理器
- 1Password:商业密码管理器
单点登录系统:
- LDAP:轻量级目录访问协议
- Kerberos:网络认证协议
- SAML:安全断言标记语言
- OAuth 2.0/OIDC:开放授权协议
6. 密码安全最佳实践
强密码策略:
- 密码长度至少 12 字符
- 包含大小写字母、数字和特殊字符
- 定期更换密码
- 避免使用常见单词和模式
多因素认证:
- 启用 MFA 增强账户安全
- 使用硬件密钥(如 YubiKey)
- 使用手机验证码
密码重用防护:
- 不同账户使用不同密码
- 使用密码管理器
- 避免在不安全场所输入密码
安全存储:
- 使用安全的密码存储机制
- 定期备份密码数据库
- 加密存储密码
安全传输:
- 避免明文传输密码
- 使用 HTTPS 等加密协议
- 防止密码被窃取
7. 密码安全威胁和防护
常见密码攻击:
- 暴力破解:尝试所有可能的密码
- 字典攻击:使用预定义的密码字典
- 彩虹表攻击:使用预计算的哈希表
- 社会工程学:通过欺骗获取密码
- 键盘记录:记录用户键盘输入
- 肩窥:偷看用户输入密码
防护措施:
- 实施强密码策略
- 启用账户锁定
- 使用多因素认证
- 加密密码存储
- 定期安全审计
- 提高用户安全意识
8. 企业密码管理
集中化密码管理:
- 企业密码管理系统
- 特权账户管理 (PAM)
- 密码轮换自动化
密码策略实施:
- 制定企业密码策略文档
- 定期培训和意识提升
- 技术控制措施
合规要求:
- PCI DSS:支付卡行业数据安全标准
- GDPR:通用数据保护条例
- HIPAA:健康保险可携性和责任法案
- SOX:萨班斯-奥克斯利法案
实用案例分析
案例 1:密码策略配置
场景:为企业 Linux 服务器配置严格的密码策略。
分析步骤:
# 1. 配置密码复杂度要求
# 修改 PAM 密码模块配置
vim /etc/pam.d/common-password
# 添加或修改以下配置
password requisite pam_pwquality.so retry=3 minlen=12 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
# 2. 配置密码哈希算法
# 修改登录定义文件
vim /etc/login.defs
# 修改以下配置
ENCRYPT_METHOD SHA512
# 3. 配置密码过期时间
# 修改登录定义文件
vim /etc/login.defs
# 修改以下配置
PASS_MAX_DAYS 90 # 密码最长使用天数
PASS_MIN_DAYS 7 # 密码最短使用天数
PASS_WARN_AGE 7 # 密码过期警告天数
# 4. 配置账户锁定策略
# 修改 PAM 认证模块配置
vim /etc/pam.d/common-auth
# 添加以下配置
auth required pam_faillock.so preauth silent audit deny=5 unlock_time=900
auth [success=1 default=bad] pam_unix.so
auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=900
auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=900
# 5. 配置密码历史记录
# 修改 PAM 密码模块配置
vim /etc/pam.d/common-password
# 添加以下配置
password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass sha512 remember=10
# 6. 应用密码策略到现有用户
# 为现有用户设置密码过期时间
for user in $(awk -F: '$3 >= 1000 {print $1}' /etc/passwd); do
chage -M 90 -m 7 -W 7 $user
done
# 7. 验证密码策略
# 尝试创建弱密码
passwd testuser
# 应该失败并提示密码复杂度不足
# 查看用户密码信息
chage -l testuser
# 应该显示密码过期信息
# 尝试多次错误登录
# 应该在 5 次失败后锁定账户
# 查看密码哈希格式
grep testuser /etc/shadow
# 应该显示 SHA-512 格式的密码哈希密码策略配置总结:
- 密码复杂度:配置 PAM 密码模块要求复杂密码
- 哈希算法:使用 SHA-512 作为密码哈希算法
- 密码过期:设置密码最长使用天数和警告期
- 账户锁定:配置失败登录尝试锁定策略
- 密码历史:防止重复使用最近的 10 个密码
- 应用策略:将密码策略应用到现有用户
案例 2:密码强度测试和生成
场景:需要测试密码强度并生成安全的随机密码。
分析步骤:
# 1. 安装密码测试和生成工具
apt install pwgen apg libpam-pwquality
# 2. 测试密码强度
# 使用 pwscore 测试密码强度
# 首先设置 PAM 配置
vim /etc/security/pwquality.conf
# 添加以下配置
minlen = 12
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
difok = 3
# 测试密码强度
echo "WeakPassword123" | pwscore
# 应该返回较低分数
echo "Strong@Passw0rd2024!" | pwscore
# 应该返回较高分数
# 3. 生成随机密码
# 使用 pwgen 生成随机密码
# 生成 10 个长度为 16 的强密码
pwgen -s -y -c -n -B 16 10
# 使用 apg 生成随机密码
# 生成 10 个包含特殊字符的密码
apg -a 1 -M SNCL -m 12 -x 16 -n 10
# 使用 openssl 生成随机密码
openssl rand -base64 12
# 4. 为系统用户生成密码
# 生成密码并设置给用户
echo "$(pwgen -s 16 1)" | passwd --stdin testuser
# 5. 验证生成的密码
# 尝试使用生成的密码登录
# 检查密码哈希格式
grep testuser /etc/shadow密码强度测试和生成总结:
- 工具安装:安装密码测试和生成工具
- 密码强度测试:使用 pwscore 测试密码强度
- 随机密码生成:使用 pwgen、apg 和 openssl 生成安全的随机密码
- 密码设置:为系统用户设置生成的密码
- 验证:尝试使用生成的密码登录并检查密码哈希格式
案例 3:多因素认证配置
场景:为 Linux 系统配置多因素认证以增强安全性。
分析步骤:
# 1. 安装 Google Authenticator PAM 模块
apt install libpam-google-authenticator
# 2. 配置 PAM 模块
# 修改 SSH 认证配置
vim /etc/pam.d/sshd
# 在文件开头添加以下配置
auth required pam_google_authenticator.so
# 3. 配置 SSH 服务
# 修改 SSH 配置文件
vim /etc/ssh/sshd_config
# 修改以下配置
ChallengeResponseAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
# 4. 重启 SSH 服务
systemctl restart sshd
# 5. 为用户配置 Google Authenticator
# 登录用户并运行
google-authenticator
# 按照提示进行配置:
# 1. 生成新的密钥
# 2. 扫描 QR 码到 Google Authenticator 应用
# 3. 记录紧急备份代码
# 4. 回答关于时间偏移、重复使用和尝试次数的问题
# 6. 测试多因素认证
# 尝试 SSH 登录
ssh testuser@localhost
# 应该提示输入验证码
# 7. 配置 sudo 多因素认证
# 修改 sudo 认证配置
vim /etc/pam.d/sudo
# 在文件开头添加以下配置
auth required pam_google_authenticator.so
# 8. 测试 sudo 多因素认证
sudo ls
# 应该提示输入验证码
# 9. 配置应急访问
# 在 PAM 配置中添加 nullok 选项允许没有配置 MFA 的用户
vim /etc/pam.d/sshd
# 修改为
auth required pam_google_authenticator.so nullok
# 同样修改 sudo 配置
vim /etc/pam.d/sudo
# 修改为
auth required pam_google_authenticator.so nullok多因素认证配置总结:
- 安装 PAM 模块:安装 Google Authenticator PAM 模块
- 配置 SSH:修改 SSH 认证配置启用 MFA
- 用户配置:为用户生成 MFA 密钥
- 测试 MFA:尝试 SSH 登录验证 MFA 功能
- 配置 sudo MFA:为 sudo 命令启用 MFA
- 应急访问:配置允许没有 MFA 的用户访问
案例 4:企业密码管理系统部署
场景:为企业部署集中化密码管理系统。
分析步骤:
# 1. 选择密码管理系统
# 常见开源密码管理系统:
# - Bitwarden RS:自托管 Bitwarden 服务器
# - Passbolt:开源密码管理器
# - KeePassDX + Nextcloud:KeePass 数据库同步
# 2. 部署 Bitwarden RS
# 安装 Docker
apt install docker.io docker-compose
# 创建 docker-compose 文件
mkdir -p /opt/bitwarden
cd /opt/bitwarden
vim docker-compose.yml
# 添加以下内容
version: '3'
services:
bitwarden:
image: vaultwarden/server:latest
container_name: bitwarden
restart: always
ports:
- "80:80"
environment:
- ADMIN_TOKEN=your_admin_token_here
- WEBSOCKET_ENABLED=true
- SIGNUPS_ALLOWED=false
volumes:
- ./data:/data
# 启动 Bitwarden RS
docker-compose up -d
# 3. 配置反向代理和 SSL
# 安装 Nginx
apt install nginx
# 创建 Nginx 配置
vim /etc/nginx/sites-available/bitwarden
# 添加以下内容
server {
listen 80;
server_name passwords.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name passwords.example.com;
ssl_certificate /etc/letsencrypt/live/passwords.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/passwords.example.com/privkey.pem;
location / {
proxy_pass http://localhost:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /notifications/hub {
proxy_pass http://localhost:3012;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /notifications/hub/negotiate {
proxy_pass http://localhost:80;
}
}
# 启用配置
ln -s /etc/nginx/sites-available/bitwarden /etc/nginx/sites-enabled/
# 安装 Let's Encrypt 证书
apt install certbot python3-certbot-nginx
certbot --nginx -d passwords.example.com
# 重启 Nginx
systemctl restart nginx
# 4. 配置用户和组织
# 访问管理界面:https://passwords.example.com/admin
# 使用 ADMIN_TOKEN 登录
# 创建组织和用户
# 5. 配置客户端
# 下载 Bitwarden 客户端:https://bitwarden.com/download/
# 配置客户端连接到自托管服务器
# 6. 配置浏览器扩展
# 安装 Bitwarden 浏览器扩展
# 配置扩展连接到自托管服务器
# 7. 实施密码策略
# 在管理界面配置密码策略:
# - 最小密码长度
# - 密码复杂度要求
# - 密码过期时间
# - 禁止密码重用
# 8. 定期备份
# 创建备份脚本
vim /opt/bitwarden/backup.sh
# 添加以下内容
#!/bin/bash
BACKUP_DIR="/opt/bitwarden/backups"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
mkdir -p $BACKUP_DIR
docker-compose stop
cp -r /opt/bitwarden/data $BACKUP_DIR/data_$TIMESTAMP
tar -czf $BACKUP_DIR/bitwarden_backup_$TIMESTAMP.tar.gz $BACKUP_DIR/data_$TIMESTAMP
docker-compose start
# 清理 30 天前的备份
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete
# 设置执行权限
chmod +x /opt/bitwarden/backup.sh
# 添加到 crontab
crontab -e
# 添加以下任务
0 2 * * * /opt/bitwarden/backup.sh
# 9. 培训用户
# 组织密码管理系统使用培训
# 强调密码安全最佳实践
# 演示如何使用密码管理器生成和存储密码
# 10. 监控和维护
# 监控 Bitwarden 服务状态
# 定期更新容器镜像
# 检查备份完整性企业密码管理系统部署总结:
- 系统选择:选择 Bitwarden RS 作为企业密码管理系统
- 容器部署:使用 Docker 部署 Bitwarden RS
- 反向代理:配置 Nginx 作为反向代理并启用 SSL
- 用户管理:创建组织和用户账户
- 客户端配置:配置桌面客户端和浏览器扩展
- 密码策略:在管理界面配置企业密码策略
- 备份策略:创建定期备份脚本
- 用户培训:组织密码管理系统使用培训
- 监控维护:监控服务状态并定期更新
课后练习
密码策略配置练习:
- 配置 PAM 密码模块要求强密码
- 设置密码过期时间和账户锁定策略
- 验证密码策略的有效性
密码强度测试练习:
- 安装并使用 pwscore 测试密码强度
- 生成不同强度的密码并测试
- 分析密码强度与破解时间的关系
多因素认证配置练习:
- 安装并配置 Google Authenticator PAM 模块
- 为 SSH 和 sudo 启用 MFA
- 测试 MFA 功能
密码管理工具使用练习:
- 安装并使用 KeePassXC 密码管理器
- 创建密码数据库并存储密码
- 配置密码数据库同步
企业密码管理系统部署练习:
- 部署 Bitwarden RS 或其他开源密码管理系统
- 配置用户和密码策略
- 测试密码管理系统功能
密码安全审计练习:
- 审计系统密码策略
- 检查密码哈希格式
- 识别弱密码并强制更新
总结
本章节详细介绍了 Linux 系统密码安全策略的制定和实施方法,包括:
- 密码安全的基本概念和重要性
- Linux 系统密码存储机制
- 密码强度评估方法
- 密码策略配置
- 密码管理工具和最佳实践
- 密码安全威胁和防护
- 企业密码管理
- 实际密码安全案例的分析和解决
通过学习本章节,您应该能够全面了解密码安全的重要性,掌握密码安全策略的制定和实施方法,提高系统的安全性。在实际应用中,建议根据系统的具体情况和安全需求,采取相应的密码安全措施,确保系统免受密码攻击。