STIG 的 RedHat 8 在 SSH 超时时终止 tmux 会话

STIG 的 RedHat 8 在 SSH 超时时终止 tmux 会话

我正在使用 Red Hat Enterprise Linux (RHEL) 8 计算机,该计算机通过 OpenSCAP 应用了 DISA STIG。STIG 要求用户自动进入 tmux 会话,该 tmux 会话在设置的空闲时间后锁定屏幕,并且 SSH 在另一个空闲时间后断开连接。

我遇到的问题是,我们有一些长时间运行的命令,我们启动它们然后离开。首先,tmux 锁定屏幕,最后 SSH 终止连接。预期的行为是,当我们通过 SSH 重新连接时,旧的 tmux 会话会重新连接,或者在旧会话仍在后台运行时创建新的 tmux 会话。无论哪种方式,我们都不希望 tmux 会话在 SSH 断开连接时终止。

相关的 STIG 和我们的配置如下:

https://www.stigviewer.com/stig/red_hat_enterprise_linux_8/2023-09-11/finding/V-230349

$ cat /etc/profile.d/tmux.sh
if [ "$PS1" ]; then
  parent=$(ps -o ppid= -p $$)
  name=$(ps -o comm= -p $parent)
  case "$name" in (sshd|login) tmux ;; esac
fi
if [ -n "$TMUX" ]; then
  # render /etc/issue or else fall back to kernel/system info
  agetty --show-issue 2>/dev/null || uname -a

  # message of the day
  for motd in /run/motd.dynamic /etc/motd; do
    if [ -s "$motd" ]; then cat "$motd"; break; fi
  done

  # last login
  last $USER |awk 'NR==2 {
    if (NF==10) { i=1; if ($3!~/^:/) from = " from " $3 }
    printf("Last login: %s %s %s %s%s on %s\n",
      $(3+i), $(4+i), $(5+i), $(6+i), from, $2);
    exit
  }'

  # mail check
  if [ -s "/var/mail/$USER" ] # may need to change to /var/spool/mail/$USER
    then echo "You have  mails."
    else echo "You have no mail."
  fi
fi

https://www.stigviewer.com/stig/red_hat_enterprise_linux_8/2023-09-11/finding/V-230353

$ cat /etc/tmux.conf
set -g lock-after-time 300
set -g lock-command vlock
bind X lock-session

https://www.stigviewer.com/stig/red_hat_enterprise_linux_8/2023-09-11/finding/V-244525

$ cat /etc/ssh/sshd_config
...
Compression no
ClientAliveInterval 600
ClientAliveCountMax 1
#UseDNS no
...

我还怀疑 systemd-logind 与此有关,因为这一论点在 Debian 邮件列表上。

$ cat /etc/systemd/logind.conf
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See logind.conf(5) for details.

[Login]
StopIdleSessionSec=900
#NAutoVTs=6
#ReserveVT=6
KillUserProcesses=no
#KillOnlyUsers=
#KillExcludeUsers=root
#InhibitDelayMaxSec=5
#HandlePowerKey=poweroff
#HandleSuspendKey=suspend
#HandleHibernateKey=hibernate
#HandleLidSwitch=suspend
#HandleLidSwitchExternalPower=suspend
#HandleLidSwitchDocked=ignore
#PowerKeyIgnoreInhibited=no
#SuspendKeyIgnoreInhibited=no
#HibernateKeyIgnoreInhibited=no
#LidSwitchIgnoreInhibited=yes
#HoldoffTimeoutSec=30s
#IdleAction=ignore
#IdleActionSec=30min
#RuntimeDirectorySize=10%
#RemoveIPC=no
#InhibitorsMax=8192
#SessionsMax=8192
#StopIdleSessionSec=infinity

我编辑了较长的文件以提供相关部分。

我尝试编辑 profile.d 启动以匹配这个 StackOverflow 建议,我尝试将 SSH ClientAlive 更改为 60 和 10(加上 systemd restart),尝试将 logind.conf 更改为KillUserProcesses=no(使用 systemd restart 和 OS restart 取消注释该行),尝试启动一个与我们登录时获得的会话(会话 0)不同的 tmux 会话(会话 1),SSH 断开连接时两个会话都会终止。这些更改均未产生理想的行为。

还有其他人遇到过这个问题并找到了解决方法吗?

相关内容