会话安全管理

教学目标

  • 掌握会话安全的基本概念和重要性
  • 了解 Linux 系统的会话管理机制
  • 熟悉会话管理工具的使用方法
  • 学会实施会话安全策略
  • 了解会话监控和审计方法
  • 掌握会话安全的最佳实践

主要知识点

1. 会话安全基本概念

  • 会话:用户登录后到注销前的时间段
  • 会话管理:对用户会话的创建、维护和终止的管理
  • 会话安全:保护会话免受未授权访问和攻击的措施
  • 会话劫持:攻击者获取并控制用户会话的行为
  • 会话超时:会话在一段时间无活动后自动终止
  • 会话锁定:临时锁定会话以防止未授权访问

2. Linux 会话管理机制

  • 登录会话

    • 控制台登录会话
    • 远程登录会话 (SSH)
    • 图形界面登录会话
  • 进程组

    • 相关进程的集合
    • 由会话领导进程创建
    • 进程组 ID (PGID) 标识
  • 会话

    • 一个或多个进程组的集合
    • 由会话首进程创建
    • 会话 ID (SID) 标识
  • 控制终端

    • 与会话关联的终端设备
    • 会话首进程的控制终端
    • 用于输入/输出操作

3. 会话管理工具

  • 系统工具

    • who:显示当前登录用户
    • w:显示当前登录用户及其活动
    • ps:显示进程状态
    • pstree:显示进程树
    • kill:终止进程
  • 会话管理工具

    • screen:终端多路复用器
    • tmux:终端多路复用器
    • byobu:screen/tmux 的前端
    • dtach:终端分离工具
  • 远程会话工具

    • ssh:安全远程登录
    • mosh:移动 shell
    • telnet:远程登录(不安全)

4. 会话安全配置

  • SSH 会话配置

    • 配置文件:/etc/ssh/sshd_config
    • 关键配置项:ClientAliveIntervalClientAliveCountMaxLoginGraceTime
  • PAM 会话配置

    • 配置文件:/etc/pam.d/common-session
    • 会话管理模块:pam_limits.sopam_env.sopam_unix.so
  • 会话限制

    • 最大会话数
    • 会话超时时间
    • 资源限制
  • 会话锁定

    • 屏幕锁定工具:vlockxscreensaver
    • 自动锁定配置

5. 会话监控和审计

  • 系统日志

    • 记录会话相关事件
    • 关键日志文件:/var/log/auth.log/var/log/secure
  • 审计系统

    • 使用 auditd 服务
    • 配置审计规则记录会话事件
    • 查看审计日志:ausearchaureport 命令
  • 会话监控工具

    • 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.log

SSH 会话安全配置总结

  • 会话超时:配置客户端活动检查和登录宽限时间
  • 会话限制:限制每个连接的最大会话数和未认证连接数
  • 会话安全:禁用不必要的功能,启用 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,实现应用级会话隔离
  • 测试验证:测试会话加密、转发限制和安全措施

课后练习

  1. SSH 会话安全配置练习

    • 配置 SSH 会话超时和限制
    • 测试会话超时功能
    • 验证 SSH 配置
  2. 会话管理工具使用练习

    • 安装和使用 screen、tmux 和 byobu
    • 创建、分离和重新连接会话
    • 配置会话管理工具的安全选项
  3. 会话安全策略实施练习

    • 配置 bash 会话超时
    • 配置自动屏幕锁定
    • 配置终端锁定
    • 测试会话安全策略
  4. 会话监控和审计练习

    • 安装和配置 auditd 服务
    • 配置审计规则记录会话事件
    • 创建会话审计脚本
    • 测试会话监控和审计功能
  5. 会话安全加固练习

    • 配置 SSH 会话加密
    • 配置防会话劫持措施
    • 配置会话隔离
    • 测试会话安全加固效果
  6. 会话安全最佳实践练习

    • 制定会话安全策略文档
    • 实施会话安全最佳实践
    • 定期审查会话安全配置

总结

本章节详细介绍了 Linux 系统会话安全管理的方法和最佳实践,包括:

  • 会话安全的基本概念和重要性
  • Linux 系统的会话管理机制
  • 会话管理工具的使用方法
  • 会话安全策略的实施
  • 会话监控和审计方法
  • 会话安全威胁和防护
  • 会话安全的最佳实践
  • 实际会话安全案例的分析和解决

通过学习本章节,您应该能够全面了解会话安全的重要性,掌握会话安全管理的方法和最佳实践,提高系统的安全性。在实际应用中,建议根据系统的具体情况和安全需求,采取相应的会话安全措施,确保系统免受会话相关的攻击和威胁。

扩展阅读

« 上一篇 登录安全配置 下一篇 » 安全审计配置