账户安全加固
教学目标
- 掌握 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. 账户安全工具
账户管理工具:
useradd、usermod、userdel:用户管理命令passwd:密码管理命令chage:账户过期管理命令
权限管理工具:
chmod、chown、chgrp:权限管理命令sudo:权限提升工具
安全审计工具:
auditd:系统审计服务ausearch、aureport:审计日志分析工具last、lastb:登录历史查看工具w、who:当前登录用户查看工具
实用案例分析
案例 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 监控和防止暴力破解
- 账户活动监控:创建脚本监控账户活动
- 定期报告:配置定期监控和邮件通知
- 集中化日志:配置集中化日志管理系统
课后练习
账户管理练习:
- 创建一个新用户并设置密码
- 锁定和解锁用户账户
- 设置用户账户过期时间
- 删除用户账户及其文件
权限管理练习:
- 修改文件和目录的权限
- 更改文件的所有者和所属组
- 配置 SUID/SGID 权限
- 加固敏感文件的权限
sudo 配置练习:
- 创建一个管理员组
- 配置 sudo 权限
- 限制 sudo 可执行的命令
- 配置 sudo 日志
密码策略练习:
- 配置密码复杂度要求
- 配置账户锁定策略
- 配置密码过期时间
- 验证密码策略的有效性
账户安全监控练习:
- 配置 auditd 监控账户相关文件
- 配置 fail2ban 防止暴力破解
- 创建账户活动监控脚本
- 分析账户活动日志
综合安全加固练习:
- 对一个 Linux 系统进行全面的账户安全加固
- 包括账户管理、权限控制、密码策略和监控
- 验证加固效果
总结
本章节详细介绍了 Linux 系统账户安全加固的方法,包括:
- 账户安全的基本概念和重要性
- 用户账户的类型和管理方法
- Linux 系统的权限控制机制
- sudo 权限管理
- 账户安全加固措施
- 账户安全审计和监控方法
- 账户安全最佳实践
- 实际账户安全加固案例的分析和解决
通过学习本章节,您应该能够全面了解 Linux 系统账户安全的重要性,掌握账户安全加固的方法和技巧,提高系统的安全性。在实际应用中,建议根据系统的具体情况和安全需求,采取相应的账户安全措施,确保系统免受未授权访问和滥用。