![对用户强加 tmux 的有效性](https://linux22.com/image/227113/%E5%AF%B9%E7%94%A8%E6%88%B7%E5%BC%BA%E5%8A%A0%20tmux%20%E7%9A%84%E6%9C%89%E6%95%88%E6%80%A7.png)
如果你看STIG 参考号 V-230349你会看到全文,我即将对其进行总结。
最初的陈述或规则标题是RHEL 8 必须确保会话控制在 shell 初始化时自动启动。
它要求:
# /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
在一种情况下,仅提供以下信息:
讨论:Tmux 是一个终端多路复用器,可以从单个屏幕创建、访问和控制多个终端。红帽认可 tmux 作为推荐的会话控制包。
其中没有提及有关安全性的原因或基本原理,但如果您在该规则上进行网络搜索,您可以阅读更多似乎试图证明其合理性的细节。另外后续相关安全规则也要求
# /etc/tmux.conf
set -g lock-command vlock
bind X lock-session
set -g lock-after-time 900
因此,每当用户通过 ssh 连接到 Linux 以及 VNC 会话中任何打开的终端窗口时,该 设置都会/etc/profile.d/tmux.sh
导致运行,然后设置会导致在 15 分钟内未输入字符的情况下在任何 tmux 会话中出现密码提示。那个 tmux 窗口。tmux
tmux.conf
我的问题是针对那些使用tmux
[按预期]并且了解它的人(因为我从不使用 tmux)这是使用 tmux 的好还是坏方法? 除了在 Linux 的任何终端窗口中强制出现密码提示之外,也就是说,如果用户不直接键入exit
杀死 tmux 并在没有它的情况下正常继续。然而我的经验是,99% 的用户都不懂 Linux,甚至不了解 tmux。第一个抱怨是他们输入 exit 但现在他们的窗口没有关闭。
但对于tmux
知识分子来说tmux
,在任何地方都强制使用这样的用法是否会带来大量打开和遗忘 tmux 会话的风险? ...因为 Tmux 是一个终端多路复用器,可以从一个屏幕创建、访问和控制多个终端;因此,作为管理员,我不希望用户运行他们一无所知或不知道如何管理的东西。
答案1
STIG 的在线版本要求exec tmux
;这样就避免了tmux
一启动就退出的解决方法,也避免了用户需要退出两次。
不知道的用户tmux
不应该最终留下tmux
会话:他们不会在内部启动更多窗口tmux
,因此当他们退出 shell 时,tmux
也会退出。
通过这样的设置,有些用户最终会受到惩罚:做了解它tmux
并将其用于长期会话。每当系统强制tmux
为他们启动时,此类用户就必须手动切换到之前的会话 ( Ctrlb()。那些用户最终可能会留下tmux
会话,尽管开销很小。
就我个人而言,我不介意这样的设置,只要将其更改为自动重新加入属于登录用户的任何分离会话即可。(类似于tmux has-session && exec tmux attach-session || exec tmux
。)
答案2
screen
我多年来一直使用类似的配置,但可以将我的登录重新连接到上一个会话。 (这是一种便利措施,而不是安全措施,因此会话没有应用密码。)
一般来说,它的效果非常好。有时,会话会被标记为“活动”而不是“分离”,通常是在网络连接中断时和会话空闲(无输入/输出)。这可以通过从 shell 或本身(如果支持)设置空闲超时来解决tmux
。
我使用的一个版本exec screen
在直接 shell 中完全失败。这是客户端(程序)调用的内容:
ssh -q -tt "$host" \
"screen -dr $session || screen -S $session -l $* || screen -l $* || screen || bash -i || sh -i"
其中$host
引用远程目标主机,并且$session
是使用我用于匹配断开连接的会话的已知前缀格式化的会话名称。