账户安全加固

教学目标

  • 掌握 Linux 系统账户安全的基本概念和重要性
  • 了解 Linux 系统账户的类型和管理方法
  • 熟悉 Linux 系统权限控制机制
  • 学会实施账户安全加固措施
  • 了解账户安全审计和监控方法

主要知识点

1. 账户安全基本概念

  • 账户安全:保护系统用户账户免受未授权访问和滥用的措施
  • 账户类型
    • 系统账户:用于系统服务和进程的账户
    • 用户账户:用于人类用户的账户
    • 特权账户:具有特殊权限的账户(如 root)
  • 账户安全威胁
    • 未授权访问:未经允许访问账户
    • 密码破解:通过各种方法获取账户密码
    • 权限提升:获取超出账户权限范围的访问权
    • 账户滥用:合法账户被用于非法目的

2. 用户账户管理

  • 账户创建

    • 使用 useradd 命令创建用户
    • 设置初始密码
    • 配置用户属性
  • 账户删除

    • 使用 userdel 命令删除用户
    • 清理用户文件和目录
  • 账户修改

    • 使用 usermod 命令修改用户属性
    • 修改用户组
    • 修改用户 shell
  • 账户锁定

    • 使用 passwd -l 命令锁定账户
    • 使用 passwd -u 命令解锁账户
  • 账户过期

    • 设置账户过期时间
    • 管理过期账户

3. 权限控制机制

  • 文件权限

    • 读取权限(r):允许读取文件内容
    • 写入权限(w):允许修改文件内容
    • 执行权限(x):允许执行文件
  • 目录权限

    • 读取权限(r):允许列出目录内容
    • 写入权限(w):允许在目录中创建、删除文件
    • 执行权限(x):允许进入目录
  • 权限表示

    • 符号表示:如 rwxr-xr-x
    • 数字表示:如 755
  • 权限管理命令

    • chmod:修改文件权限
    • chown:修改文件所有者
    • chgrp:修改文件所属组
  • 特殊权限

    • SUID:执行文件时使用文件所有者权限
    • SGID:执行文件时使用文件所属组权限
    • Sticky Bit:防止非所有者删除文件

4. sudo 权限管理

  • sudo 概念:允许普通用户以其他用户身份执行命令的工具

  • sudo 配置

    • /etc/sudoers 文件
    • visudo 命令编辑配置
  • sudo 权限规则

    • 用户权限配置
    • 组权限配置
    • 命令限制
    • 时间戳缓存
  • sudo 安全最佳实践

    • 最小权限原则
    • 权限审计
    • 密码策略

5. 账户安全加固措施

  • 禁用不必要的账户

    • 禁用系统默认的不必要账户
    • 删除或禁用长期未使用的账户
  • 限制 root 登录

    • 禁用 root 远程登录
    • 限制 root 本地登录
    • 使用 sudo 替代直接 root 登录
  • 密码策略

    • 密码复杂度要求
    • 密码长度要求
    • 密码过期时间
    • 密码历史记录
    • 账户锁定策略
  • 文件权限加固

    • 设置敏感文件的适当权限
    • 限制关键目录的写入权限
    • 监控文件权限变更
  • 环境变量安全

    • 限制 sudo 环境变量
    • 清理用户环境变量
  • 登录安全

    • 限制登录尝试次数
    • 配置登录超时
    • 监控登录活动

6. 账户安全审计和监控

  • 系统审计

    • auditd 服务配置
    • 审计规则设置
    • 审计日志分析
  • 登录监控

    • 监控登录尝试
    • 分析登录模式
    • 检测异常登录
  • 账户活动监控

    • 监控账户创建和删除
    • 监控权限变更
    • 监控 sudo 使用
  • 日志管理

    • 集中化日志管理
    • 日志轮转和保留
    • 日志分析工具

7. 账户安全最佳实践

  • 最小权限原则:只授予必要的权限
  • 定期审查:定期审查用户账户和权限
  • 强密码策略:实施严格的密码策略
  • 多因素认证:启用多因素认证
  • 定期培训:提高用户安全意识
  • 持续监控:持续监控账户活动

