会话安全管理
教学目标
- 掌握会话安全的基本概念和重要性
- 了解 Linux 系统的会话管理机制
- 熟悉会话管理工具的使用方法
- 学会实施会话安全策略
- 了解会话监控和审计方法
- 掌握会话安全的最佳实践
主要知识点
1. 会话安全基本概念
- 会话:用户登录后到注销前的时间段
- 会话管理:对用户会话的创建、维护和终止的管理
- 会话安全:保护会话免受未授权访问和攻击的措施
- 会话劫持:攻击者获取并控制用户会话的行为
- 会话超时:会话在一段时间无活动后自动终止
- 会话锁定:临时锁定会话以防止未授权访问
2. Linux 会话管理机制
登录会话:
- 控制台登录会话
- 远程登录会话 (SSH)
- 图形界面登录会话
进程组:
- 相关进程的集合
- 由会话领导进程创建
- 进程组 ID (PGID) 标识
会话:
- 一个或多个进程组的集合
- 由会话首进程创建
- 会话 ID (SID) 标识
控制终端:
- 与会话关联的终端设备
- 会话首进程的控制终端
- 用于输入/输出操作
3. 会话管理工具
系统工具:
who:显示当前登录用户w:显示当前登录用户及其活动ps:显示进程状态pstree:显示进程树kill:终止进程
会话管理工具:
screen:终端多路复用器tmux:终端多路复用器byobu:screen/tmux 的前端dtach:终端分离工具
远程会话工具:
ssh:安全远程登录mosh:移动 shelltelnet:远程登录(不安全)
4. 会话安全配置
SSH 会话配置:
- 配置文件:
/etc/ssh/sshd_config - 关键配置项:
ClientAliveInterval、ClientAliveCountMax、LoginGraceTime
- 配置文件:
PAM 会话配置:
- 配置文件:
/etc/pam.d/common-session - 会话管理模块:
pam_limits.so、pam_env.so、pam_unix.so
- 配置文件:
会话限制:
- 最大会话数
- 会话超时时间
- 资源限制
会话锁定:
- 屏幕锁定工具:
vlock、xscreensaver - 自动锁定配置
- 屏幕锁定工具:
5. 会话监控和审计
系统日志:
- 记录会话相关事件
- 关键日志文件:
/var/log/auth.log或/var/log/secure
审计系统:
- 使用
auditd服务 - 配置审计规则记录会话事件
- 查看审计日志:
ausearch、aureport命令
- 使用
会话监控工具:
auditd:系统审计守护进程psacct/acct:进程会计last:查看登录历史lastb:查看失败登录尝试
6. 会话安全威胁和防护
会话劫持:
- 网络层会话劫持
- 应用层会话劫持
- 防护措施:使用加密连接、会话令牌、定期重新认证
会话固定:
- 攻击者固定会话 ID 以获取访问权限
- 防护措施:登录后重新生成会话 ID
会话超时:
- 过长的会话超时可能导致未授权访问
- 防护措施:设置合理的会话超时时间
会话重用:
- 重用会话可能导致权限提升
- 防护措施:避免会话重用,使用临时会话
7. 会话管理最佳实践
会话超时设置:
- 为不同类型的会话设置不同的超时时间
- 控制台会话:5-15 分钟
- 远程会话:15-30 分钟
- 特权会话:更短的超时时间
会话锁定:
- 启用自动屏幕锁定
- 离开终端时手动锁定会话
- 使用强密码解锁会话
会话审计:
- 记录所有会话活动
- 定期审查会话日志
- 监控异常会话行为
会话隔离:
- 为不同权限级别的任务使用不同的会话
- 使用
sudo执行特权命令,而不是长期保持 root 会话
8. 高级会话管理
容器会话:
- Docker 容器会话管理
- Kubernetes Pod 会话管理
- 容器会话隔离
云环境会话:
- 云实例会话管理
- 云服务会话管理
- 云环境会话安全
多因素认证会话:
- 会话期间的多因素认证
- 特权操作的多因素认证
- 会话重新认证
实用案例分析
案例 1:SSH 会话安全配置
场景:配置 SSH 会话安全,防止未授权访问和会话劫持。
分析步骤:
# 1. 备份 SSH 配置文件
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# 2. 编辑 SSH 配置文件
vim /etc/ssh/sshd_config
# 3. 配置会话超时
ClientAliveInterval 300 # 客户端活动间隔(秒)
ClientAliveCountMax 3 # 客户端活动最大次数
LoginGraceTime 30 # 登录宽限时间(秒)
# 4. 配置会话限制
MaxSessions 10 # 每个网络连接的最大会话数
MaxStartups 10:30:60 # 未认证连接的最大数量
# 5. 配置会话安全
TCPKeepAlive yes # 启用 TCP 保持连接
UseDNS no # 禁用 DNS 反向查询
AllowTcpForwarding no # 禁用 TCP 转发
X11Forwarding no # 禁用 X11 转发
# 6. 配置会话认证
ChallengeResponseAuthentication no # 禁用挑战响应认证
PasswordAuthentication no # 禁用密码认证
PubkeyAuthentication yes # 启用公钥认证
AuthorizedKeysFile .ssh/authorized_keys # 授权密钥文件
# 7. 重启 SSH 服务
systemctl restart sshd
# 8. 测试 SSH 会话配置
# 连接到 SSH 服务器
ssh user@server_ip
# 检查会话超时
# 保持会话空闲,应该在 15 分钟后断开
# 检查登录宽限时间
# 连接后不输入密码,应该在 30 秒后断开
# 检查会话限制
# 尝试创建多个会话,应该在 10 个后拒绝
# 9. 验证 SSH 会话配置
# 检查 SSH 服务状态
systemctl status sshd
# 检查 SSH 配置
grep -E "ClientAliveInterval|ClientAliveCountMax|LoginGraceTime|MaxSessions|MaxStartups" /etc/ssh/sshd_config
# 检查 SSH 登录日志
tail -f /var/log/auth.logSSH 会话安全配置总结:
- 会话超时:配置客户端活动检查和登录宽限时间
- 会话限制:限制每个连接的最大会话数和未认证连接数
- 会话安全:禁用不必要的功能,启用 TCP 保持连接
- 会话认证:使用公钥认证,禁用密码认证
- 测试验证:测试会话超时、限制和安全措施
案例 2:会话管理工具使用
场景:使用会话管理工具管理多个终端会话,提高工作效率和安全性。
分析步骤:
# 1. 安装会话管理工具
# 安装 screen
apt install screen
# 安装 tmux
apt install tmux
# 安装 byobu
apt install byobu
# 2. 使用 screen 管理会话
# 创建新会话
screen -S session1
# 列出所有会话
screen -ls
# 分离会话
# 按下 Ctrl+a,然后 d
# 重新连接会话
screen -r session1
# 终止会话
# 在会话中输入 exit
# 3. 使用 tmux 管理会话
# 创建新会话
tmux new -s session1
# 列出所有会话
tmux ls
# 分离会话
# 按下 Ctrl+b,然后 d
# 重新连接会话
tmux attach -t session1
# 在会话中创建新窗口
# 按下 Ctrl+b,然后 c
# 在窗口间切换
# 按下 Ctrl+b,然后 0-9
# 垂直分割窗口
# 按下 Ctrl+b,然后 %
# 水平分割窗口
# 按下 Ctrl+b,然后 "
# 在窗格间切换
# 按下 Ctrl+b,然后 o
# 终止会话
tmux kill-session -t session1
# 4. 使用 byobu 管理会话
# 启动 byobu
byobu
# 查看 byobu 键绑定
byobu-keybindings
# 分离会话
# 按下 F6
# 重新连接会话
byobu attach
# 5. 会话管理最佳实践
# 为不同任务创建不同的会话
screen -S web
# 执行 web 相关任务
# 为不同服务器创建不同的会话
tmux new -s server1
# 连接到 server1
# 使用会话管理工具保持长时间运行的任务
screen -S backup
# 执行备份任务
# 分离会话,任务继续运行
# 6. 会话安全配置
# 为 screen 配置密码
vim ~/.screenrc
# 添加以下内容
password crypt_password
# 为 tmux 配置密码
vim ~/.tmux.conf
# 添加以下内容
set -g lock-command vlock
set -g lock-after-time 300
# 7. 测试会话管理工具
# 创建多个会话并在其中执行任务
# 分离和重新连接会话
# 测试会话锁定功能
# 测试会话恢复功能
# 8. 验证会话管理工具配置
# 检查 screen 配置
cat ~/.screenrc
# 检查 tmux 配置
cat ~/.tmux.conf
# 检查 byobu 配置
byobu-config会话管理工具使用总结:
- 工具安装:安装 screen、tmux 和 byobu 会话管理工具
- screen 使用:创建、列出、分离和重新连接会话
- tmux 使用:创建会话、窗口和窗格,实现多路复用
- byobu 使用:使用友好的界面管理会话
- 最佳实践:为不同任务和服务器创建不同的会话
- 安全配置:为会话管理工具配置密码和自动锁定
案例 3:会话安全策略实施
场景:实施会话安全策略,包括会话超时、自动锁定和会话限制等。
分析步骤:
# 1. 配置 bash 会话超时
# 编辑 /etc/profile 文件
vim /etc/profile
# 添加以下内容
TMOUT=300 # 5 分钟无活动后超时
readonly TMOUT
export TMOUT
# 2. 配置 ssh 会话超时
# 编辑 /etc/ssh/sshd_config 文件
vim /etc/ssh/sshd_config
# 添加以下内容
ClientAliveInterval 300
ClientAliveCountMax 3
# 3. 配置 PAM 会话管理
# 编辑 /etc/pam.d/common-session 文件
vim /etc/pam.d/common-session
# 添加以下内容
session optional pam_exec.so /usr/local/bin/session-monitor.sh
# 4. 创建会话监控脚本
vim /usr/local/bin/session-monitor.sh
# 添加以下内容
#!/bin/bash
# 记录会话开始
if [ "$PAM_TYPE" = "open_session" ]; then
logger "Session opened for user $PAM_USER from $PAM_RHOST on $PAM_TTY at $(date)"
# 记录会话结束
elif [ "$PAM_TYPE" = "close_session" ]; then
logger "Session closed for user $PAM_USER from $PAM_RHOST on $PAM_TTY at $(date)"
fi
# 设置执行权限
chmod +x /usr/local/bin/session-monitor.sh
# 5. 配置自动屏幕锁定
# 安装 xscreensaver
apt install xscreensaver
# 配置 xscreensaver
vim ~/.xscreensaver
# 添加以下内容
mode: blank
lock: True
timeout: 300
# 6. 配置终端锁定
# 安装 vlock
apt install vlock
# 创建锁定脚本
vim /usr/local/bin/lock-screen.sh
# 添加以下内容
#!/bin/bash
# 锁定所有终端
vlock -a
# 设置执行权限
chmod +x /usr/local/bin/lock-screen.sh
# 7. 配置会话限制
# 编辑 /etc/security/limits.conf 文件
vim /etc/security/limits.conf
# 添加以下内容
# 限制每个用户的最大进程数
* hard nproc 1024
# 限制每个用户的最大打开文件数
* hard nofile 4096
# 8. 配置登录尝试限制
# 安装 fail2ban
apt install fail2ban
# 配置 fail2ban
vim /etc/fail2ban/jail.local
# 添加以下内容
[DEFAULT]
ignoreip = 127.0.0.1/8 192.168.1.0/24
bantime = 3600
findtime = 600
maxretry = 5
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
# 9. 启动 fail2ban 服务
systemctl start fail2ban
systemctl enable fail2ban
# 10. 测试会话安全策略
# 测试 bash 会话超时
# 保持终端空闲,应该在 5 分钟后显示超时消息
# 测试 ssh 会话超时
# 保持 ssh 会话空闲,应该在 15 分钟后断开
# 测试自动屏幕锁定
# 保持图形界面空闲,应该在 5 分钟后锁定
# 测试终端锁定
# 运行 lock-screen.sh 脚本,应该锁定所有终端
# 测试登录尝试限制
# 尝试多次错误登录,应该在 3 次后被禁止
# 11. 验证会话安全策略配置
# 检查 bash 会话超时配置
grep TMOUT /etc/profile
# 检查 ssh 会话超时配置
grep -E "ClientAliveInterval|ClientAliveCountMax" /etc/ssh/sshd_config
# 检查 fail2ban 状态
fail2ban-client status
# 检查会话监控日志
tail -f /var/log/syslog | grep "Session opened\|Session closed"会话安全策略实施总结:
- 会话超时:配置 bash 和 ssh 会话超时
- 会话监控:创建会话监控脚本记录会话活动
- 自动锁定:配置 xscreensaver 自动锁定屏幕
- 终端锁定:安装和配置 vlock 锁定终端
- 会话限制:限制每个用户的进程数和打开文件数
- 登录限制:配置 fail2ban 限制登录尝试
- 测试验证:测试会话超时、锁定和限制措施
案例 4:会话监控和审计
场景:配置会话监控和审计,及时发现异常会话行为。
分析步骤:
# 1. 安装和配置 auditd 服务
# 安装 auditd
apt install auditd
# 启动 auditd 服务
systemctl start auditd
systemctl enable auditd
# 2. 配置审计规则记录会话事件
# 编辑 auditd 规则文件
vim /etc/audit/rules.d/audit.rules
# 添加以下规则
# 监控会话管理命令
-w /usr/bin/login -p x -k session_login
-w /usr/bin/su -p x -k session_su
-w /usr/bin/sudo -p x -k session_sudo
-w /usr/bin/screen -p x -k session_screen
-w /usr/bin/tmux -p x -k session_tmux
# 监控登录文件
-w /var/run/utmp -p wa -k session_utmp
-w /var/log/wtmp -p wa -k session_wtmp
-w /var/log/btmp -p wa -k session_btmp
# 3. 重启 auditd 服务
systemctl restart auditd
# 4. 安装和配置 psacct 服务
# 安装 psacct
apt install psacct
# 启动 psacct 服务
systemctl start psacct
systemctl enable psacct
# 5. 配置系统日志
# 编辑 rsyslog 配置文件
vim /etc/rsyslog.conf
# 添加以下内容
# 会话相关日志
auth,authpriv.* /var/log/auth.log
# 6. 重启 rsyslog 服务
systemctl restart rsyslog
# 7. 创建会话监控脚本
vim /usr/local/bin/session-audit.sh
# 添加以下内容
#!/bin/bash
# 显示当前登录用户
echo "=== Current Logged-in Users ==="
who
# 显示用户活动
echo "\n=== User Activity ==="
w
# 显示会话历史
echo "\n=== Recent Login History ==="
last -n 10
# 显示失败登录尝试
echo "\n=== Failed Login Attempts ==="
lastb -n 10
# 显示进程会计信息
echo "\n=== Process Accounting ==="
ap
# 检查审计日志
echo "\n=== Audit Logs (Session Events) ==="
ausearch -k session_ -ts today | head -50
# 设置执行权限
chmod +x /usr/local/bin/session-audit.sh
# 8. 配置定时任务
# 编辑 crontab
crontab -e
# 添加以下任务
# 每小时执行一次会话审计
0 * * * * /usr/local/bin/session-audit.sh >> /var/log/session-audit.log 2>&1
# 9. 测试会话监控和审计
# 登录系统
# 执行一些命令
# 注销系统
# 运行会话审计脚本
/usr/local/bin/session-audit.sh
# 检查审计日志
ausearch -k session_login
ausearch -k session_su
ausearch -k session_sudo
# 检查进程会计信息
lastcomm -u $USER
# 检查系统日志
tail -f /var/log/auth.log
# 10. 验证会话监控和审计配置
# 检查 auditd 服务状态
systemctl status auditd
# 检查 psacct 服务状态
systemctl status psacct
# 检查审计规则
auditctl -l
# 检查会话审计日志
tail -f /var/log/session-audit.log会话监控和审计总结:
- auditd 配置:安装和配置审计服务,监控会话管理命令和登录文件
- psacct 配置:安装和配置进程会计服务,记录进程活动
- 系统日志:配置 rsyslog 记录会话相关事件
- 会话监控:创建会话审计脚本,定期执行会话审计
- 定时任务:配置 crontab 定期执行会话审计
- 测试验证:测试会话监控和审计功能
案例 5:会话安全加固
场景:加固会话安全,防止会话劫持和未授权访问。
分析步骤:
# 1. 配置 SSH 会话加密
# 编辑 SSH 配置文件
vim /etc/ssh/sshd_config
# 添加以下内容
# 使用强加密算法
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
# 使用强 MAC 算法
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512,hmac-sha2-256
# 使用强密钥交换算法
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
# 2. 配置 SSH 会话重定向保护
# 编辑 SSH 配置文件
vim /etc/ssh/sshd_config
# 添加以下内容
# 禁用 X11 转发
X11Forwarding no
# 禁用 TCP 转发
AllowTcpForwarding no
# 禁用网关端口
GatewayPorts no
# 3. 配置 PAM 会话安全
# 编辑 /etc/pam.d/common-auth 文件
vim /etc/pam.d/common-auth
# 添加以下内容
auth required pam_env.so
auth required pam_faildelay.so delay=4000000
auth sufficient pam_unix.so nullok_secure
auth required pam_deny.so
# 4. 配置 PAM 会话限制
# 编辑 /etc/pam.d/common-session 文件
vim /etc/pam.d/common-session
# 添加以下内容
session required pam_limits.so
session required pam_unix.so
session optional pam_umask.so
session optional pam_systemd.so
# 5. 配置防会话劫持
# 安装 libpam-tmpdir
apt install libpam-tmpdir
# 编辑 /etc/pam.d/common-session 文件
vim /etc/pam.d/common-session
# 添加以下内容
session optional pam_tmpdir.so
# 6. 配置会话隔离
# 安装 firejail
apt install firejail
# 创建 firejail 配置
vim ~/.config/firejail/firefox.profile
# 添加以下内容
# Firejail profile for firefox
include /etc/firejail/firefox.profile
# 7. 测试会话安全加固
# 连接到 SSH 服务器
ssh -v user@server_ip
# 检查加密算法和密钥交换算法
# 尝试 X11 转发
ssh -X user@server_ip
# 应该失败
# 尝试 TCP 转发
ssh -L 8080:localhost:80 user@server_ip
# 应该失败
# 检查临时目录
ls -la /tmp/
# 应该看到为每个会话创建的临时目录
# 8. 验证会话安全加固配置
# 检查 SSH 配置
grep -E "Ciphers|MACs|KexAlgorithms|X11Forwarding|AllowTcpForwarding|GatewayPorts" /etc/ssh/sshd_config
# 检查 PAM 配置
cat /etc/pam.d/common-auth
cat /etc/pam.d/common-session
# 检查防会话劫持配置
dpkg -l | grep libpam-tmpdir
# 检查会话隔离配置
dpkg -l | grep firejail会话安全加固总结:
- SSH 会话加密:配置使用强加密算法、MAC 算法和密钥交换算法
- 会话重定向保护:禁用 X11 转发和 TCP 转发
- PAM 会话安全:配置 PAM 模块增强会话安全
- 防会话劫持:安装和配置 libpam-tmpdir,为每个会话创建临时目录
- 会话隔离:安装和配置 firejail,实现应用级会话隔离
- 测试验证:测试会话加密、转发限制和安全措施
课后练习
SSH 会话安全配置练习:
- 配置 SSH 会话超时和限制
- 测试会话超时功能
- 验证 SSH 配置
会话管理工具使用练习:
- 安装和使用 screen、tmux 和 byobu
- 创建、分离和重新连接会话
- 配置会话管理工具的安全选项
会话安全策略实施练习:
- 配置 bash 会话超时
- 配置自动屏幕锁定
- 配置终端锁定
- 测试会话安全策略
会话监控和审计练习:
- 安装和配置 auditd 服务
- 配置审计规则记录会话事件
- 创建会话审计脚本
- 测试会话监控和审计功能
会话安全加固练习:
- 配置 SSH 会话加密
- 配置防会话劫持措施
- 配置会话隔离
- 测试会话安全加固效果
会话安全最佳实践练习:
- 制定会话安全策略文档
- 实施会话安全最佳实践
- 定期审查会话安全配置
总结
本章节详细介绍了 Linux 系统会话安全管理的方法和最佳实践,包括:
- 会话安全的基本概念和重要性
- Linux 系统的会话管理机制
- 会话管理工具的使用方法
- 会话安全策略的实施
- 会话监控和审计方法
- 会话安全威胁和防护
- 会话安全的最佳实践
- 实际会话安全案例的分析和解决
通过学习本章节,您应该能够全面了解会话安全的重要性,掌握会话安全管理的方法和最佳实践,提高系统的安全性。在实际应用中,建议根据系统的具体情况和安全需求,采取相应的会话安全措施,确保系统免受会话相关的攻击和威胁。