You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在用户闲置15分钟后终止screen会话而非锁定?

闲置15分钟终止Screen会话并满足PCI DSS合规的方案

针对你提到的需求——用户闲置15分钟后终止Screen会话(而非仅锁定),同时规避TMOUT和ClientAliveInterval无法处理vim/htop等前台进程的问题,以下是两种可行方案:

方案1:利用Screen内置的idle钩子直接终止会话

Screen的idle指令不仅可以触发锁屏,还能执行自定义命令。你可以通过配置screenrc,让Screen在检测到指定时长的闲置后直接终止当前会话:

  1. 编辑全局Screen配置文件(/etc/screenrc)或用户个人配置文件(~/.screenrc)
  2. 添加以下配置行:
    idle 900 exec kill -TERM $STY
    
    • 900 对应15分钟(60*15)
    • $STY 是Screen内置的环境变量,代表当前会话的唯一ID
    • 使用kill -TERM而非-9可以让Screen优雅关闭,降低数据丢失风险

配置生效后,当Screen会话检测到15分钟无用户输入时,会自动执行终止命令,断开用户连接。

方案2:外部监控脚本(适配多会话场景+审计日志)

如果需要更灵活的控制(比如针对特定用户组、记录审计日志以满足PCI DSS的审计要求),可以编写一个定时运行的监控脚本:

脚本示例

#!/bin/bash
IDLE_THRESHOLD=900  # 15分钟,单位秒

# 遍历所有活跃的Screen会话
for session in $(screen -list | grep -E '[0-9]+\.' | awk '{print $1}'); do
    # 获取会话所属用户
    user=$(ps -o user= -p $(screen -ls $session | awk '{print $1}' | cut -d. -f1))
    # 获取用户终端的闲置时间(从w命令提取)
    idle_time=$(w -h $user | grep -E "$session|pts/" | awk '{print $5}')
    
    # 转换闲置时间为秒(处理"days"/"hours"/"minutes"格式)
    if [[ $idle_time =~ d ]]; then
        idle_seconds=$(( ${idle_time%?} * 86400 ))
    elif [[ $idle_time =~ h ]]; then
        idle_seconds=$(( ${idle_time%?} * 3600 ))
    elif [[ $idle_time =~ m ]]; then
        idle_seconds=$(( ${idle_time%?} * 60 ))
    else
        idle_seconds=$idle_time
    fi
    
    # 若闲置时间超过阈值,终止会话并记录日志
    if [[ $idle_seconds -ge $IDLE_THRESHOLD ]]; then
        kill -TERM $(screen -ls $session | awk '{print $1}' | cut -d. -f1)
        logger -p auth.notice "Screen session $session for user $user terminated due to idle timeout ($idle_seconds seconds)"
    fi
done

部署步骤

  1. 将脚本保存为/usr/local/bin/screen_idle_killer.sh并赋予执行权限:chmod +x /usr/local/bin/screen_idle_killer.sh
  2. 添加cron定时任务,每分钟运行一次:
    * * * * * root /usr/local/bin/screen_idle_killer.sh
    

这个方案的优势在于:

  • 完全基于用户输入的闲置时间判断,不受前台运行的vim/htop等进程影响
  • 生成审计日志,符合PCI DSS对会话活动记录的要求
  • 可根据需求调整阈值、用户范围等逻辑

PCI DSS合规注意事项

无论采用哪种方案,需确保:

  • 所有交互式会话(包括Screen)都被覆盖,无遗漏
  • 终止会话的操作被记录到不可篡改的日志系统中
  • 相关配置和脚本的权限被严格控制(比如仅root可修改)

内容的提问来源于stack exchange,提问作者Emme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 15:50:22