8. 账户安全工具

  • 账户管理工具

    • useraddusermoduserdel:用户管理命令
    • passwd:密码管理命令
    • chage:账户过期管理命令
  • 权限管理工具

    • chmodchownchgrp:权限管理命令
    • sudo:权限提升工具
  • 安全审计工具

    • auditd:系统审计服务
    • ausearchaureport:审计日志分析工具
    • lastlastb:登录历史查看工具
    • wwho:当前登录用户查看工具

实用案例分析

案例 1:禁用不必要的账户

场景:系统中存在多个不必要的默认账户,需要禁用这些账户以提高安全性。

分析步骤

# 1. 查看系统中的用户账户
cat /etc/passwd

# 2. 识别不必要的账户
# 常见的不必要账户包括:
# - adm:用于系统日志管理
# - lp:用于打印服务
# - sync:用于同步文件系统
# - shutdown:用于关机
# - halt:用于停机
# - mail:用于邮件服务
# - news:用于新闻服务
# - uucp:用于UUCP服务
# - operator:用于系统操作
# - games:用于游戏服务
# - gopher:用于Gopher服务
# - ftp:用于FTP服务

# 3. 禁用不必要的账户
# 使用 usermod 命令禁用账户
for user in adm lp sync shutdown halt mail news uucp operator games gopher ftp;
do
  if id -u $user >/dev/null 2>&1; then
    usermod -L $user  # 锁定账户
    usermod -s /sbin/nologin $user  # 设置shell为nologin
  fi
done

# 4. 验证账户状态
# 查看账户锁定状态
for user in adm lp sync shutdown halt mail news uucp operator games gopher ftp;
do
  if id -u $user >/dev/null 2>&1; then
    passwd -S $user
  fi
done

# 5. 清理不必要的账户文件
# 对于确认不需要的账户,可以删除其主目录
for user in adm lp sync shutdown halt mail news uucp operator games gopher ftp;
do
  if id -u $user >/dev/null 2>&1; then
    user_home=$(getent passwd $user | cut -d: -f6)
    if [ -d "$user_home" ] && [ "$user_home" != "/" ] && [ "$user_home" != "/nonexistent" ]; then
      rm -rf $user_home
    fi
  fi
done

账户安全加固总结

  • 识别不必要账户:识别系统中不需要的默认账户
  • 禁用账户:使用 usermod 命令锁定账户并设置 nologin shell
  • 验证状态:验证账户锁定状态
  • 清理文件:清理不必要账户的主目录

案例 2:限制 root 登录

场景:为了提高系统安全性,需要限制 root 用户的登录方式和权限。

分析步骤

# 1. 禁用 root 远程登录
# 修改 SSH 配置文件
vim /etc/ssh/sshd_config
# 修改以下配置
PermitRootLogin no

# 重启 SSH 服务
systemctl restart sshd

# 2. 限制 root 本地登录
# 创建一个自定义 PAM 规则
vim /etc/pam.d/login
# 在文件开头添加以下配置
auth    required    pam_listfile.so item=user sense=deny file=/etc/securetty.d/rootlogin.txt onerr=succeed

# 创建 rootlogin.txt 文件
echo "root" > /etc/securetty.d/rootlogin.txt

# 3. 配置 sudo 替代直接 root 登录
# 确保 sudo 已安装
apt install sudo

# 创建一个管理员组
groupadd admin

# 将需要 root 权限的用户添加到 admin 组
usermod -aG admin username

# 配置 sudo 权限
visudo
# 添加以下配置
%admin ALL=(ALL) ALL

# 4. 限制 sudo 权限
# 配置 sudo 命令限制
visudo
# 示例:只允许执行特定命令
%admin ALL=(ALL) /usr/bin/apt, /usr/bin/systemctl

# 5. 配置 sudo 日志
# 确保 sudo 日志记录
visudo
# 添加以下配置
Defaults logfile="/var/log/sudo.log"
Defaults log_input,log_output
Defaults iolog_dir="/var/log/sudo-io"

# 6. 验证配置
# 尝试 root 远程登录
ssh root@localhost
# 应该失败

# 尝试使用 sudo
sudo apt update
# 应该成功

账户安全加固总结

  • 禁用远程 root 登录:修改 SSH 配置文件
  • 限制本地 root 登录:使用 PAM 规则
  • 配置 sudo:创建管理员组并配置 sudo 权限
  • 限制 sudo 命令:只允许执行特定命令
  • 配置 sudo 日志:确保 sudo 操作被记录

