密码安全策略

教学目标

  • 掌握密码安全的基本概念和重要性
  • 了解 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
  • 用户管理:创建组织和用户账户
  • 客户端配置:配置桌面客户端和浏览器扩展
  • 密码策略:在管理界面配置企业密码策略
  • 备份策略:创建定期备份脚本
  • 用户培训:组织密码管理系统使用培训
  • 监控维护:监控服务状态并定期更新

课后练习

  1. 密码策略配置练习

    • 配置 PAM 密码模块要求强密码
    • 设置密码过期时间和账户锁定策略
    • 验证密码策略的有效性
  2. 密码强度测试练习

    • 安装并使用 pwscore 测试密码强度
    • 生成不同强度的密码并测试
    • 分析密码强度与破解时间的关系
  3. 多因素认证配置练习

    • 安装并配置 Google Authenticator PAM 模块
    • 为 SSH 和 sudo 启用 MFA
    • 测试 MFA 功能
  4. 密码管理工具使用练习

    • 安装并使用 KeePassXC 密码管理器
    • 创建密码数据库并存储密码
    • 配置密码数据库同步
  5. 企业密码管理系统部署练习

    • 部署 Bitwarden RS 或其他开源密码管理系统
    • 配置用户和密码策略
    • 测试密码管理系统功能
  6. 密码安全审计练习

    • 审计系统密码策略
    • 检查密码哈希格式
    • 识别弱密码并强制更新

总结

本章节详细介绍了 Linux 系统密码安全策略的制定和实施方法,包括:

  • 密码安全的基本概念和重要性
  • Linux 系统密码存储机制
  • 密码强度评估方法
  • 密码策略配置
  • 密码管理工具和最佳实践
  • 密码安全威胁和防护
  • 企业密码管理
  • 实际密码安全案例的分析和解决

通过学习本章节,您应该能够全面了解密码安全的重要性,掌握密码安全策略的制定和实施方法,提高系统的安全性。在实际应用中,建议根据系统的具体情况和安全需求,采取相应的密码安全措施,确保系统免受密码攻击。

扩展阅读

« 上一篇 账户安全加固 下一篇 » 登录安全配置