首页/安全/安全加固速查/交互会话超时(TMOUT)
主机加固基线90 条

交互会话超时(TMOUT)

无人值守的登录会话是等保与 CIS 明确要求控制的点;通过 TMOUT 让空闲 shell 自动退出,减少被劫持与误操作窗口。

安全加固速查安全更新于 2026-10-13

空闲会话是待爆的窗口

无人值守的登录终端会一直保持已认证状态:运维离开工位、远程桌面没断、跳板机会话挂着,任何能碰到终端的人都能直接操作。等保与 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

超时控制参数

参数位置作用与读法
TMOUTshell 环境变量空闲秒数,仅对交互式 bash 生效
ClientAliveInterval/etc/ssh/sshd_config每 N 秒发一次探测包,0 表示不探测
ClientAliveCountMax/etc/ssh/sshd_config连续 N 次无响应即断开,乘积约等于实际超时
readonlyshell 内置锁定变量,用户无法在当前会话内 unset
TMOUT 只对 bash 系 shell 生效,zsh、sh、非交互命令与长时间运行的 SSH 连接都不受它约束;如果只配置 TMOUT 就认为控制到位,会留下明显的失效路径。要与 sshd 的心跳参数一起用,并覆盖实际使用的 shell 类型。
TMOUT 达到阈值时会结束当前 shell,前台等待输入的交互命令也会被终止。习惯挂长任务的人应当改用 tmux、screen 或 nohup 把进程与会话解耦,而不是要求放宽全局超时。

易错点

  • 设置 readonly 后用户无法在当前会话内取消超时,遇到特殊场景只能走例外流程,配置前先想清楚例外名单
  • 只改 TMOUT 不管 sshd 心跳:非 bash shell 与网络中断场景仍会留下长时间空闲连接
  • 阈值过短(如 60 秒)会让正常运维不断重连,反而诱使用户绕过控制,600 秒左右更易落地
  • 把超时配置写在个别用户的家目录初始化文件里,等于漏掉全量用户,应放在 /etc/profile.d 下

数据来源与参考

  • bash(1) 手册(TMOUT)
  • 等保 2.0 三级:访问控制(登录超时退出)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