空闲会话是待爆的窗口
无人值守的登录终端会一直保持已认证状态:运维离开工位、远程桌面没断、跳板机会话挂着,任何能碰到终端的人都能直接操作。等保与 CIS 都要求控制登录超时。Linux 上最直接的做法是设置 TMOUT,让空闲超过阈值的 shell 自动退出;网络层还可以用 sshd 的心跳探测兜底,两者覆盖的失效场景并不相同。
基本信息
| 加固项 | 空闲交互会话自动退出 |
|---|---|
| 适用平台 | Linux(bash 系 shell;其他 shell 机制不同) |
| 权限要求 | root 写全局配置 |
| 基线值 | TMOUT 600 秒左右,对全用户生效 |
| 配套方式 | sshd 的 ClientAliveInterval / ClientAliveCountMax |
典型使用场景
- 等保三级“访问控制”条款要求登录超时退出
- 共用工位的运维终端降低被顺手操作的风险
- 跳板机与堡垒机侧减少挂起会话占用的连接数
- 审查中发现大量长期空闲的 root 会话需要治理
- 云主机控制台会话的安全兜底
加固与复核
加固与复核
printf 'TMOUT=600; export TMOUT; readonly TMOUT\n' > /etc/profile.d/tmout.sh
chmod 644 /etc/profile.d/tmout.sh
# 新开一个登录会话后验证
echo $TMOUT # 期望 600;输出 0 或空说明没生效
# SSH 层兜底:约 5 分钟无响应即断开
# /etc/ssh/sshd_config
# ClientAliveInterval 300
# ClientAliveCountMax 1超时控制参数
| 参数 | 位置 | 作用与读法 |
|---|---|---|
| TMOUT | shell 环境变量 | 空闲秒数,仅对交互式 bash 生效 |
| ClientAliveInterval | /etc/ssh/sshd_config | 每 N 秒发一次探测包,0 表示不探测 |
| ClientAliveCountMax | /etc/ssh/sshd_config | 连续 N 次无响应即断开,乘积约等于实际超时 |
| readonly | shell 内置 | 锁定变量,用户无法在当前会话内 unset |
TMOUT 只对 bash 系 shell 生效,zsh、sh、非交互命令与长时间运行的 SSH 连接都不受它约束;如果只配置 TMOUT 就认为控制到位,会留下明显的失效路径。要与 sshd 的心跳参数一起用,并覆盖实际使用的 shell 类型。
TMOUT 达到阈值时会结束当前 shell,前台等待输入的交互命令也会被终止。习惯挂长任务的人应当改用 tmux、screen 或 nohup 把进程与会话解耦,而不是要求放宽全局超时。