案例 3:密码策略加固

场景:为了提高账户安全性,需要实施严格的密码策略。

分析步骤

# 1. 配置密码复杂度要求
# 修改 PAM 密码模块配置
vim /etc/pam.d/common-password
# 添加或修改以下配置
password requisite pam_cracklib.so retry=3 minlen=12 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1

# 2. 配置密码过期时间
# 修改登录定义文件
vim /etc/login.defs
# 修改以下配置
PASS_MAX_DAYS 90        # 密码最长使用天数
PASS_MIN_DAYS 7         # 密码最短使用天数
PASS_WARN_AGE 7         # 密码过期警告天数
PASS_MIN_LEN 12         # 密码最小长度

# 3. 配置账户锁定策略
# 修改 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

# 4. 配置密码历史记录
# 修改 PAM 密码模块配置
vim /etc/pam.d/common-password
# 添加以下配置
password    [success=1 default=ignore]  pam_unix.so obscure use_authtok try_first_pass sha512 remember=5

# 5. 应用密码策略到现有用户
# 为现有用户设置密码过期时间
chage -M 90 -m 7 -W 7 username

# 6. 验证密码策略
# 尝试创建弱密码
passwd username
# 应该失败并提示密码复杂度不足

# 查看用户密码信息
chage -l username
# 应该显示密码过期信息

# 尝试多次错误登录
# 应该在 5 次失败后锁定账户

账户安全加固总结

  • 密码复杂度:配置 PAM 密码模块要求复杂密码
  • 密码过期:设置密码最长使用天数和警告期
  • 账户锁定:配置失败登录尝试锁定策略
  • 密码历史:防止重复使用最近的密码
  • 应用策略:将密码策略应用到现有用户

案例 4:文件权限加固

场景:为了提高系统安全性,需要加固关键文件和目录的权限。

分析步骤

# 1. 加固系统配置文件权限
# 设置敏感文件权限
chmod 600 /etc/passwd
chmod 600 /etc/shadow
chmod 600 /etc/gshadow
chmod 600 /etc/sudoers
chmod 644 /etc/group

# 2. 加固关键目录权限
# 设置关键目录权限
chmod 755 /etc
chmod 700 /root
chmod 755 /usr/bin
chmod 755 /usr/sbin
chmod 1777 /tmp
chmod 1777 /var/tmp

# 3. 加固 SUID/SGID 文件
# 查找系统中的 SUID 文件
find / -type f -perm -4000 -ls

# 查找系统中的 SGID 文件
find / -type f -perm -2000 -ls

# 审查并移除不必要的 SUID/SGID 权限
# 示例:移除不必要的 SUID 权限
chmod u-s /usr/bin/chfn
chmod u-s /usr/bin/chsh
chmod u-s /usr/bin/newgrp

# 4. 加固服务配置文件权限
# 设置服务配置文件权限
chmod 644 /etc/systemd/system/*
chmod 644 /etc/init.d/*

# 5. 监控文件权限变更
# 使用 auditd 监控敏感文件
auditctl -w /etc/passwd -p wa -k passwd_changes
auditctl -w /etc/shadow -p wa -k shadow_changes
auditctl -w /etc/sudoers -p wa -k sudoers_changes

# 6. 验证文件权限
# 检查敏感文件权限
ls -l /etc/passwd /etc/shadow /etc/gshadow /etc/sudoers

# 检查关键目录权限
ls -ld /etc /root /usr/bin /usr/sbin /tmp /var/tmp

# 检查 SUID/SGID 文件
find /usr/bin -type f -perm -4000 -ls | head -20

账户安全加固总结

  • 敏感文件权限:设置敏感系统文件的严格权限
  • 关键目录权限:确保关键目录的适当权限
  • SUID/SGID 文件:审查并移除不必要的特殊权限
  • 服务配置文件:设置服务配置文件的适当权限
  • 权限监控:使用 auditd 监控文件权限变更

案例 5:账户活动监控

场景:为了提高系统安全性,需要监控账户活动并检测异常行为。

分析步骤

# 1. 配置系统审计
# 确保 auditd 服务已安装并运行
systemctl enable auditd
systemctl start auditd

# 配置审计规则
vim /etc/audit/rules.d/audit.rules
# 添加以下规则
-w /etc/passwd -p wa -k passwd_changes
-w /etc/shadow -p wa -k shadow_changes
-w /etc/group -p wa -k group_changes
-w /etc/gshadow -p wa -k gshadow_changes
-w /etc/sudoers -p wa -k sudoers_changes
-w /var/log/auth.log -p wa -k auth_log_changes

# 重启 auditd 服务
systemctl restart auditd

# 2. 配置登录监控
# 安装和配置 fail2ban
apt install fail2ban

# 配置 fail2ban
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vim /etc/fail2ban/jail.local
# 修改以下配置
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600

# 重启 fail2ban 服务
systemctl restart fail2ban

# 3. 配置账户活动监控
# 创建账户活动监控脚本
vim /usr/local/bin/monitor_accounts.sh
# 添加以下内容
#!/bin/bash

# 检查最近的账户创建
echo "=== 最近的账户创建 ==="
grep "useradd" /var/log/auth.log

# 检查最近的密码更改
echo "\n=== 最近的密码更改 ==="
grep "password changed" /var/log/auth.log

# 检查最近的 sudo 使用
echo "\n=== 最近的 sudo 使用 ==="
grep "sudo" /var/log/auth.log

# 检查失败的登录尝试
echo "\n=== 最近的失败登录尝试 ==="
grep "Failed password" /var/log/auth.log

# 检查成功的登录
echo "\n=== 最近的成功登录 ==="
grep "Accepted" /var/log/auth.log

# 保存并设置执行权限
chmod +x /usr/local/bin/monitor_accounts.sh

# 4. 配置定期监控
# 添加到 crontab
crontab -e
# 添加以下任务
0 * * * * /usr/local/bin/monitor_accounts.sh | mail -s "账户活动监控报告" admin@example.com

# 5. 集中化日志管理
# 安装 ELK Stack 或其他日志管理系统
# 配置日志收集

# 6. 验证监控配置
# 检查 auditd 状态
systemctl status auditd

# 检查 fail2ban 状态
systemctl status fail2ban

# 运行监控脚本
/usr/local/bin/monitor_accounts.sh

账户安全加固总结

  • 系统审计:配置 auditd 监控账户相关文件变更
  • 登录监控:使用 fail2ban 监控和防止暴力破解
  • 账户活动监控:创建脚本监控账户活动
  • 定期报告:配置定期监控和邮件通知
  • 集中化日志:配置集中化日志管理系统

课后练习

  1. 账户管理练习

    • 创建一个新用户并设置密码
    • 锁定和解锁用户账户
    • 设置用户账户过期时间
    • 删除用户账户及其文件
  2. 权限管理练习

    • 修改文件和目录的权限
    • 更改文件的所有者和所属组
    • 配置 SUID/SGID 权限
    • 加固敏感文件的权限
  3. sudo 配置练习

    • 创建一个管理员组
    • 配置 sudo 权限
    • 限制 sudo 可执行的命令
    • 配置 sudo 日志
  4. 密码策略练习

    • 配置密码复杂度要求
    • 配置账户锁定策略
    • 配置密码过期时间
    • 验证密码策略的有效性
  5. 账户安全监控练习

    • 配置 auditd 监控账户相关文件
    • 配置 fail2ban 防止暴力破解
    • 创建账户活动监控脚本
    • 分析账户活动日志
  6. 综合安全加固练习

    • 对一个 Linux 系统进行全面的账户安全加固
    • 包括账户管理、权限控制、密码策略和监控
    • 验证加固效果

总结

本章节详细介绍了 Linux 系统账户安全加固的方法,包括:

  • 账户安全的基本概念和重要性
  • 用户账户的类型和管理方法
  • Linux 系统的权限控制机制
  • sudo 权限管理
  • 账户安全加固措施
  • 账户安全审计和监控方法
  • 账户安全最佳实践
  • 实际账户安全加固案例的分析和解决

通过学习本章节,您应该能够全面了解 Linux 系统账户安全的重要性,掌握账户安全加固的方法和技巧,提高系统的安全性。在实际应用中,建议根据系统的具体情况和安全需求,采取相应的账户安全措施,确保系统免受未授权访问和滥用。

扩展阅读

« 上一篇 安全基线配置 下一篇 » 密码安全策略